Normalmente, quando crio um procedimento armazenado, uso o seguinte como modelo de classificação
Create procedure <procedurename>
<@param1 <type>, @param2 <type>, etc..>
as begin
<procedure>
end
Existe uma maneira de incluir a concessão de permissão de execução apenas nesse procedimento armazenado enquanto estou nisso?
Por exemplo como...
Grant execute [User_Execute]
... mas apenas para este procedimento armazenado?
Eu vi algumas outras perguntas semelhantes, mas elas parecem se referir a TODOS os procedimentos armazenados e não apenas a um, nem vi um em que você possa especificar permissões dentro do create procedure
script. Até mesmo respostas sobre como posso definir permissões sem a GUI para procedimentos armazenados específicos seriam bem-vindas.
Editar A resposta principal certamente me apontou na direção certa, isso é essencialmente o que eu estava procurando, não pensei em agrupar os comandos, o que acabei fazendo, agrupando o comando junto com meu procedimento armazenado. De qualquer forma, eu acho que é bem maneiro.
Create procedure <procedurename>
<@param1 <type>, @param2 <type>, etc..>
as begin
<procedure>
end
GO
GRANT EXECUTE ON <procedurename> to <username>
GO
truncate table A configuração de permissão em objetos como procedimentos armazenados pode ser realizada com:
No entanto, você também pode conceder direitos de segurança no nível de login e de usuário. Você desejará determinar e conceder SOMENTE os direitos necessários para os objetos que requerem acesso (como execução). Considere o uso do
EXECUTE AS
recurso que permite a representação de outro usuário para validar as permissões necessárias para executar o código SEM ter que conceder todos os direitos necessários a todos os objetos subjacentes (por exemplo, tabelas).EXECUTE AS
podem ser adicionados a procedimentos armazenados, funções, gatilhos, etc.Adicione ao código da seguinte maneira dentro do procedimento armazenado:
Nesse caso, você está representando o proprietário do módulo que está sendo chamado. Você também pode personificar SELF, OR o usuário criando ou alterando o módulo OR... personificar CALLER , que permitirá ao módulo assumir as permissões do usuário atual, OU... personificar OWNER, que assumirá a permissão do proprietário do procedimento que está sendo chamado OU... representar 'user_name', que irá representar um usuário específico OU... representar 'login_name' com irá representar um login específico.
Na maioria das vezes, você só precisará conceder
EXECUTE
direitos a procs armazenados e, em seguida, direitos são concedidos a todos os objetos referenciados no proc armazenado.Desta forma, você NÃO precisa dar direitos implícitos (exemplo: atualizar dados ou chamar procs adicionais). O encadeamento de propriedade lida com isso para você. Isso é especialmente útil para sql dinâmico ou se você precisar criar tarefas de segurança elevadas, como
CREATE TABLE
.EXECUTE AS
é uma ferramenta útil a considerar para estes.Este exemplo pode ajudar a esclarecer tudo isso:
Crie um usuário chamado NoPrivUser com acesso público a um banco de dados (por exemplo, dbadb):
NOTA: O CRIADOR OU O PROPRIETÁRIO DESTE PROCEDIMENTO EXIGIRÁ A CRIAÇÃO DE DIREITOS DE TABELA no banco de dados de destino.
Com a
EXECUTE AS
cláusula, o procedimento armazenado é executado no contexto do proprietário do objeto. Este código criadbo.MyTable
e as linhas são inseridas com sucesso. Neste exemplo, o usuárioNoPrivUser
não tem absolutamente nenhum direito concedido para modificar a tabela, ou ler ou modificar qualquer um dos dados nesta tabela.Apenas assume os direitos necessários para concluir esta tarefa específica codificada DENTRO do contexto deste procedimento.
Esse método de criar procedimentos armazenados que podem executar tarefas que exigem direitos de segurança elevados sem atribuir esses direitos permanentemente é muito útil.
selecione login do banco de dados-->Vá para Securável e clique no botão Pesquisar como na imagem anterior. Ao clicar no botão Pesquisar, você encontrará a seguinte janela para adicionar o tipo de objeto.
Clique no botão Tipos de Objetos e você obterá a janela “Selecionar Tipos de Objetos” com vários objetos. Agora, se você vir, o procedimento armazenado está listado na área de tipos de objeto. Agora vamos selecionar nosso procedimento armazenado específico no qual desejamos fornecer permissão.