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ç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ç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. |