AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 19749
Accepted
DaneEdw
DaneEdw
Asked: 2012-06-23 09:53:56 +0800 CST2012-06-23 09:53:56 +0800 CST 2012-06-23 09:53:56 +0800 CST

Como você concede permissão de execução para um único procedimento armazenado?

  • 772

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 procedurescript. 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
sql-server
  • 3 3 respostas
  • 274288 Views

3 respostas

  • Voted
  1. Best Answer
    Levi W
    2012-06-23T09:57:20+08:002012-06-23T09:57:20+08:00
    GRANT EXECUTE ON dbo.procname TO username;
    
    • 76
  2. Richard Ouimet
    2012-06-23T15:27:05+08:002012-06-23T15:27:05+08:00

    truncate table A configuração de permissão em objetos como procedimentos armazenados pode ser realizada com:

    GRANT EXECUTE ON <schema>.<object> to <user>;
    

    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 ASrecurso 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 ASpodem ser adicionados 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 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 EXECUTEdireitos 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):

    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Á A CRIAÇÃO DE 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 AScláusula, o procedimento armazenado é executado no contexto do proprietário do objeto. Este código cria dbo.MyTablee as linhas são inseridas com sucesso. Neste exemplo, o usuário NoPrivUsernã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.

    • 12
  3. Vishe
    2017-10-26T20:58:04+08:002017-10-26T20:58:04+08:00

    insira a descrição da imagem aqui

    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.

    • 6

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve