我是一名程序员,而不是一名 dba ……我知道足够危险。
我继承了一个旧用户的数据库,该用户是该数据库的 db_owner。出于业务原因,我们无法调整此用户对现有表、模式等的权限,但正在创建一些新表,我只希望此用户对它们具有 SELECT 访问权限。
已经为这些表为该用户设置了权限,因此除了 SELECT 设置为 GRANT 之外,所有内容都被拒绝。
然而,当此用户 (dbadmin) 尝试对这些表之一 (AccountingAudit) 执行 SELECT 时,会发生此错误:
The SELECT permission was denied on the object 'AccountingAudit', database 'billing', schema 'dbo'.
Run Code Online (Sandbox Code Playgroud)
我已运行此 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
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
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 …Run Code Online (Sandbox Code Playgroud)