azure - 如何检查 Azure SQL 数据库中特定用户的所有访问权限?
问题描述
我有以下关于架构/特权的问题:
- 用户可以有多个数据库角色(模式)吗?
- db_denydatareader 是做什么用的?(似乎数据库之间可以有不同的数据库角色,对吧?)
- 如果只想让用户读取特定数据库中的数据,db_datareader 和 db_denydatawriter 有什么区别?
我试图从模式中撤销 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]
您可以在此处找到数据库角色列表。
推荐阅读
- numbers - symfony 中的 Twig 格式化数字
- three.js - 退出 VR 模式时,移动设备上的 Aframe 分辨率下降
- rest - 如何为嵌套资源制作单独的 REST 控制器?弹簧靴
- c# - EntityFramework Core Update-Database 抛出异常“在程序集中找不到 DbContext”
- javascript - 新的输入类不能使用焦点和模糊事件
- javascript - Javascript - 获取“string1”之后和“string2”之前的子字符串
- yaml - Jekyll - 在滑块中显示图像和文本
- java - Public Getter 在其他类中不可访问 - Java
- amazon-web-services - AWS CodeCommit 向 Hipchat 提交消息
- java - 无法从活动中调用 RecyclerView 适配器的方法