我对架构/权限存在以下问题:
我试图直接从架构中撤消SELECT(TestUser使用的是默认架构db_datareader),为什么它仍然可以搜索表?
REVOKE SELECT ON SCHEMA::db_datareader TO TestUser;
如何仅向用户而非所有表授予对几个表的选择和更新权限?(即没有删除和插入权限)
我在sys.objects表中找不到这些系统特权,它们指的是什么?
select * from sys.database_permissions where major_id <= 0;
谢谢。
似乎您认为架构和角色相同,但是不相同。角色是安全性成员资格容器,主体可以是角色的成员。模式包含数据库模式绑定的对象,它们有助于将数据库对象组合在一起,并且由主体拥有。创建新用户时,您可以选择其默认架构,将其添加到某些角色,并授予其架构所有权。
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]
您可以在此处找到数据库角色列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句