tabela truncada A configuração da permissão em objetos como procedimentos armazenados pode ser realizada com:
GRANT EXECUTE ON <schema>.<object> to <user>;
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:
CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER
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):
USE [master];
GO
CREATE LOGIN [NoPrivUser] WITH PASSWORD=N'ABC5%', DEFAULT_DATABASE=[dbadb],
CHECK_EXPIRATION=ON, CHECK_POLICY=ON;
GO
USE [DBAdb];
GO
CREATE USER [NoPrivUser] FOR LOGIN [NoPrivUser];
GO
NOTA: O CRIADOR OU O PROPRIETÁRIO DESTE PROCEDIMENTO EXIGIRÁ CRIAR DIREITOS DE TABELA no banco de dados de destino.
use DBAdb
go
CREATE PROCEDURE dbo.MyProcedure
WITH EXECUTE AS OWNER
truncate table MyTable
GO
GRANT EXEC ON dbo.MyProcedure TO NoPrivUser;
GO
-- Now log into your database server as NoPrivUser and run the following.
Com a EXECUTE AS
cláusula, o procedimento armazenado é executado no contexto do proprietário do objeto. Este código cria dbo.MyTable
e as linhas são inseridas com sucesso. Neste exemplo, o usuário não NoPrivUser
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.