Usando EXECUTE AS para criar conjuntos de permissão personalizados

A especificação de um contexto de execução para um módulo pode ser muito útil para definir conjuntos de permissão personalizados. Por exemplo, algumas ações como TRUNCATE TABLE, não têm permissões concessíveis. Para executar TRUNCATE TABLE, o usuário deve ter permissões ALTER na tabela especificada. A concessão de permissões ALTER a um usuário em uma tabela pode não ser ideal porque o usuário irá, efetivamente, ter permissões a mais do que a capacidade de truncar uma tabela.

Incorporando a instrução TRUNCATE TABLE em um módulo e especificando que o módulo execute como um usuário que tem permissões para modificar a tabela, você pode estender as permissões para truncar a tabela para o usuário ao qual foi concedido permissões EXECUTE no módulo.

Considere este procedimento armazenado:

CREATE PROCEDURE TruncateMyTable
WITH EXECUTE AS SELF
AS TRUNCATE TABLE MyDB..MyTable;

Assuma que Mary cria esse procedimento e concede permissões de execução em TruncateMyTable para Scott. Quando Scott executa o procedimento armazenado, o Mecanismo de Banco de Dados verifica as permissões para truncar a tabela como se Mary estivesse executando o procedimento armazenado. Como ela é a proprietária da tabela, a instrução tem êxito, embora Scott não tenha permissão direta na tabela. Mary estendeu as permissões que queria rápida e eficientemente a Scott, sem dar a ele mais permissões do que o necessário para executar a tarefa.