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