Partilhar 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 AdventureWorks para ambas as instruções SELECT. A permissão SHOWPLAN não é verificada nos bancos de dados mestre ou tempdb, referenciados nas instruções USE:

SET SHOWPLAN_XML ON
GO
USE tempdb
SELECT * FROM AdventureWorks.Person.Address
USE master
SELECT * FROM AdventureWorks.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 embutida.

  • 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 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 AdventureWorks. Nenhuma verificação de permissão SHOWPLAN é executada na própria instrução EXEC, banco de dados tempdb ou no banco de dados master:

SET SHOWPLAN_XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks.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 de 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. Entretanto, a permissão SHOWPLAN é verificada no banco de dados AdventureWorks para a instrução SELECT:

SET STATISTICS XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks.Person.Address');
Observação sobre segurançaObservação sobre segurança

A permissão SHOWPLAN não é verificada para consultas que fazem referência a versões anteriores de 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.

Histórico de alterações

Conteúdo atualizado

Uma observação de segurança sobre como proteger informações confidenciais que podem aparecer em arquivos do plano de execução ou arquivos de rastreamento foi adicionada.

Consulte também

Conceitos