SQL Server目录视图教程:安全目录视图

日期: 2011-02-09 作者:Robert Sheldon翻译:冯昀晖 来源:TechTarget中国 英文

接上文:SQL Server目录视图教程:数据库和文件目录视图、SQL Server目录视图教程:对象目录视图   另一个重要的目录视图子分类就是安全视图,这类视图允许你查看关于数据库安全,服务器安全,加密以及审计等方面的信息。例如,你可以利用“sys.database_principals”视图来提取关于数据库中每个安全原则相关的信息。在下面的“SELECT”语句中,我使用这个视图来提取“AdventureWorks 2008 ”数据库中每项安全规则的类型和名称:   USE AdventureWorks2008;   GO   SELECT   type_desc AS……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

接上文:SQL Server目录视图教程:数据库和文件目录视图SQL Server目录视图教程:对象目录视图

  另一个重要的目录视图子分类就是安全视图,这类视图允许你查看关于数据库安全,服务器安全,加密以及审计等方面的信息。例如,你可以利用“sys.database_principals”视图来提取关于数据库中每个安全原则相关的信息。在下面的“SELECT”语句中,我使用这个视图来提取“AdventureWorks 2008 ”数据库中每项安全规则的类型和名称:

  USE AdventureWorks2008;
  GO
  SELECT
  type_desc AS PrincipalType,
  name AS PrincipalName
  FROM
  sys.database_principals
  ORDER BY
  type_desc, name;

  如你所见,该语句非常简单。我只想提取类型和名称并按相应的结果排序,返回结果如下表所示:

PrincipalType

PrincipalName

DATABASE_ROLE

db_accessadmin

DATABASE_ROLE

db_backupoperator

DATABASE_ROLE

db_datareader

DATABASE_ROLE

db_datawriter

DATABASE_ROLE

db_ddladmin

DATABASE_ROLE

db_denydatareader

DATABASE_ROLE

db_denydatawriter

DATABASE_ROLE

db_owner

DATABASE_ROLE

db_securityadmin

DATABASE_ROLE

public

SQL_USER

guest

SQL_USER

INFORMATION_SCHEMA

SQL_USER

sys

WINDOWS_USER

dbo

  另一个与具体数据库有关的安全视图是“sys.database_permissions”视图。不说你也知道,该视图返回关于数据库权限的信息。例如,在下面的“SELECT”语句中,我利用“sys.database_permissions”视图来提取在“AdventureWorks 2008”数据库中赋予“SELECT”权限的数量统计:

  USEAdventureWorks2008;
  GO
  SELECT
  class_desc AS ClassName,
  permission_name AS PermissionName,
  state_desc AS StateName,
  COUNT(*) AS NumberOfSelect
  FROM
  sys.database_permissions
  WHERE
  type = 'SL' AND
  state = 'G'
  GROUP BY
  class_desc,
  permission_name,
  state_desc;

  在该语句中,我按照“class,permission和state”对结果进行分组,这样就可以得到合计值。我利用“WHERE”从句来限制只查询权限类型“SELECT(SL)”和状态为“GRANT(G)”的数据。如下面结果所示,129个“SELECT”权限已经被授予到了“AdventureWorks 2008”数据库中:

ClassName

PermissionName

StateName

NumberOfSelect

OBJECT_OR_COLUMN

SELECT

GRANT

129

  你还可以利用安全视图来提取服务器级别的信息。例如,在下面的例子中我利用“sys.server_principals ”视图来提SQL Server本地实例中的安全原则类型和名称:

  SELECT
  type_desc AS PrincipalType,
  name AS PrincipalName
  FROM
  sys.server_principals
  WHERE
  type <> 'C'
  ORDER BY
  type_desc, name;

  请注意,在这个语句中,我使用了“WHERE”从句把类型为“C”的数据从结果中排除掉了。类型C表示认证映射登录,我不想把这类数据包含进来。下面的结果展示了“sys.server_principals”视图返回的信息:

PrincipalType

PrincipalName

SERVER_ROLE

bulkadmin

SERVER_ROLE

dbcreator

SERVER_ROLE

diskadmin

SERVER_ROLE

processadmin

SERVER_ROLE

public

SERVER_ROLE

securityadmin

SERVER_ROLE

serveradmin

SERVER_ROLE

setupadmin

SERVER_ROLE

sysadmin

SQL_LOGIN

##MS_PolicyEventProcessingLogin##

SQL_LOGIN

##MS_PolicyTsqlExecutionLogin##

SQL_LOGIN

sa

WINDOWS_LOGIN

BOBE024Administrator

WINDOWS_LOGIN

NT AUTHORITYLOCAL SERVICE

WINDOWS_LOGIN

NT AUTHORITYSYSTEM

  你还可以通过“sys.server_permissions”视图查看服务器权限明细,请看下面的示例:

  SELECT
  class_desc AS ClassName,
  permission_name AS PermissionName,
  state_desc AS StateName,
  COUNT(*) AS NumberOfGrant
  FROM
  sys.server_permissions
  WHERE
  type = 'CO' AND
  state = 'G'
  GROUP BY
  class_desc,
  permission_name,
  state_desc;

  在该语句中,我提取了已经赋予我本地SQL Server实例的“CONNECT”权限数量。正如你在前面的例子中看到的,我将按“class,permission类型和state”分组,这样就可以得出结果,请看下面的结果:

ClassName

PermissionName

StateName

NumberOfGrant

ENDPOINT

CONNECT

GRANT

4

  除了我在这里展示的安全视图,SQL Server还支持大量其它视图。你可以在SQL Server联机丛书“系统视图(Transact-SQL)”中看到那些视图的清单。

相关推荐