我是一名程序员,而不是一名 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)