Inquiridor
Problemas de permissão em tabelas

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)
Todas as Respostas
-
-
-
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
-
-
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. -
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... -
-
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
-
-
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