SQL Server Login Silinirken “The database principal owns a database role and cannot be dropped.” Hatasının Çözümü

Bu makalede veritabanında herhangi bir login silineceği zaman aşağıdaki hata mesajı alınmaktadır.

The database principal owns a database role and cannot be dropped.

LOGIN1 kullanıcısı, ilgili veritabanında bir database role’ün sahibidir (owner).

SQL Server’da:

  • Bir kullanıcı bir role’ün sahibi (AUTHORIZATION OWNER) ise
  • O kullanıcı silinemez (DROP USER yapılamaz)

Çünkü rol sahipsiz kalamaz.

Aşağıdaki komut ile kullanıcının sahip olduğu roller bulunabilir.

SELECT r.name AS RoleName
FROM sys.database_principals r
WHERE r.owning_principal_id = USER_ID('LOGIN1');

İlgili kayıt sonucunda veritabanı altında kullanıcının bir role üzerinde yetlkili olduğu görülmektedir. Hataya odaklanırsak database role olduğunu belirtiyor. İlgili role’deki LOGIN1’i değiştiriyorum.

Role owner işlemine başka bir kullanıcıya aşağıdaki script ile de verilebilir.

ALTER AUTHORIZATION ON ROLE::RoleAdi TO dbo;

Değiştirdikten sonra silme işlemi başarılı bir şekilde olmuş oldu.

Tüm jobların ownerlarını görmek için şu script’i kullanabilirsiniz. Herhangi bir job’da kullanıcı owner olduğu zamanda silinmeyebilir. Bunun için o job üzerinde o kullanıcının kaldırılması gerekmektedir.

SELECT s.name AS JobName, l.name AS JobOwner
FROM msdb..sysjobs s
LEFT JOIN master.sys.syslogins l ON s.owner_sid = l.sid
WHERE l.name IS NOT NULL
ORDER by l.name

Başka bir makalede görüşmek dileğiyle..

 “Küçüklerimize merhamet etmeyen, büyüklerimize saygı göstermeyen bizden değildir.” (Tirmizî)

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir