Eu sou um programador, não um dba ... Eu sei apenas o suficiente para ser perigoso.
Eu herdei um banco de dados com um usuário herdado que é um db_owner para o banco de dados. Não podemos ajustar a permissão deste usuário para tabelas, esquemas, etc. existentes, por motivos comerciais, mas algumas novas tabelas estão sendo criadas e eu quero que esse usuário tenha apenas acesso SELECT nelas.
As permissões foram definidas para esse usuário para essas tabelas, para que tudo seja NEGADO, exceto SELECT, que está definido como GRANT.
No entanto, quando esse usuário (dbadmin) tenta executar um SELECT em uma dessas tabelas (AccountingAudit), esse erro ocorre:
The SELECT permission was denied on the object 'AccountingAudit', database 'billing', schema 'dbo'.
Eu executei este SQL para tentar ver quais permissões estão definidas para esta tabela / usuário:
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 é isso que eu recebo de volta:
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
Parece que deveria estar funcionando certo?
A chamada SELECT que estou fazendo é um SELECT * FROM AccountingAudit muito básico, no SSMS. Eu não estou fazendo nenhum sp_executesql especial ou algo assim.
Eu tentei conceder permissão explicitamente:
GRANT SELECT ON [dbo].AccountingAudit TO dbadmin
Isso não tem efeito (por que, a consulta acima já mostra que é concedida! ;-)
Eu procurei no stackoverflow.com e em outros lugares, e não consigo encontrar nada que ainda não tenha tentado. Gostaria de saber se tem algo a ver com a forma como os esquemas são configurados. (Neste ponto, eu sei muito pouco sobre esquemas.)
Alguma ideia? Obrigado!