显示计划安全性

可以通过多种方式生成显示计划执行计划信息。可以使用 Transact-SQL SET 语句选项和 SQL Server Profiler事件类,也可以查询动态管理函数 sys.dm_exec_query_plan。每种方法都需要一组不同的权限,下列各节说明了这些权限。有关如何检查 Transact-SQL 批处理的 SHOWPLAN 权限的详细信息,请参阅 SHOWPLAN 权限和 Transact-SQL 批处理

ms189602.note(zh-cn,SQL.90).gif注意:
如果通过使用 sp_dbcmptlevel 存储过程将 SQL Server 2005 数据库兼容级别设置为 80,则当前 SHOWPLAN 权限仍可应用。将兼容级别设置为 80 不会生成 Microsoft SQL Server 2000 的显示计划权限行为。

关于 SHOWPLAN 权限

SHOWPLAN 权限是 SQL Server 2005 的新增权限。若要使用显示计划的 Transact-SQL SET 选项生成执行计划输出,用户必须拥有下列权限:

  • 对包含 Transact-SQL 语句中所引用对象(如视图、存储过程或用户定义函数)的数据库具备 SHOWPLAN 权限。
  • 执行 Transact-SQL 语句本身所需的相应权限。
ms189602.security(zh-cn,SQL.90).gif安全说明:
只向可信用户授予 SHOWPLAN 权限,因为可以从显示计划输出推断 SQL Server 对象的相关信息。 以下面的查询为例: SELECT COUNT(*) FROM table_1 WHERE column_1 < 10 如果某个恶意用户像此示例一样为一组查询生成显示计划输出,并且每次使用不同的常量替换谓词中的值“10”,则该用户就可以通过读取估计行计数推断 table_1 中的 column_1 列值的大概的数据分布情况。

SHOWPLAN 权限是数据库级权限,该权限:

  • 仅由下列用户授予、拒绝或撤消:
    • sysadmin 固定服务器角色的成员。默认情况下,此固定服务器角色的所有成员都对服务器上所有数据库具备 SHOWPLAN 权限。
    • 创建并因而拥有数据库的 dbcreator 固定服务器角色的成员。默认情况下,此固定服务器角色的所有成员都对他们自己创建并因而拥有的数据库具备 SHOWPLAN 权限。
    • 拥有其数据库的 db_owners 固定角色服务器的成员。默认情况下,此固定服务器角色的所有成员都对他们所拥有的数据库具备 SHOWPLAN 权限。
  • 支持所有权链接。如果断开了所有权链,将在发生中断的节点处再次检查权限。但是,由于 SHOWPLAN 权限是数据库级权限,因此只有当查询引用两个或多个数据库中的对象时才会执行此检查。有关所有权链接的详细信息,请参阅所有权链

有关用于授予、拒绝或撤消 SHOWPLAN 权限的语法的详细信息,请参阅授予、拒绝和撤消 SHOWPLAN 权限的语法

示例

如果用户 1 拥有 CREATE TABLE、INSERT 和 SELECT 权限,并且他在数据库 D 中创建了表 T(他是表的所有者),并向该表中插入了行,然后基于该表编写了 SELECT 查询,则该查询会成功执行。但是,除非用户 1 被授予数据库 D 的 SHOWPLAN 权限,否则他不能生成显示计划。

警告

在上一示例中,假设数据库 D 包含视图 V,用户 1 具有该视图的 SELECT 权限。授予 User1 对 D 的 SHOWPLAN 权限后,尽管该用户没有视图 V 的所有权,但仍可以基于 V 的查询生成显示计划。此显示计划使他能够看到 V 的视图定义,包括 V 所基于的表和视图。但是,如果视图 V 包含对象(如表,用户 1 具有该表的所有权且该表存在于一个不同的数据库 D2 中,而用户 1 却不是数据库 D2 的所有者),则必须检查 D2 的 SHOWPLAN 权限。

