Sono un programmatore, non un dba ... so quanto basta per essere pericoloso.
Ho ereditato un database con un utente legacy che è un db_owner per il database. Non possiamo regolare l'autorizzazione di questo utente per tabelle, schemi, ecc. Esistenti, per motivi di lavoro, ma alcune nuove tabelle vengono create e voglio solo che questo utente abbia accesso a SELECT su di esse.
Le autorizzazioni sono state impostate per questo utente per queste tabelle in modo che tutto sia DENIED, tranne SELECT, che è impostato su GRANT.
Tuttavia, quando questo utente (dbadmin) tenta di eseguire un SELECT su una di queste tabelle (AccountingAudit), si verifica questo errore:
The SELECT permission was denied on the object 'AccountingAudit', database 'billing', schema 'dbo'.
Ho eseguito questo SQL per provare e vedere quali autorizzazioni sono impostate per questa tabella / utente:
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
E questo è quello che torno:
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
Sembra che dovrebbe funzionare bene?
La chiamata SELECT che sto effettuando è un SELECT * FROM AccountingAudit molto semplice, all'interno di SSMS. Non sto facendo alcun sp_executesql speciale o qualcosa del genere.
Ho provato a concedere esplicitamente l'autorizzazione:
GRANT SELECT ON [dbo].AccountingAudit TO dbadmin
Questo non ha alcun effetto (perché dovrebbe, la query sopra mostra già che è stata concessa! ;-)
Ho cercato attraverso stackoverflow.com e altrove e non riesco a trovare nulla che non abbia ancora provato. Mi chiedo se abbia qualcosa a che fare con il modo in cui gli schemi sono impostati. (A questo punto so ben poco sugli schemi.)
Qualche idea? Grazie!