Jestem programistą, a nie dba ... Wiem wystarczająco dużo, aby być niebezpiecznym.
Dziedziczyłem bazę danych ze starszym użytkownikiem, który jest właścicielem bazy danych db_owner. Nie możemy dostosowywać uprawnień tego użytkownika do istniejących tabel, schematów itp. Ze względów biznesowych, ale tworzone są nowe tabele i chcę, aby ten użytkownik miał do nich dostęp WYBIERZ.
Uprawnienia dla tych użytkowników zostały ustawione dla tych tabel, dzięki czemu wszystko jest ZABLOKOWANE, z wyjątkiem WYBIERZ, dla którego ustawiono GRANT.
Jednak gdy ten użytkownik (dbadmin) próbuje wykonać WYBÓR w jednej z tych tabel (AccountingAudit), występuje ten błąd:
The SELECT permission was denied on the object 'AccountingAudit', database 'billing', schema 'dbo'.
Uruchomiłem ten SQL, aby sprawdzić, jakie uprawnienia są ustawione dla tej tabeli / użytkownika:
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
I to właśnie otrzymuję:
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
Wygląda na to, że powinno działać poprawnie?
Wywoływane przeze mnie WYBÓR to bardzo podstawowy WYBÓR * z AccountingAudit z poziomu SSMS. Nie robię żadnego specjalnego sp_executesql ani nic takiego.
Próbowałem jawnie udzielić pozwolenia:
GRANT SELECT ON [dbo].AccountingAudit TO dbadmin
Nie ma to żadnego efektu (dlaczego miałoby to być, powyższe zapytanie pokazuje, że zostało przyznane! ;-)
Szukałem przez stackoverflow.com i gdzie indziej i nie mogę znaleźć niczego, czego jeszcze nie próbowałem. Zastanawiam się, czy ma to związek z konfiguracją schematów. (W tym momencie niewiele wiem o schematach.)
Jakieś pomysły? Dzięki!