none
Problemas de permissão em tabelas RRS feed

  • Pergunta

  • Senhores,

    No nosso ambiente de desenvolvimento aqui, estamos precisando PROIBIR que os desenvolvedores alterem estruturas das tabelas, mas eles PODEM e DEVEM continuar a alterar as stored procedures. O problema é que quando tiramos a permissão deles de alterar as estruturas de tabelas , eles também não conseguem alterar as procedures. Como faço para BLOQUEAR as permissões só nas tabelas ?

    Obrigado.

    • Movido Gustavo Maia Aguiar quinta-feira, 5 de novembro de 2009 12:34 (De:SQL Server - Desenvolvimento Geral)
    quarta-feira, 4 de novembro de 2009 18:49

Todas as Respostas

  • Qual versao do SQL? Eu sei que isso é facil de fazer no SQL2005 e 2008. No 2000 eu sinceramente nao lembro

    Att

    William
    quarta-feira, 4 de novembro de 2009 18:57

  • grant create table to usuario
    deny create procedure to usuario

    Ja tentou assim?
    quarta-feira, 4 de novembro de 2009 18:57
  • Olá Virgilio,

    Segue um exemplo de como proceder.

    -- SELECIONANDO O CONTEXTO

    USE [master]

    GO

     

    -- CRIANDO UM LOGIN

    CREATE LOGIN [teste]

          WITH PASSWORD = '123456'

    GO

     

    -- CRIANDO UMA BASE DE DADOS

    CREATE DATABASE DbTeste

    GO

     

    -- MUDANDO O CONTEXTO

    USE DbTeste

    GO

     

    -- CRIANDO UM USUÁRIO PARA O LOGIN [TESTE]

    CREATE USER [teste]

          FOR LOGIN [teste]

    GO

     

    -- CRIANDO UM TABELA

    CREATE TABLE TbTeste

          (

                NoPessoa VARCHAR(30)

          )

    GO

     

    -- CRIANDO UMA PROCEDURE

    CREATE PROCEDURE PRO_Teste

    AS

          SELECT @@VERSION

    GO

     

    -- DANDO PERMISSÃO PARA ALTERAR A PROCEDURE [teste]

    GRANT ALTER ON PRO_Teste TO [teste]

    GO

    -- NEGANDO A PERMISSÃO DE ALTERAR A TABELA [teste]

    DENY ALTER ON TbTeste TO [teste]

    Caso tenha lhe ajudado não se esqueça de marca como útil, só assim ajudará a melhorar a qualidade do fórum.

    Heberton Melo
    MCP | MCTS em SQL Server 2008 | Projetista de Dados

    Blog: http://heberton-melo.spaces.live.com

    • Sugerido como Resposta Heberton Melo quinta-feira, 5 de novembro de 2009 03:57
    quarta-feira, 4 de novembro de 2009 21:43
  • Bom dia William..

    Utilizamos a versão Enterprise do SQL 2005....

    Obrigado.
    quinta-feira, 5 de novembro de 2009 09:36
  • Bom dia Corujão,

    Já tentamos esses comandos sim.... Mas o quê precisamos é que os desenvolvedores NÃO alterem NENHUMA estrutura de qualquer tabela... Mas eles podem e DEVEM continuar tendo permissão para alterarem stored procedures.

    O quÊ acontece é que quando retiramos as permissões de eles alterarem estruturas de tabelas, eles perdem as permissões de alterarem as stored procedures.
    quinta-feira, 5 de novembro de 2009 09:39
  • Bom dia Heberton,

    Muito obrigado por suas dicas, mas o quê estamos precisando aqui é que TODAS as tabelas sejam NEGADAS permissões de alterações de estrutura... Não é somente uma tabela em específico.

    Mas eles podem e DEVEM continuar tendo permissão para alterarem stored procedures.

    O quÊ acontece é que quando retiramos as permissões de eles alterarem estruturas de tabelas, eles perdem as permissões de alterarem as stored procedures.

    Obrigado...
    quinta-feira, 5 de novembro de 2009 09:43
  • Ja passei como vc faz isso no outro tópico que você abriu.
    Tks. Fausto Fiorese Branco DBA - SQL Server 2k5 São Paulo - Brasil * http://dba-sqlserver.blogspot.com/
    quinta-feira, 5 de novembro de 2009 11:28
  • Olá Virgilio,

    Uma solução para o seu problema seria você criar duas database role, uma para receber a permissão de alter procedure e outra para negar o privilegio de alterar as entidades, depois de feito isso você colocaria explicitamente os usuário em uma das duas databases roles dependendo da permissão que o mesmo deverá ter.

    Mas para resolver seu problema em usuários em especifico, você pode executar esse script que descreverei logo a seguir, na qual pode ser executado para qualquer usuário, mas para isso basta substituir o nome do usuário passado nas variáveis.

    OBS: Coloque um nome de usuário válido.

    Na base de dados que desejas conceder e negar as ações execute o código que segue
    .

    -- DECLARA A VARIÁVEL

    DECLARE @UsuarioProcedure NVARCHAR(30) = 'Usuario'

     

    -- RETORNA O CONJUNTO DE GRANT PARA TODAS

    -- AS PROCEDURE DA BASE DE DADOS NO CONTEXTO DA EXECUÇÃO

    SELECT 'GRANT ALTER ON ' + QUOTENAME(name)

                                        + ' TO '

                                      + QUOTENAME(@UsuarioProcedure)  

      FROM sys.procedures


    Resultado.

    GRANT ALTER ON [aspnet_UsersInRoles_IsUserInRole] TO [Usuario]

    GRANT ALTER ON [aspnet_UsersInRoles_GetRolesForUser] TO [Usuario]

    GRANT ALTER ON [aspnet_Roles_CreateRole] TO [Usuario]

    GRANT ALTER ON [aspnet_Roles_DeleteRole] TO [Usuario]

    -- DECLARA A VARIÁVEL

    DECLARE @UsuarioTabela NVARCHAR(30) = 'Usuario'

     

    -- RETORNA O CONJUNTO DE DANY PARA TODAS

    -- AS PROCEDURE DA BASE DE DADOS NO CONTEXTO DA EXECUÇÃO

    SELECT 'DENY ALTER ON ' + QUOTENAME(name)

                                     + ' TO '

                                     + QUOTENAME(@UsuarioTabela)

      FROM sys.tables

    Resultado.

    DENY ALTER ON [TbContrato] TO [Usuario]

    DENY ALTER ON [TbImovel] TO [Usuario]

    DENY ALTER ON [TbMensalidade] TO [Usuario]

    DENY ALTER ON [TbImobiliaria] TO [Usuario]

    O Resultado do script pode se executado para da as permissões aos usuário que você determinar.

    Caso tenha lhe ajudado não se esqueça de marca como útil, só assim ajudará a melhorar a qualidade do fórum.

    Heberton Melo
    MCP | MCTS em SQL Server 2008 | Projetista de Dados


    Blog: http://heberton-melo.spaces.live.com

    • Sugerido como Resposta Heberton Melo quinta-feira, 5 de novembro de 2009 13:40
    quinta-feira, 5 de novembro de 2009 13:40
  • Obrigado  Heberton,

    Fiz uns testes aqui com esse script seu... Deu certo .

    quinta-feira, 5 de novembro de 2009 15:15
  • Olá Virgilio,

    Obrigado pelo retorno e fico feliz em saber que deu certo!

    Porem seria interessante você marca a resposta que lhe ajudou como útil, pois só assim você ajudará a melhorar a qualidade do fórum.

    Qualquer coisa é só postar, pois existem grandes profissionais aqui no fórum disposto a sempre ajudar a quem tem alguma dúvida, inclusive a mim.

    O Resultado do script pode se executado para da as permissões aos usuário que você determinar.

    Caso tenha lhe ajudado não se esqueça de marca como útil, só assim ajudará a melhorar a qualidade do fórum.

    Heberton Melo
    MCP | MCTS em SQL Server 2008 | Projetista de Dados

    Blog: http://heberton-melo.spaces.live.com

    quinta-feira, 5 de novembro de 2009 19:17