none
Configuração de usuário SQL 2000 RRS feed

  • Pergunta

  • Prezados,

    Estou configurando um usuário (windows integrated) com as seguintes roles para um DB específico: public, db_datareader e db_ddladmin. No entando, este usuário ao tenter executar stored procedures com o comando "exec ..." o seguinte erro ocorre:

    Msg 229, Level 14, State 5, Procedure sp_RF0109, Line 1

    EXECUTE permission denied on object 'sp_RF0109', database 'DADOSADV', owner 'dbo'.


    Como devo proceder para que este usuário consiga executar stored procedures?
    Anselmo Vicente
    terça-feira, 14 de julho de 2009 13:46

Respostas

  • Boa Tarde,

    Não é necessário atribuir permissões para as procedures que o próprio usuário cria (afinal se ele cria é normal que tenha permissões). Agora se o usuário X cria, e o usuário Y quer acessar, então é necessário atribuir permissões e infelizmente uma a uma.

    No SQL Server 2005, a introdução de Schemas permite evitar esse overhead administrativa, mas como você usa 2000... É uma a uma mesmo.
    Sugiro criar uma Role, atribuir as permissões na role, e posteriormente adicionar usuários na Role. Isso evitará reatribuir permissões caso os usuários sejam trocados.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Pivoteando, Despivoteando, Transpondo, Invertendo Colunas e Linhas no SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!629.entry


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 14 de julho de 2009 18:22

Todas as Respostas

  • Bom Dia,

    Primeiro eu recomendo rever suas permissões. db_datareader dará ao usuário a possibilidade de ler qualquer tabela de seu banco e db_ddladmin lhe dá a possibilidade de criar tabelas, views, sps e outros objetos relacionados à estrutura do banco (o que normalmente não é desejável em ambientes de produção).

    Se você deseja que o usuário consiga executar a sp, rode o comando para dar permissão de execução na SP

    GRANT EXEC ON sp_RF0109 TO Usuario
    Também recomendo não prefixar suas stored procedures com o SP já que sabidamente não é uma boa prática.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Pivoteando, Despivoteando, Transpondo, Invertendo Colunas e Linhas no SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!629.entry


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 14 de julho de 2009 14:27
  • Anselmo,

    Concordo com a sugestão e orientação do Gustavo.

    Ainda mais em relação a nomenclatura das stored procedures iniciando pela sigla sp.

    Quando você defini o nome de uma stored procedure iniciando pela sigla sp, isso significa que esta stored procedure poderá ser considerada uma stored procedure de sistema ou deverá estar armazenada no banco Master.

    Com isso durante a execução desta sp o SQL Server vai inicialmente procurar a mesma no banco master para depois verificar no banco de dados ao qual ela esta armazenada, gerando um pequeno atraso no processamento.


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 14 de julho de 2009 16:26
    Moderador
  • Essas práticas eu conheço, mas cheguei aqui e já estava assim... :(

    Quanto às permissões a idéia é que o usuário realmente possa criar procedures no banco, que serão procedures para relatórios, no entanto somente leia os dados desse banco, por isso os acessos de db_ddladmin e db_datareader.

    Agora a dúvida é a seguinte: eu terei q atribuir permissão de execução das procedure uma a uma ?


    Anselmo Vicente
    terça-feira, 14 de julho de 2009 16:41
  • Boa Tarde,

    Não é necessário atribuir permissões para as procedures que o próprio usuário cria (afinal se ele cria é normal que tenha permissões). Agora se o usuário X cria, e o usuário Y quer acessar, então é necessário atribuir permissões e infelizmente uma a uma.

    No SQL Server 2005, a introdução de Schemas permite evitar esse overhead administrativa, mas como você usa 2000... É uma a uma mesmo.
    Sugiro criar uma Role, atribuir as permissões na role, e posteriormente adicionar usuários na Role. Isso evitará reatribuir permissões caso os usuários sejam trocados.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Pivoteando, Despivoteando, Transpondo, Invertendo Colunas e Linhas no SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!629.entry


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 14 de julho de 2009 18:22