Soy un programador, no un dba ... Sé lo suficiente como para ser peligroso.
Heredé una base de datos con un usuario heredado que es un db_owner para la base de datos. No podemos ajustar el permiso de este usuario para tablas, esquemas, etc. existentes, por razones comerciales, pero se están creando algunas tablas nuevas, y solo quiero que este usuario tenga acceso SELECCIONAR sobre ellas.
Se han establecido permisos para este usuario para estas tablas, de modo que todo está DENEGADO, excepto SELECT, que está establecido en GRANT.
Sin embargo, cuando este usuario (dbadmin) intenta realizar una SELECCIÓN en una de estas tablas (Auditoría de contabilidad), se produce este error:
The SELECT permission was denied on the object 'AccountingAudit', database 'billing', schema 'dbo'.
Ejecuté este SQL para probar y ver qué permisos están establecidos para esta tabla / usuario:
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
Y esto es lo que regreso:
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 debería estar funcionando ¿verdad?
La llamada SELECT que estoy haciendo es una SELECT * FROM AccountingAudit muy básica, desde SSMS. No estoy haciendo ningún sp_executesql especial ni nada de eso.
He intentado explícitamente otorgar permiso:
GRANT SELECT ON [dbo].AccountingAudit TO dbadmin
Esto no tiene ningún efecto (¿por qué lo haría, la consulta anterior ya muestra que se ha concedido! ;-)
He buscado en stackoverflow.com y en otros lugares, y no puedo encontrar nada que aún no haya probado. Me pregunto si tiene algo que ver con cómo se configuran los esquemas. (En este punto, sé muy poco sobre esquemas).
¿Algunas ideas? ¡Gracias!