用户可以看到的与他们可以做什么

时间:2019-11-06 14:16:08

标签: sql-server ssms

MSSQL允许对数据库具有有限权限的用户在该数据库上使用SSMS进行导航,就好像他们是管理员一样。即如果他们对数据库具有查看权限,则可以查看用户,授予/拒绝的所有选项都是可以选择的,但是当然没有任何内容提交给数据库。

我听到一个用户吹嘘自己的访问级别,这是我设定和限制的,但有片刻的恐慌。尽管他们可以看到实例下的所有数据库,但是任何查看信息的尝试都遇到了拒绝访问的提示。在他们确实有权访问的数据库上,他们能够选择/取消选择针对任何用户的任何权限,并且看不到任何类型的提示,而所有选择都没有。

是否有可能“灰化”他们实际上无法实现的所有选项?

2 个答案:

答案 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