Je suis programmeur, pas dba ... J'en sais juste assez pour être dangereux.
J'ai hérité d'une base de données avec un utilisateur hérité qui est un db_owner pour la base de données. Nous ne pouvons pas ajuster l'autorisation de cet utilisateur pour les tables, schémas, etc. existants, pour des raisons commerciales, mais de nouvelles tables sont en cours de création, et je souhaite uniquement que cet utilisateur dispose d'un accès SELECT sur celles-ci.
Des autorisations ont été définies pour cet utilisateur pour ces tables afin que tout soit REFUSÉ, à l'exception de SELECT, qui est défini sur GRANT.
Pourtant, lorsque cet utilisateur (dbadmin) tente d'effectuer un SELECT sur l'une de ces tables (AccountingAudit), cette erreur se produit:
The SELECT permission was denied on the object 'AccountingAudit', database 'billing', schema 'dbo'.
J'ai exécuté ce SQL pour essayer de voir quelles autorisations sont définies pour cette table / cet utilisateur:
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
Et voici ce que je récupère:
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
Il semble que cela devrait fonctionner correctement?
L'appel SELECT que je fais est un SELECT * FROM AccountingAudit très basique, depuis SSMS. Je ne fais pas de sp_executesql spécial ou quelque chose comme ça.
J'ai essayé d'accorder explicitement l'autorisation:
GRANT SELECT ON [dbo].AccountingAudit TO dbadmin
Cela n'a aucun effet (pourquoi, la requête ci-dessus montre déjà que c'est accordé! ;-)
J'ai cherché sur stackoverflow.com et ailleurs, et je ne trouve rien que je n'ai pas encore essayé. Je me demande si cela a quelque chose à voir avec la configuration des schémas. (À ce stade, je connais très peu de schémas.)
Des idées? Merci!