首页 > 解决方案 > 用户可以看到什么与他们可以做什么

问题描述

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

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

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

标签: sql-serverssms

解决方案


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

绝对不是真的。

默认情况下,public服务器角色被授予VIEW ANY DATABASE权限,当您被授予此权限时,您唯一可以做的事情是访问list服务器上的数据库,即select * from sys.databasesSSMS Object Explorer. 只有“看到”意味着只知道database names。除了服务器角色或数据库(唯一在数据库上的)成员之外的任何login其他都不能使用数据库。sysadminownerloginauthorizationmappeddatabaseaccess

这意味着您无法在 this 中“看到”任何内容database

他们可以查看用户,所有授予/拒绝的选项都是可选的

根本不是真的,他们只是不能“打开”没有映射的数据库节点(必须connect到数据库)。

此外,即使对一个数据库loginconnect权限而没有其他权限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 SQLVIEW ANY DATABASE您的权限并login没有您想象的那么“有限”。

第二组列出database level permissions,如果你看到这样的东西view definition是它“看到用户”的关键。

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

只是撤销view definition那些users


推荐阅读