Ich bin ein Programmierer, kein dba ... Ich weiß gerade genug, um gefährlich zu sein.
Ich habe eine Datenbank mit einem älteren Benutzer geerbt, der ein Datenbankbesitzer für die Datenbank ist. Wir können die Berechtigung dieses Benutzers für vorhandene Tabellen, Schemas usw. aus geschäftlichen Gründen nicht anpassen, aber einige neue Tabellen werden erstellt, und ich möchte nur, dass dieser Benutzer SELECT-Zugriff darauf hat.
Für diesen Benutzer wurden Berechtigungen für diese Tabellen festgelegt, sodass alles VERWEIGERT wird, mit Ausnahme von SELECT, das auf GRANT festgelegt ist.
Wenn dieser Benutzer (dbadmin) jedoch versucht, ein SELECT für eine dieser Tabellen (AccountingAudit) auszuführen, tritt folgender Fehler auf:
The SELECT permission was denied on the object 'AccountingAudit', database 'billing', schema 'dbo'.
Ich habe diese SQL ausgeführt, um zu sehen, welche Berechtigungen für diese Tabelle / diesen Benutzer festgelegt sind:
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
Und das bekomme ich zurück:
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
Scheint, als sollte es funktionieren, oder?
Der SELECT-Aufruf, den ich mache, ist ein sehr einfaches SELECT * FROM AccountingAudit aus SSMS. Ich mache kein spezielles sp_executesql oder ähnliches.
Ich habe versucht, die Erlaubnis explizit zu erteilen:
GRANT SELECT ON [dbo].AccountingAudit TO dbadmin
Dies hat keine Auswirkung (warum sollte es so sein, die obige Abfrage zeigt bereits, dass es gewährt wird! ;-)
Ich habe durch stackoverflow.com und anderswo gesucht und kann nichts finden, was ich noch nicht ausprobiert habe. Ich frage mich, ob es etwas damit zu tun hat, wie die Schemas eingerichtet sind. (Zu diesem Zeitpunkt weiß ich sehr wenig über Schemata.)
Irgendwelche Ideen? Vielen Dank!