Segurança de plano de execução
As informações de plano de execução podem ser produzidas por vários meios. Você pode usar opções Transact-SQL da instrução SET, classes de evento SQL Server Profiler ou consultar a função de gerenciamento dinâmico sys.dm_exec_query_plan. Cada método requer um conjunto diferente de permissões que são descritas nas seções seguintes. Para obter mais informações sobre como a permissão de SHOWPLAN é verificada para lotes Transact-SQL, consulte Permissão SHOWPLAN e lotes Transact-SQL.
Observação |
---|
Quando um nível de compatibilidade do banco de dados SQL Server é definido como 80 usando o procedimento armazenado sp_dbcmptlevel, a permissão SHOWPLAN atual ainda se aplica. Definir o nível de compatibilidade como 80 não produz o comportamento das permissões de plano de execução do Microsoft SQL Server 2000. |
Sobre a permissão SHOWPLAN
Para produzir saída de plano de execução usando a maioria das opções SET Transact-SQL de plano de execução, os usuários devem ter:
A permissão SHOWPLAN nos bancos de dados que contêm objetos mencionados na instrução Transact-SQL, como exibições, procedimentos armazenados ou funções definidas pelo usuário.
A permissão apropriada para executar a própria instrução 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.
Por exemplo, considere a consulta a seguir:
SELECT COUNT(*)
FROM table_1
WHERE column_1 < 10
Se um usuário mal intencionado produzir uma saída de plano de execução para um conjunto de consultas como este exemplo, e substituir o valor "10" no predicado por constantes diferentes a cada vez, o usuário poderá deduzir uma distribuição de dados aproximada dos valores da coluna para a column_1 na table_1 lendo as contagens de linha estimadas.
A permissão SHOWPLAN é uma permissão de banco de dados que:
Pode ser concedida, negada ou revogada apenas pelos seguintes usuários:
Membros da função de servidor fixa sysadmin. Por padrão, todos os membros dessa função de servidor fixa têm a permissão SHOWPLAN em todos os bancos de dados no servidor.
Membros da função de servidor fixa dbcreator para bancos de dados criados por eles e, portanto, de sua propriedade. Por padrão, todos os membros dessa função de servidor fixa têm a permissão SHOWPLAN para bancos de dados criados por eles e, portanto, de sua propriedade.
Membros da função fixa de banco de dados db_owners para bancos de dados que eles possuem. Por padrão, todos os membros dessa função de banco de dados fixa têm a permissão SHOWPLAN para bancos de dados que eles possuem.
Oferece suporte a encadeamento de propriedade. Quando a cadeia de propriedade é quebrada, a permissão é verificada novamente em relação ao nó onde a quebra ocorreu. Porém, uma vez que a permissão SHOWPLAN é uma permissão de banco de dados, essa verificação só acontece quando as consultas fazem referência a objetos em dois ou mais bancos de dados. Para obter mais informações sobre encadeamento de propriedade, consulte Cadeias de propriedade.
Para obter informações sobre a sintaxe usada para conceder, negar ou revogar a permissão SHOWPLAN, consulte Sintaxe para conceder, negar e revogar a permissão SHOWPLAN.
Exemplo
Se o usuário 1 tiver as permissões CREATE TABLE, INSERT e SELECT, e ele criar a tabela T (ele é o proprietário de tabela) em um banco de dados D, inserir linhas na tabela e, então, escrever uma consulta SELECT na tabela, a consulta será executada com sucesso. Porém, o usuário 1 não pode gerar um plano de execução até que lhe seja concedida a permissão SHOWPLAN no banco de dados D.
Limitações
No exemplo anterior, suponha que o banco de dados D contém a exibição V para a qual o usuário 1 tem permissão SELECT. Depois que User1 recebeu a permissão SHOWPLAN para D, embora não tenha V, ele ainda poderá gerar um plano de execução em uma consulta enviada a V. Esse plano de execução lhe permitirá visualizar a definição de exibição de V, incluindo as tabelas e as exibições nas quais V se baseia. Porém, se V contiver um objeto, como uma tabela de propriedade do usuário 1, a qual existe em um banco de dados diferente, D2, e o usuário 1 não é for o proprietário de D2, a permissão SHOWPLAN para D2 será verificada e necessária.
Permissões necessárias para usar as opções SET de plano de execução
As permissões necessárias para usar as várias opções da instrução SET de plano de execução são listadas na tabela a seguir:
Opções SET de plano de execução |
Permissões necessárias |
---|---|
SET SHOWPLAN_XML ON SET SHOWPLAN_ALL ON SET SHOWPLAN_TEXT ON |
Para as instruções SELECT, INSERT, UPDATE, DELETE, EXEC stored_prodedure e EXEC user_defined_function, as seguintes permissões são necessárias para produzir um plano de execução:
Para todas as outras instruções, como DDL, USE database_name, SET, DECLARE, Transact-SQL dinâmico etc., apenas as permissões apropriadas para executar a instrução Transact-SQL são necessárias. Para obter mais informações, consulte Permissão SHOWPLAN e lotes Transact-SQL. |
SET STATISTICS XML ON SET STATISTICS PROFILE ON |
Para instruções Transact-SQL que não produzem STATISTICS PROFILE ou conjuntos de resultados STATISTICS XML, são necessárias apenas as permissões apropriadas para executar as instruções Transact-SQL. Para as instruções Transact-SQL que produzem STATISTICS PROFILE ou conjuntos de resultados STATISTICS XML, verifica tanto a permissão de execução de instrução Transact-SQL e a permissão de SHOWPLAN deve ser bem-sucedida ou a instrução de execução Transact-SQL será anulada e nenhuma informação de plano de execução será gerada. Para obter informações sobre quais instruções Transact-SQL produzem informações de plano de execução, consulte Instruções Transact-SQL que produzem planos de execução. |
SET STATISTICS TIME SET STATISTICS IO |
Nenhuma dessas opções de instrução SET verifica ou exige a permissão SHOWPLAN. |
Quando a permissão SHOWPLAN é verificada?
A permissão SHOWPLAN é verificada quando uma instrução Transact-SQL ou lote é executado e as informações de plano de execução são geradas. A verificação não acontece quando uma opção SET de plano de execução é definida como ON.
Observação |
---|
O banco de dados de contexto para um lote Transact-SQL é definido por meio de uma instrução USE <database_name>. A permissão de SHOWPLAN não é verificada em instruções USE <database_name> e não é verificada no banco de dados de contexto. |
Para obter mais informações sobre as opções da instrução SET de plano de execução, consulte os seguintes tópicos:
Permissões necessárias para exibir planos de execução gráfica usando o SQL Server Management Studio
As permissões necessárias para exibir planos de execução gráfica no SQL Server Management Studio são listadas na tabela a seguir:
Opção do plano de execução do Management Studio |
Permissões necessárias |
---|---|
Exibir Plano de Execução Estimado |
Requer as mesmas permissões necessárias para usar uma opção da instrução SET de SHOWPLAN_XML |
Incluir Plano de Execução Real |
Requer as mesmas permissões necessárias para usar uma opção da instrução SET de STATISTICS XML |
Para obter mais informações, consulte Exibindo planos de execução gráfica (SQL Server Management Studio).
Permissões necessárias para exibir planos de execução usando as classes de evento do SQL Server Profiler
Para exibir planos de execução usando classes de evento do SQL Server Profiler, os usuários devem ser membros da função de servidor fixa sysadmin terem a permissão ALTER TRACE concedida. A permissão SHOWPLAN não é verificada nem é necessária.
Para obter mais informações, consulte Exibindo planos de execução usando as classes de evento do SQL Server Profiler.
Permissões necessárias para exibir planos de execução usando a função de gerenciamento dinâmico sys.dm_exec_query_plan
Para exibir planos de execução usando a função de gerenciamento dinâmico sys.dm_exec_query_plan, somente a permissão VIEW SERVER STATE deve ser concedida aos usuários.
Para obter mais informações, consulte sys.dm_exec_query_plan (Transact-SQL).
Histórico de alterações
Conteúdo atualizado |
---|
Uma observação de segurança para destacar como proteger informações confidenciais que podem aparecer em arquivos do plano de execução ou arquivos de rastreamento foi atualizada. |