Compartilhar via


Permissão SHOWPLAN e lotes Transact-SQL

Um lote Transact-SQL consiste em uma ou mais instruções. Este tópico descreve como o SQL Server verifica a permissão SHOWPLAN para várias opções da instrução SET do plano de execução quando elas são usadas com lotes Transact-SQL.

Observação sobre segurançaObservação sobre segurança

Os usuários que tiverem a permissão SHOWPLAN, ALTER TRACE ou VIEW SERVER STATE poderão exibir consultas capturadas na saída do plano de execução. Essas consultas podem conter informações confidenciais, como senhas. Portanto, é recomendável que você somente conceda essas permissões a usuários autorizados a exibir informações confidenciais, como membros da função de banco de dados fixa db_owner, ou membros da função de servidor fixa sysadmin. Também é recomendável somente salvar arquivos do plano de execução ou arquivos de rastreamento que contenham eventos relacionados ao plano de execução em um local que use o sistema de arquivos NTFS e restringir o acesso a usuários autorizados a exibir informações confidenciais.

Lotes contendo instruções USE ou SET

Nenhuma verificação da permissão SHOWPLAN é executada nas instruções USE ou SET para qualquer opção SET de plano de execução (SHOWPLAN_TEXT, SHOWPLAN_ALL, SHOWPLAN_XML, STATISTICS PROFILE ou STATISTICS XML). Para SHOWPLAN_TEXT, SHOWPLAN_ALL e SHOWPLAN_XML que geram a saída de plano de execução estimada, nenhuma das instruções Transact-SQL no lote são executadas, exceto as instruções USE  database_name que são executadas para essas opções SET do plano de execução.

Exemplos de verificação da permissão SHOWPLAN

O banco de dados de contexto é definido em lotes usando a instrução USE database_name. Os bancos de dados que contêm objetos, como tabelas ou exibições, referenciadas nas instruções Transact-SQL são verificadas para a permissão SHOWPLAN. Porém, a permissão SHOWPLAN não é verificada em bancos de dados de contexto a menos que a instrução Transact-SQL referencie a objetos no banco de dados de contexto.

Se um lote contiver uma instrução USE database_name, o banco de dados de contexto será alterado. Nesse caso, a permissão SHOWPLAN não é verificada para o banco de dados de contexto que está em vigor quando uma determinada instrução acorre em um lote.

Por exemplo, no lote a seguir a permissão SHOWPLAN é verificada no banco de dados AdventureWorks2008R2 para as duas instruções SELECT. A permissão SHOWPLAN não é verificada nos bancos de dados master ou tempdb, referenciados nas instruções USE:

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

A permissão SHOWPLAN é verificada para SQL dinâmico

  • Para instruções de SQL dinâmico do formulário EXEC (command_string) ou EXEC (character_string), nenhuma verificação de permissão SHOWPLAN é executada para a instrução, incluindo a cadeia de caracteres inserida.

  • Para instruções de SQL dinâmico que executam um procedimento armazenado do formulário EXEC  dbo.my_stored_procedure, nenhuma permissão de SHOWPLAN é verificada para a própria instrução EXEC . Porém, como um plano de execução é produzido para todo o corpo de procedimento armazenado, bancos de dados que contêm objetos referenciados por instruções no procedimento armazenado são verificados para a permissão SHOWPLAN.

O exemplo a seguir mostra como as permissões SHOWPLAN são verificadas para instruções de SQL dinâmico. Para a instrução SELECT, a permissão SHOWPLAN é verificada no banco de dados AdventureWorks2008R2. Nenhuma verificação de permissão SHOWPLAN é executada na própria instrução EXEC, no banco de dados tempdb ou no banco de dados master:

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

No exemplo a seguir, onde SET STATISTICS XML é usado, se o lote for enviado ao banco de dados master, nenhuma permissão SHOWPLAN será verificada na instrução SET. Nenhuma permissão SHOWPLAN é verificada na instrução USE tempdb. Porém, como a permissão CONNECT é verificada para a instrução USE, o usuário deve já existir no banco de dados tempdb e deve ter a permissão CONNECT no banco de dados tempdb. Nenhuma permissão SHOWPLAN é verificada para a instrução EXEC porque nenhuma saída do plano de execução é gerada por ela. Nenhuma permissão SHOWPLAN é verificada na instrução USE master. No entanto, a permissão SHOWPLAN é verificada no banco de dados AdventureWorks2008R2 para a instrução SELECT:

SET STATISTICS XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks2008R2.Person.Address');
ObservaçãoObservação

A permissão SHOWPLAN não é verificada para consultas que fazem referência a versões anteriores do SQL Server. Porém, para partes de tais consultas executadas no SQL Server 2005 e posteriores, a permissão SHOWPLAN é verificada.

Lotes que contêm erros

Se uma das opções da instrução SET de plano de execução for usada com um lote Transact-SQL que produz um erro de execução de instrução ou um erro de verificação de permissão, o banco de dados de contexto será determinado como segue, dependendo do modo de opção SET usado:

  • SHOWPLAN_TEXT, SHOWPLAN_ALL e SHOWPLAN_XML

    O banco de dados de contexto que estava em vigor antes do início da execução do lote permanece em vigor. Nenhuma saída do plano de execução será gerada para o todo o lote se qualquer erro de execução de instrução ou de verificação de permissão for encontrado. Todas as verificações de permissão e instruções devem ser executadas com sucesso, ou nenhuma saída do plano de execução será produzida.

  • STATISTICS PROFILE e STATISTICS XML

    O banco de dados de contexto que estava em vigor quando a última instrução foi executada com sucesso permanece em vigor. A saída do plano de execução é gerada para cada instrução no lote onde a instrução foi executada com sucesso e a verificação da permissão foi bem-sucedida. A saída do plano de execução é produzida para cada instrução no lote executada com sucesso e para qual a verificação de permissão foi bem-sucedida.

Consulte também

Conceitos