使用显示计划的 SET 选项所需要的权限

下表列出了使用各种显示计划的 SET 语句选项所需要的权限:

显示计划的 SET 选项 所需权限

SET SHOWPLAN_XML ON

SET SHOWPLAN_ALL ON

SET SHOWPLAN_TEXT ON

对于 SELECT、INSERT、UPDATE、DELETE、EXEC stored_prodedure 以及 EXEC user_defined_function 语句,必须拥有下列权限才能生成显示计划:

  • 执行 Transact-SQL 语句的适当权限。
  • 对所有数据库(包含 Transact-SQL 语句所引用的对象,如表、视图等)具备 SHOWPLAN 权限。

对于所有其他语句(如 DDL、USE database_name、SET、DECLARE、动态 Transact-SQL 等),只需具备执行 Transact-SQL 语句的相应权限。有关详细信息,请参阅 SHOWPLAN 权限和 Transact-SQL 批处理

SET STATISTICS XML ON

SET STATISTICS PROFILE ON

  • 执行 Transact-SQL 语句的适当权限。
  • 对所有数据库(包含 Transact-SQL 语句中所引用的对象)具备 SHOWPLAN 权限。

对于不生成 STATISTICS PROFILE 或 STATISTICS XML 结果集的 Transact-SQL 语句,只需要执行 Transact-SQL 语句所需要的相应权限。对于生成 STATISTICS PROFILE 或 STATISTICS XML 结果集的 Transact-SQL 语句,必须成功检查 Transact-SQL 语句执行权限和 SHOWPLAN 权限,否则将中止执行 Transact-SQL 语句,并且不会生成任何 SHOWPLAN 信息。有关生成显示计划信息的 Transact-SQL 语句的信息,请参阅用于生成显示计划的 Transact-SQL 语句

SET STATISTICS TIME

SET STATISTICS IO

  • 执行 Transact-SQL 语句的适当权限。

这些 SET 语句选项都不检查 SHOWPLAN 权限,也不需要 SHOWPLAN 权限。

何时检查 SHOWPLAN 权限?

当 Transact-SQL 语句或批处理执行时将检查 SHOWPLAN 权限,并生成显示计划信息。但是,当某个显示计划的 SET 选项设置为 ON 时,就不会进行检查。

ms189602.note(zh-cn,SQL.90).gif注意:
通过使用 USE <database_name> 语句可设置 Transact-SQL 批处理的上下文数据库。不对 USE <database_name> 语句检查 SHOWPLAN 权限,也不对上下文数据库检查该权限。

有关显示计划的 SET 语句选项的详细信息,请参阅下列主题:

使用 SQL Server Management Studio 显示图形执行计划所需要的权限

下表列出了在 SQL Server Management Studio 中显示图形执行计划所需要的权限:

Management Studio 执行计划选项 所需权限

显示估计的执行计划

需要与使用 SHOWPLAN_XML SET 语句选项所需权限一样的权限

包含实际的执行计划

需要与使用 STATISTICS XML SET 语句选项所需权限一样的权限

有关详细信息,请参阅显示图形执行计划 (SQL Server Management Studio)

使用 SQL Server Profiler 事件类显示执行计划所需要的权限

若要使用 SQL Server Profiler事件类显示执行计划,用户必须为 sysadmin 固定服务器角色的成员,或被授予 ALTER TRACE 权限。不检查 SHOWPLAN 权限,也不需要该权限。

有关详细信息,请参阅使用 SQL Server Profiler 事件类显示执行计划

使用 sys.dm_exec_query_plan 动态管理函数显示执行计划所需要的权限

若要使用 sys.dm_exec_query_plan 动态管理函数显示执行计划,必须仅授予用户 VIEW SERVER STATE 权限。

有关详细信息,请参阅 sys.dm_exec_query_plan

请参阅

其他资源

查询性能

帮助和信息

获取 SQL Server 2005 帮助