Разрешение SHOWPLAN и пакеты Transact-SQL

Пакет Transact-SQL состоит из одной или нескольких инструкций. Этот раздел содержит сведения о том, как SQL Server проверяет разрешение SHOWPLAN для различных параметров инструкции Showplan SET, когда они применяются в пакетах Transact-SQL.

Примечание по безопасностиПримечание по безопасности

Пользователи, которые имеют разрешение SHOWPLAN, ALTER TRACE или VIEW SERVER STATE, могут просматривать запросы, захваченные выходом Showplan. Эти запросы могут содержать конфиденциальные сведения, такие как пароли. В связи с этим рекомендуется предоставлять данные разрешения только пользователям, которые имеют право просмотра конфиденциальных данных, например членам предопределенной роли базы данных db_owner или членам предопределенной роли сервера sysadmin. Также рекомендуется сохранять файлы Showplan или файлы трассировки, содержащие события, связанные с инструкцией Showplan, только в каталог, расположенный в файловой системе NTFS, для которого есть возможность ограничить доступ, предоставляя его только пользователям, имеющим право просмотра конфиденциальных данных.

Пакеты, содержащие инструкции USE или SET

Разрешение SHOWPLAN не проверяется у инструкций USE и SET для любых параметров Showplan SET (SHOWPLAN_TEXT, SHOWPLAN_ALL, SHOWPLAN_XML, STATISTICS PROFILE или STATISTICS XML). С параметрами SHOWPLAN_TEXT, SHOWPLAN_ALL и SHOWPLAN_XML, которые формируют предполагаемый план выполнения, инструкции Transact-SQL в пакете не выполняются, кроме инструкций USE database_name, которые выполняются с этими параметрами Showplan SET.

Примеры проверки разрешения SHOWPLAN

Инструкция USE database_name позволяет указать контекстную базу данных. Базы данных, содержащие таблицы и представления, на которые ссылаются инструкции Transact-SQL, проверяются на разрешение SHOWPLAN. Тем не менее, разрешение SHOWPLAN не проверяется в контекстной базе данных, если инструкция Transact-SQL ссылается на объекты внутри нее.

Если пакет содержит инструкцию USE database_name, контекстная база данных изменяется. В этом случае разрешение SHOWPLAN не проверяется для контекстной базы данных, которая активна, когда к ней обращается инструкция пакета.

Например, в следующем пакете разрешение SHOWPLAN проверяется для базы данных AdventureWorks2008R2 для обеих инструкций SELECT. Разрешение SHOWPLAN не проверяется для баз данных master и tempdb, на которые ссылаются инструкции USE:

SET SHOWPLAN_XML ON
GO
USE tempdb
SELECT * FROM AdventureWorks2008R2.Person.Address
USE master
SELECT * FROM AdventureWorks2008R2.Person.Address
GO

Проверка разрешения SHOWPLAN для динамических инструкций SQL

  • Для динамических инструкций SQL в форме EXEC (command_string) или EXEC (character_string) проверка разрешения SHOWPLAN не выполняется (включая внедренные строки).

  • Для динамических инструкций SQL, вызывающих хранимые процедуры в форме EXEC dbo.my_stored_procedure, проверка разрешения SHOWPLAN не выполняется для самой инструкции EXEC. Тем не менее, поскольку инструкция Showplan применяется ко всему телу хранимой процедуры, базы данных, содержащие объекты, на которые ссылаются инструкции в хранимых процедурах, проверяются на разрешение SHOWPLAN.

Следующий пример демонстрирует, как разрешения SHOWPLAN проверяются для динамических инструкций SQL. Для инструкции SELECT разрешение SHOWPLAN проверяется для базы данных AdventureWorks2008R2. Для самой инструкции EXEC для баз данных tempdb и master разрешение SHOWPLAN не проверяется:

SET SHOWPLAN_XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks2008R2.Person.Address');

В следующем примере, где используется инструкция SET STATISTICS XML, разрешение SHOWPLAN инструкции SET не проверяется, если пакет отправляется базе данных master. Разрешение SHOWPLAN не проверяется для инструкции USE tempdb. Тем не менее, поскольку для инструкции USE проверяется разрешение CONNECT, пользователь должен существовать в базе данных tempdb и иметь разрешение CONNECT для базы данных tempdb. Разрешение SHOWPLAN не проверяется для инструкции EXEC, поскольку она не формирует выходные данные Showplan. Разрешение SHOWPLAN не проверяется для инструкции USE master. Тем не менее разрешение SHOWPLAN проверяется в базе данных AdventureWorks2008R2 для инструкции SELECT:

SET STATISTICS XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks2008R2.Person.Address');
ПримечаниеПримечание

Разрешение SHOWPLAN не проверяется для запросов, которые обращаются к предыдущим версиям сервера SQL Server. Тем не менее, для отдельных частей таких запросов, которые выполняются на сервере SQL Server 2005 и более поздних версий, разрешение SHOWPLAN проверяется.

Пакеты, содержащие ошибки

Если один из параметров инструкции Showplan SET используется в пакете Transact-SQL, который возвращает ошибку при выполнении инструкции или проверке разрешений, контекстная база данных определяется следующим образом в зависимости от заданного значения параметра SET:

  • SHOWPLAN_TEXT, SHOWPLAN_ALL и SHOWPLAN_XML

    Контекстная база данных, которая была действующей до запуска пакета, остается действующей. Выходные данные Showplan не формируются для всего пакета, если обнаружена ошибка при выполнении инструкции или проверке разрешений. Все проверки разрешений и инструкции должны выполняться успешно, в противном случае выходные данные Showplan не будут сформированы.

  • STATISTICS PROFILE и STATISTICS XML

    Контекстная база данных, которая была действующей при выполнении последней успешной инструкции, остается действующей. Выходные данные Showplan формируются для каждой инструкции пакета, если она была выполнена успешно и проверка разрешения закончилась без ошибок. Выходные данные Showplan формируются для каждой инструкции пакета, если она выполняется успешно и проверка разрешения заканчивается без ошибок.

См. также

Основные понятия