Поделиться через


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

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

Пакеты, содержащие инструкции 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 проверяется для базы данных AdventureWorks для обеих инструкций SELECT. Разрешение SHOWPLAN не проверяется для баз данных master и tempdb, если на них ссылается инструкция USE:

SET SHOWPLAN_XML ON
GO
USE tempdb
SELECT * FROM AdventureWorks.Person.Address
USE master
SELECT * FROM AdventureWorks.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 проверяется в базе данных AdventureWorks. Для самой инструкции EXEC, баз данных tempdb и master разрешение SHOWPLAN не проверяется:

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

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

SET STATISTICS XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks.Person.Address');
ms178086.note(ru-ru,SQL.90).gifПримечание.
Разрешение 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 формируются для каждой инструкции пакета, если она выполняется успешно и проверка разрешения заканчивается без ошибок.

См. также

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

Безопасность инструкции Showplan

Справка и поддержка

Получение помощи по SQL Server 2005