none
Como dar permissao nesse caso? RRS feed

  • Pergunta

  • Desenvolvi uma procedure com comando dinamico para acessar bancos e tabelas dinamicamente.

    SET @sql = 
    'SELECT  xxx as [EMIt],
    ISNULL(ROUND(SUM(CASE WHEN ppp_PRODUT NOT in (''00000000010000'',''00000000010001'',''00000000099998'') THEN ppp_vlr END),2),0.00) AS [Tota],
    ...
    FROM ' + @ttt + ...
    Exec (@sql)

    @ttt é setado conforme condições de input da procedure

    Criei um usuario somente com permissao de exec mas ocorre o seguinte erro

    Msg 916, Level 14, State 1, Line 1
    The server principal "USER02" is not able to access the database "reg_01" under the current security context.

    reg_01 is one of databases that I have. 
    Como faço para dar permissao ao usuario executar a procedure sem ter que dar permissao de leitura para as tabelas que teria que acessar e estao dinamicas?
    quarta-feira, 22 de fevereiro de 2017 15:40

Respostas

  • haichu1,

    Uma alternativa seria utilizar o comando Execute As User ou Execute As Login, talvez possa ser uma forma de mesmo você estando simultaneamente conectado com logins ou users distintos no momento da execução da sua Stored Procedure utilizar um usuário ou login específico.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 22 de fevereiro de 2017 18:45

Todas as Respostas

  • No seu database é possível configurar o acesso

    Va em Security depois login, selecione o usuário e clique em propriedade, você  vai configura usando as opções server roles e Securables

    quarta-feira, 22 de fevereiro de 2017 15:56
  • Carlos, fiz a procedure com comando dinamico para acessar banco de dados e tabelas de modo enxuto.

    Atualmente já tenho 30 bancos e mais de 50 tabelas por banco que o usuario vai acessar atraves da procedure

    justamente para evitar dar permissão  de leitura e escrita para cada tabela que contem dentro da base..

    quarta-feira, 22 de fevereiro de 2017 17:42
  • haichu1,

    Uma alternativa seria utilizar o comando Execute As User ou Execute As Login, talvez possa ser uma forma de mesmo você estando simultaneamente conectado com logins ou users distintos no momento da execução da sua Stored Procedure utilizar um usuário ou login específico.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 22 de fevereiro de 2017 18:45
  • Se voce cria uma procedure em uma base e essa procedure acessa tabelas de outras bases, só a permissão de exec na proc não vai funcionar.

    Vai ter que liberar a leitura em todas essas tabelas que são acessadas em outras databases.


    Fabrício França Lima MCITP - SQL Server Database Administrator Trabalho com SQL Server desde 2006 Treinamento DBA ONLINE: http://www.fabriciolima.net/blog/cursos-online/treinamento-tarefas-do-dia-a-dia-de-um-dba-online/

    quinta-feira, 23 de fevereiro de 2017 12:28