SQL Server中db_owner角色成员权限能否被拒绝?实操疑问
为什么加入db_owner角色的用户仍被DENY权限限制?
这其实是SQL Server权限系统的优先级规则在起作用,我来给你拆解清楚:
权限优先级:DENY > GRANT
SQL Server的权限评估逻辑里,DENY权限的优先级是最高的——哪怕某个角色(比如db_owner)给用户赋予了GRANT级别的权限,只要存在针对该用户的显式DENY权限,就会直接覆盖掉GRANT的效果。db_owner角色的权限本质
db_owner角色确实会让成员拥有数据库内几乎所有对象的完整权限(包括SELECT),但这种权限是通过角色继承的GRANT实现的。而你执行的DENY SELECT ON dbo.TestTable TO NewAccount是直接针对用户的显式拒绝,优先级远高于角色赋予的权限。验证权限冲突的小方法
如果你想直观确认这一点,可以执行以下查询查看用户的有效权限:USE YourDatabaseName; EXEC sp_helprotect @username = 'NewAccount', @objname = 'dbo.TestTable';结果里会同时显示来自db_owner的GRANT权限,以及你手动添加的DENY权限,而最终生效的是优先级更高的DENY。
简单来说:角色赋予的是“允许做某事”的权限,但显式的DENY是“强制禁止做某事”,SQL Server会优先执行禁止指令,这就导致了你看到的现象。
内容的提问来源于stack exchange,提问作者user7364359
相关产品推荐
相关产品推荐

