【问题标题】:How to check all access rights for specific user in Azure SQL Database?如何检查 Azure SQL 数据库中特定用户的所有访问权限?
【发布时间】:2020-09-19 15:47:06
【问题描述】:

我有以下关于架构/特权的问题:

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

    REVOKE SELECT ON SCHEMA::db_datareader TO TestUser;
    
  5. 如何仅将少数表的选择和更新权限授予用户而不授予所有表? (即没有删除和插入权限)

  6. 我在 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

    【讨论】:

      猜你喜欢
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多