如何在Azure SQL数据库中检查特定用户的所有访问权限?

时间:2019-02-01 08:07:41

标签: azure azure-sql-database schema privileges azure-sql-server

我对模式/权限有以下疑问:

  1. 用户可以具有多个数据库角色(架构)吗?
  2. db_denydatareader的用途是什么? (似乎数据库之间可能具有不同的数据库角色,对吧?)
  3. 如果仅希望用户读取特定数据库中的数据,db_datareader和db_denydatawriter有什么区别?
  4. 我试图直接从架构中撤消SELECT(TestUser使用默认架构db_datareader),为什么它仍然可以搜索表?

    REVOKE SELECT ON SCHEMA::db_datareader TO TestUser;
    
  5. 如何仅向用户而非部分表授予对几个表的选择和更新权限? (即没有删除和插入权限)

  6. 这些在sys.objects表中找不到的系统特权是什么?

    select * from sys.database_permissions where major_id <= 0;
    

谢谢。

1 个答案:

答案 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的列表。