Безопасность инструкции Showplan
Сведения, предоставляемые инструкцией Showplan о плане выполнения, можно получить различными способами. Можно использовать параметры инструкции SET языка Transact-SQL, классы событий приложения SQL Server Profiler или произвести запрос к динамической административной функции sys.dm_exec_query_plan. Каждый способ требует разного набора разрешений, которые описываются в следующих разделах. Дополнительные сведения о проверке разрешения SHOWPLAN для пакетов на языке Transact-SQL см. в разделе Разрешение SHOWPLAN и пакеты Transact-SQL.
Примечание. |
---|
Если уровень совместимости базы данных SQL Server 2005 с помощью хранимой процедуры sp_dbcmptlevel установлен в 80, применяется текущее разрешение SHOWPLAN. В Microsoft SQL Server 2000 установка уровня совместимости в 80 не порождает разрешения SHOWPLAN. |
О разрешении SHOWPLAN
Разрешение SHOWPLAN впервые появилось в SQL Server 2005. Для получения выходных данных плана выполнения с помощью большинства параметров SET инструкции Showplan языка Transact-SQL пользователи должны иметь:
- разрешение SHOWPLAN на базы данных, содержащие объекты, на которые ссылается инструкция языка Transact-SQL, такие как представления, хранимые процедуры или пользовательские функции;
- соответствующее разрешение для выполнения самой инструкции языка Transact-SQL.
Примечание безопасности. |
---|
Предоставляйте разрешение SHOWPLAN только надежным пользователям, поскольку из выходных данных инструкции Showplan можно логически получить сведения об объектах SQL Server.
Например, рассмотрим следующий запрос:
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.
Для всех остальных инструкций (инструкций DDL, USE database_name, SET, DECLARE, динамических инструкций языка Transact-SQL и т. д.) необходимы только соответствующие разрешения на выполнение инструкции Transact-SQL. Дополнительные сведения см. в разделе Разрешение SHOWPLAN и пакеты Transact-SQL. |
SET STATISTICS XML ON SET STATISTICS PROFILE ON |
Для инструкций языка 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 |
Ни один из этих параметров инструкции SET не проверяет и не требует разрешения SHOWPLAN. |
Когда проверяется разрешение SHOWPLAN?
Разрешение SHOWPLAN проверяется при выполнении пакета или инструкции языка Transact-SQL, формирующих данные инструкции Showplan. Если параметр SET инструкции Showplan установлен в ON, проверка не производится.
Примечание. |
---|
Контекстная база данных для пакета языка Transact-SQL устанавливается с помощью инструкции USE <database_name>. Разрешение SHOWPLAN не проверяется на инструкции USE <database_name> и на контекстные базы данных. |
Дополнительные сведения о параметрах инструкции SET инструкции Showplan см. в следующих подразделах:
- SET SHOWPLAN_XML (Transact-SQL)
- SET SHOWPLAN_ALL (Transact-SQL)
- SET SHOWPLAN_TEXT (Transact-SQL)
- SET STATISTICS XML (Transact-SQL)
- SET STATISTICS PROFILE (Transact-SQL)
- SET STATISTICS TIME (Transact-SQL)
- SET STATISTICS IO (Transact-SQL)
Разрешения, необходимые для отображения графических планов выполнения с помощью среды 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.