【问题标题】:How to check all access rights for specific user in Azure SQL Database?如何检查 Azure SQL 数据库中特定用户的所有访问权限?
【发布时间】:2020-09-19 15:47:06
【问题描述】:
我有以下关于架构/特权的问题:
- 用户可以有多个数据库角色(架构)吗?
- db_denydatareader 有什么用途? (似乎数据库之间可以有不同的数据库角色,对吧?)
- 如果只想让用户读取特定数据库中的数据,db_datareader 和 db_denydatawriter 有什么区别?
-
我试图从 schema 中撤销 SELECT(TestUser 使用默认 schema db_datareader),为什么它仍然可以搜索表?
REVOKE SELECT ON SCHEMA::db_datareader TO TestUser;
如何仅将少数表的选择和更新权限授予用户而不授予所有表? (即没有删除和插入权限)
-
我在 sys.objects 表中找不到这些系统权限是指什么?
select * from sys.database_permissions where major_id <= 0;
谢谢。
【问题讨论】:
标签:
azure
azure-sql-database
schema
privileges
azure-sql-server
【解决方案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。