VIEW ANY DATABASE 权限
VIEW ANY DATABASE 权限是新的、服务器级别权限。获得此权限的登录帐户可以查看描述所有数据库的元数据,不管该登录帐户是否拥有特定的数据库或实际上是否可以使用该数据库。
VIEW ANY DATABASE 权限控制是否显示 sys.databases 和 sys.sysdatabases 视图以及 sp_helpdb 系统存储过程中的元数据。
默认情况下,将 VIEW ANY DATABASE 权限授予 public 角色。因此,默认情况下,每个连接到 SQL Server 实例的用户都可查看该实例中的所有数据库。若要验证此行为,请运行以下查询:
SELECT l.name as grantee_name, p.state_desc, p.permission_name
FROM sys.server_permissions AS p JOIN sys.server_principals AS l
ON p.grantee_principal_id = l.principal_id
WHERE permission_name = 'VIEW ANY DATABASE' ;
GO
若要将 VIEW ANY DATABASE 权限授予特定登录帐户,请运行以下查询:
GRANT VIEW ANY DATABASE TO <login>;
描述 master 和 tempdb 数据库的元数据对 public 始终是可见的。
sysadmin 固定服务器角色的成员始终可以查看所有数据库元数据。
数据库所有者始终可以查看所拥有的数据库的 sys.databases 中的行。
为某个登录帐户授予 CREATE DATABASE 和 ALTER ANY DATABASE 权限将允许该帐户访问数据库元数据。
注意 |
---|
CREATE DATABASE 权限对于 dbcreator 固定服务器角色是隐式的。 |
注意 |
---|
如果为某个登录帐户授予 CREATE DATABASE 和 ALTER ANY DATABASE 权限并且未拒绝其 VIEW ANY DATABASE 权限,则该登录帐户可以查看 sys.databases 中的所有行。 |
若要限制数据库元数据的可见性,请拒绝登录帐户的 VIEW ANY DATABASE 权限。拒绝此权限之后,登录帐户只能查看 master、tempdb 以及所拥有的数据库的元数据。有关详细信息,请参阅 DENY 服务器权限 (Transact-SQL)。