MSSQL允许对数据库具有有限权限的用户在该数据库上使用SSMS进行导航,就好像他们是管理员一样。即如果他们对数据库具有查看权限,则可以查看用户,授予/拒绝的所有选项都是可以选择的,但是当然没有任何内容提交给数据库。
我听到一个用户吹嘘自己的访问级别,这是我设定和限制的,但有片刻的恐慌。尽管他们可以看到实例下的所有数据库,但是任何查看信息的尝试都遇到了拒绝访问的提示。在他们确实有权访问的数据库上,他们能够选择/取消选择针对任何用户的任何权限,并且看不到任何类型的提示,而所有选择都没有。
是否有可能“灰化”他们实际上无法实现的所有选项?
答案 0 :(得分:1)
SSMS是与其他程序一样的客户端程序。它没有任何特殊状态。您的用户有权读取系统表,例如sys.object,sys.server_principals等。这就是SSMS可以在对象资源管理器中构建树视图的原因。
答案 1 :(得分:1)
MSSQL允许对数据库具有有限权限的用户进行导航 在该数据库上使用SSMS,就好像他们是管理员一样。即如果他们 对数据库具有查看权限,他们可以查看用户,所有选项 授予/拒绝是可选的,但是当然没有任何承诺 数据库。
绝对不是。
默认情况下,public
服务器角色被授予VIEW ANY DATABASE
权限,而被授予此权限的唯一权限是访问服务器上的list
数据库,即select * from sys.databases
中的SSMS Object Explorer
或“查看”数据库。仅“看见”意味着仅知道database names
。除login
个服务器角色或数据库sysadmin
的成员以外的任何owner
(数据库中唯一具有login
的{{1}})均不是{{1} }到authorization
完全不能mapped
数据库。
这意味着您无法在此database
中“看不到”任何内容。
他们可以查看用户,授予/拒绝的所有选项都是可选的
根本不是真的,它们只是无法“打开”未映射它们的数据库节点(已access
到数据库)。
此外,即使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