Ben bir programcıyım, dba değil ... Tehlikeli olmaya yetecek kadar biliyorum.
Ben veritabanı için bir db_owner olan eski bir kullanıcı ile bir veritabanını miras. Bu kullanıcının mevcut tablolar, şemalar, vb. İçin ticari nedenlerle iznini ayarlayamayız, ancak bazı yeni tablolar oluşturuluyor ve bu kullanıcının yalnızca bunlarda SELECT erişimine sahip olmasını istiyorum.
Bu tablolar için bu kullanıcı için izinler ayarlandı, böylece GRANT olarak ayarlanan SELECT hariç her şey DENIED.
Ancak bu kullanıcı (dbadmin) bu tablolardan birinde (AccountingAudit) bir SELECT gerçekleştirmeye çalıştığında, bu hata oluşur:
The SELECT permission was denied on the object 'AccountingAudit', database 'billing', schema 'dbo'.
Bu tablo / kullanıcı için hangi izinlerin ayarlandığını görmek ve denemek için bu SQL çalıştırdım:
select object_name(major_id) as object,
user_name(grantee_principal_id) as grantee,
user_name(grantor_principal_id) as grantor,
permission_name,
state_desc
from sys.database_permissions
Ve işte geri döndüğüm şey:
AccountingAudit dbadmin dbo ALTER DENY
AccountingAudit dbadmin dbo CONTROL DENY
AccountingAudit dbadmin dbo DELETE DENY
AccountingAudit dbadmin dbo INSERT DENY
AccountingAudit dbadmin dbo REFERENCES DENY
AccountingAudit dbadmin dbo SELECT GRANT
AccountingAudit dbadmin dbo TAKE OWNERSHIP DENY
AccountingAudit dbadmin dbo UPDATE DENY
AccountingAudit dbadmin dbo VIEW DEFINITION DENY
AccountingAudit dbadmin dbo VIEW CHANGE TRACKING DENY
Doğru çalışıyor olmalı gibi mi?
Yaptığım SELECT çağrısı, SSMS içinden çok temel bir SELECT * FROM AccountingAudit. Özel bir sp_executesql ya da bunun gibi bir şey yapmıyorum.
Açıkça izin vermeyi denedim:
GRANT SELECT ON [dbo].AccountingAudit TO dbadmin
Bunun bir etkisi yoktur (neden böyle olsun, yukarıdaki sorgu zaten verildiğini gösteriyor! ;-)
Stackoverflow.com ve başka bir yerde arama yaptım ve henüz denemediğim bir şey bulamıyorum. Şemaların nasıl kurulduğuyla ilgili bir şey olup olmadığını merak ediyorum. (Bu noktada şemalar hakkında çok az şey biliyorum.)
Herhangi bir fikir? Teşekkürler!