sql-server - 用户可以看到什么与他们可以做什么
问题描述
MSSQL 允许对数据库具有有限权限的用户在该数据库上使用 SSMS 进行导航,就像他们是管理员一样。即,如果他们对数据库有查看权限,他们可以查看用户,所有授予/拒绝的选项都是可选择的,但当然没有任何内容提交给数据库。
我听到一个用户吹嘘他们的访问级别,这是我设置和限制的,但有片刻的恐慌。虽然他们可以看到实例下的所有数据库,但任何查看信息的尝试都会遇到拒绝访问提示。在他们确实有权访问的数据库上,他们能够选择/取消选择针对任何用户的任何权限,并且看不到任何类型的提示,而没有保留任何选择。
是否有可能将他们实际上无法实施的所有选项“变灰”?
解决方案
MSSQL 允许对数据库具有有限权限的用户在该数据库上使用 SSMS 进行导航,就像他们是管理员一样。即,如果他们对数据库有查看权限,他们可以查看用户,所有授予/拒绝的选项都是可选择的,但当然没有任何内容提交给数据库。
绝对不是真的。
默认情况下,public
服务器角色被授予VIEW ANY DATABASE
权限,当您被授予此权限时,您唯一可以做的事情是访问list
服务器上的数据库,即select * from sys.databases
在SSMS Object Explorer
. 只有“看到”意味着只知道database names
。除了服务器角色或数据库(唯一在数据库上的)成员之外的任何login
其他都不能使用数据库。sysadmin
owner
login
authorization
mapped
database
access
这意味着您无法在 this 中“看到”任何内容database
。
他们可以查看用户,所有授予/拒绝的选项都是可选的
根本不是真的,他们只是不能“打开”没有映射的数据库节点(必须connect
到数据库)。
此外,即使对一个数据库login
有connect
权限而没有其他权限permission
,即使它可以“打开”数据库节点,它在“用户”中看到的也只有自己的用户。
因此,检查两次permissions
“对数据库具有有限权限的用户”,您肯定只是没有看到它的所有permissions
.
您可以permissions
通过以下方式模拟相应的内容进行检查login
:
use your_db;
execute as login = 'limited_login';
select *
from sys.fn_my_permissions(null, 'server');
--CONNECT SQL
--VIEW ANY DATABASE
select *
from sys.fn_my_permissions(null, 'database');
revert;
第一组权限是server level permissions
,如果有任何permission
其他权限CONNECT SQL
,VIEW ANY DATABASE
您的权限并login
没有您想象的那么“有限”。
第二组列出database level permissions
,如果你看到这样的东西view definition
是它“看到用户”的关键。
是否有可能将他们实际上无法实施的所有选项“变灰”?
只是撤销view definition
那些users
推荐阅读
- android - java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'void (***)
- html - 背景图片不出现
- amazon-web-services - 如何为我的 web 应用程序分阶段推出?
- android - recyclerview 项目中的几张照片
- haskell - 可以在模式匹配中交换构造函数的通用和存在量词吗?
- azure - Azure B2c 安全组通过使用 Rest Post 调用的自定义策略进行授权
- java - 无法从数据源获取连接(Hibernate + Hikari + MySQL)
- javascript - Javascript - 异步等待不等到功能完成?
- python - 我可以在 PyMySQL 中使用分配的变量创建数据库吗?
- javascript - Windows:如何在 NPM 中运行时间?