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 eu estou nisso?
Por exemplo, como ...
Grant execute [User_Execute]
... mas apenas para este procedimento armazenado?
Eu já vi outras perguntas semelhantes, mas todas 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. Mesmo respostas sobre como eu posso definir permissões sem a GUI para procedimentos armazenados específicos serão bem-vindas.
Editar A resposta superior certamente me apontou na direção certa, isto é essencialmente o que eu estava procurando, não pensei em agrupar os comandos, o que acabei fazendo, agrupando o comando junto com o meu procedimento armazenado. Enfim, acho que é bem liso.
Create procedure <procedurename>
<@param1 <type>, @param2 <type>, etc..>
as begin
<procedure>
end
GO
GRANT EXECUTE ON <procedurename> to <username>
GO
fonte
Respostas:
fonte
tabela truncada A configuração da permissão em objetos como procedimentos armazenados pode ser realizada com:
No entanto, você também pode querer conceder direitos de segurança nos níveis de logon e usuário. Você deseja determinar e conceder APENAS 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
pode ser adicionado 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 se passar por SELF, OU o usuário que está criando ou alterar o módulo OU ... imperonar CHAMADA, que permitirá ao módulo assumir as permissões do usuário atual OU ... representar OWNER, que terá a permissão do o proprietário do procedimento chamado OR ... representa 'user_name', que representará um usuário específico OU ... representará 'login_name' com representará um logon específico.
Na maioria das vezes, você só precisará conceder
EXECUTE
direitos aos procs armazenados e, em seguida, os direitos serão concedidos a todos os objetos referenciados no proc armazenado.Dessa forma, você NÃO precisa fornecer direitos implícitos (exemplo: para 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 eles.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Á CRIAR 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ário nãoNoPrivUser
tem absolutamente nenhum direito concedido para modificar a tabela ou ler ou modificar qualquer dado desta tabela.Ele assume apenas os direitos necessários para concluir esta tarefa específica codificada NO contexto do procedimento.
Esse método de criação de procedimentos armazenados que podem executar tarefas que exigem direitos de segurança elevados sem atribuir permanentemente esses direitos é muito útil.
fonte
selecione login no banco de dados -> Vá para Securable e clique no botão Search, 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 objeto e você verá a janela "Selecionar tipos de objeto" 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 queremos fornecer permissão.
fonte