首页 > 解决方案 > 如何检查 Azure SQL 数据库中特定用户的所有访问权限?

问题描述

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

  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;
    

谢谢。

标签: azureazure-sql-databaseschemaprivilegesazure-sql-server

解决方案


您似乎认为架构和角色是相同的,但它们并不相同。角色是安全成员容器,主体可以是角色的成员。模式包含数据库模式绑定对象,它们有助于将数据库对象组合在一起,并由主体拥有。当您创建一个新用户时,您可以选择他的默认架构,将他添加到某些角色,并授予他架构的所有权。

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]

您可以在此处找到数据库角色列表。


推荐阅读