我是程序员,而不是dba。。。我知道足够危险了。
我继承了一个旧用户,该旧用户是该数据库的db_owner。出于业务原因,我们无法调整该用户对现有表,模式等的权限,但是正在创建一些新表,我只希望该用户对其具有SELECT访问权限。
已为这些用户设置了这些表的权限,以便除SELECT(设置为GRANT)以外的所有内容都被拒绝。
但是,当此用户(dbadmin)尝试对这些表之一(AccountingAudit)执行SELECT时,会发生此错误:
The SELECT permission was denied on the object 'AccountingAudit', database 'billing', schema 'dbo'.
我已经运行此SQL来尝试查看为此表/用户设置了哪些权限:
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
这就是我得到的:
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
似乎应该正常工作?
我正在进行的SELECT调用是SSMS内部非常基本的SELECT * FROM AccountingAudit。我没有做任何特殊的sp_executesql或类似的事情。
我尝试过明确授予权限:
GRANT SELECT ON [dbo].AccountingAudit TO dbadmin
这没有任何效果(为什么,上面的查询已经显示它已被授予!;-)
我已经搜索了stackoverflow.com和其他地方,但是找不到我还没有尝试过的东西。我想知道它是否与架构的设置有关。(目前,我对模式知之甚少。)
有任何想法吗?谢谢!