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

Сведения, предоставляемые инструкцией Showplan о плане выполнения, можно получить различными способами. Можно использовать параметры инструкции SET языка Transact-SQL, классы событий приложения Приложение SQL Server Profiler или произвести запрос к функции динамического управления sys.dm_exec_query_plan. Каждый способ требует разного набора разрешений, которые описываются в следующих разделах. Дополнительные сведения о проверке разрешения SHOWPLAN для пакетов на языке Transact-SQL см. в разделе Разрешение SHOWPLAN и пакеты Transact-SQL.

ПримечаниеПримечание

Если уровень совместимости базы данных SQL Server с помощью хранимой процедуры sp_dbcmptlevel установлен на 80, применяется текущее разрешение SHOWPLAN. В Microsoft SQL Server 2000 установка уровня совместимости в 80 не порождает разрешения SHOWPLAN.

О разрешении SHOWPLAN

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

  • разрешение SHOWPLAN на базы данных, содержащие объекты, на которые ссылается инструкция языка Transact-SQL, такие как представления, хранимые процедуры или определяемые пользователем функции;

  • соответствующее разрешение для выполнения самой инструкции языка Transact-SQL.

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

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

    Например, рассмотрим следующий запрос:

    SELECT COUNT(*)

    FROM table_1

    WHERE column_1 < 10

    Если злонамеренный пользователь будет многократно выполнять инструкцию Showplan для набора запросов, подобных запросу из этого примера, заменяя значение «10» в предикате каждый раз новой константой, он сможет сделать вывод о приблизительном распределении данных по значениям столбца column_1 в таблице table_1, считывая предполагаемое количество строк.

Разрешение SHOWPLAN является разрешением уровня базы данных, которое:

  • Может быть предоставлено, запрещено или отменено только следующими пользователями:

    • членами предопределенной роли сервера sysadmin. По умолчанию, все члены этой предопределенной роли сервера имеют разрешение SHOWPLAN на все базы данных данного сервера;

    • членами предопределенной роли сервера dbcreator на базы данных, которые они создали и, следовательно, являются их владельцами. По умолчанию, все члены этой предопределенной роли сервера имеют разрешение SHOWPLAN на базы данных, которые они создают и которыми, соответственно, владеют;

    • членами предопределенной роли базы данных db_owners на базы данных, которыми они владеют. По умолчанию, все члены этой предопределенной роли базы данных имеют разрешение SHOWPLAN на базы данных, которыми они владеют.

  • Поддерживает цепочки владения. При разрыве цепочки владения происходит повторная проверка разрешения в узле разрыва. Однако, поскольку разрешение SHOWPLAN является разрешением уровня базы данных, данная проверка осуществляется, только когда запросы ссылаются на объекты в двух и более базах данных. Дополнительные сведения о цепочках владения см. в разделе Цепочки владения.

Дополнительные сведения о синтаксисе, используемом для предоставления, запрещения или отмены разрешения SHOWPLAN, см. в разделе Синтаксис для предоставления, запрета или отмены разрешения SHOWPLAN.

Пример

Если у пользователя User1 имеются разрешения CREATE TABLE, INSERT и SELECT и он создает таблицу T (он является владельцем таблицы) в базе данных D, вставляет строки в таблицу и затем пишет запрос SELECT для таблицы, запрос будет выполнен успешно. Однако пользователь User1 не может создать инструкцию Showplan, пока ему не будет предоставлено разрешение SHOWPLAN на базу данных D.

Пояснение

В предыдущем примере допустим, что база данных D содержит представление V, на которое у пользователя User1 имеется разрешение SELECT. После того как пользователь User1 получит разрешение SHOWPLAN на базу данных D, несмотря на то, что он не является владельцем представления V, он все же может получить план визуализации в ответ на запрос к представлению V. Эта инструкция Showplan позволит ему увидеть определение представления V, включая таблицы и представления, на которых основано представление V. Однако если представление V содержит объект, такой как таблица, который принадлежит пользователю User1 и который существует в другой базе данных, D2, в то время как пользователь User1 не является владельцем базы данных D2, разрешение SHOWPLAN на D2 необходимо и будет проверено.

Разрешения, необходимые для использования параметров SET инструкции Showplan

Разрешения, необходимые для использования различных параметров SET инструкции Showplan:

Параметры SET инструкции Showplan

Необходимые разрешения

SET SHOWPLAN_XML ON

SET SHOWPLAN_ALL ON

SET SHOWPLAN_TEXT ON

Для инструкций SELECT, INSERT, UPDATE, DELETE, EXEC stored_prodedure и EXEC user_defined_function необходимы следующие разрешения для получения инструкции Showplan.

  • Соответствующие разрешения на выполнение инструкций языка Transact-SQL.

  • Разрешение SHOWPLAN на все базы данных, содержащие объекты (такие как таблицы, представления и т. д.), на которые ссылаются инструкции языка Transact-SQL.

Для всех остальных инструкций (инструкций DDL, USE database_name, SET, DECLARE, динамических инструкций языка Transact-SQL и т. д.) необходимы только соответствующие разрешения на выполнение инструкции Transact-SQL. Дополнительные сведения см. в разделе Разрешение SHOWPLAN и пакеты Transact-SQL.

SET STATISTICS XML ON

SET STATISTICS PROFILE ON

  • Соответствующие разрешения на выполнение инструкций языка Transact-SQL.

  • Разрешение SHOWPLAN на все базы данных, содержащие объекты, на которые ссылаются инструкции языка Transact-SQL.

Для инструкций языка Transact-SQL, не производящих результирующие наборы STATISTICS PROFILE или STATISTICS XML, требуются только соответствующие разрешения для выполнения инструкций языка Transact-SQL. Для выполнения инструкций языка Transact-SQL, производящих результирующие наборы STATISTICS PROFILE или STATISTICS XML, проверьте наличие обоих разрешений: и разрешения на выполнение инструкции языка Transact-SQL, и разрешения SHOWPLAN. Иначе выполнение инструкции языка Transact-SQL будет прервано, а данные инструкции Showplan сформированы не будут. Дополнительные сведения об инструкциях языка Transact-SQL, формирующих данные инструкции Showplan, см. в разделе Инструкции Transact-SQL, создающие инструкции Showplan.

SET STATISTICS TIME

SET STATISTICS IO

  • Соответствующие разрешения на выполнение инструкций языка Transact-SQL.

Ни один из этих параметров инструкции SET не проверяет и не требует разрешения SHOWPLAN.

Когда проверяется разрешение SHOWPLAN?

Разрешение SHOWPLAN проверяется при выполнении пакета или инструкции языка Transact-SQL, формирующих данные инструкции Showplan. Если параметр SET инструкции Showplan установлен в ON, проверка не производится.

ПримечаниеПримечание

Контекстная база данных для пакета языка Transact-SQL устанавливается с помощью инструкции USE <database_name>. Разрешение SHOWPLAN не проверяется на инструкции USE <database_name> и на контекстные базы данных.

Дополнительные сведения о параметрах инструкции SET инструкции Showplan см. в следующих подразделах:

Разрешения, необходимые для отображения графических планов выполнения с помощью среды 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.

См. также

Другие ресурсы