我对模式/权限有以下疑问:
我试图直接从架构中撤消SELECT(TestUser使用默认架构db_datareader),为什么它仍然可以搜索表?
REVOKE SELECT ON SCHEMA::db_datareader TO TestUser;
如何仅向用户而非部分表授予对几个表的选择和更新权限? (即没有删除和插入权限)
这些在sys.objects表中找不到的系统特权是什么?
select * from sys.database_permissions where major_id <= 0;
谢谢。
答案 0 :(得分:1)
似乎您认为架构和角色相同,但是不相同。角色是安全性成员资格容器,主体可以是角色的成员。架构包含数据库架构绑定的对象,它们有助于将数据库对象分组在一起,并且由主体拥有。创建新用户时,可以选择其默认架构,将其添加到某些角色,并授予其架构所有权。
db_denydatareader固定数据库角色的成员无法读取数据库中用户表中的任何数据。
关于db_datareader和db_denydatawriter之间的区别。 db_datareader授予对所有表的选择权限,并且不影响任何插入,更新,删除权限。同时db_denydatawriter拒绝所有表的插入,更新和删除权限,它拒绝对任何表进行任何更改的权限。即使直接授予某人插入权限,他们也仍然无法插入,因为拒绝否决授予。将用户分配给db_denydatawriter角色意味着,无论他们具有什么其他权限,他们都将永远无法对数据库进行任何更改。拒绝优先于授予。
关于问题4,您可以将模式上的表分组,然后将模式上的DENY SELECT权限授予主体或用户。 db_datareader是固定的数据库角色,它不是架构。
DENY SELECT ON schema::[SchemaName] TO [user_name]
类似地,您可以对包含一组表的数据库模式授予SELECT和UPDATE权限。
GRANT SELECT, UPDATE on SCHEMA::SchemaName TO [user_name]
您可以找到数据库角色here的列表。