Como utilizar Roles de Grupo em um cenário real de desenvolvimento?

PostgreSQL

20/07/2010

Amigos,

Estou utilizando o PostgreSQL 8.4 e preciso de uma ajuda sobre como criar roles e roles de grupo em um cenário de desenvolvimento, conforme segue:

dois servidores: um de desenvolvimento e outro de produçãouma equipe de DESENVOLVEDORES (notem, são as pessoas que irão criar os BDs) com os seguintes membros:Gestor_compras - é o dono do sistema de compras (uma role de grupo?)Gestor_vendas - é o dono do sistema de vendas (outra role de grupo?)usr_compras - é um usuário que só tem acesso a consulta no sistema de comprasusr_vendas - é um usuário que só tem acesso a consulta no sistema devendas
Antônio - é um programador que desenvolve os sistemas de compras e de vendas e precisa criar nos BDs suas tabelas e demais objetos (views, functions etc)Carlos - é um programador que desenvolve o sistema de compras e precisa criar no BD suas tabelas e demais objetos (views, functions etc)Pedro e Célio - são estagiários que realizam os testes de funcionamento nos dois sistemasA idéia é que cada usuário tenha seu próprio login, de forma que a senha do Gestor_compras não seja compartilhada. Afinal, se um dos desenvolvedores se desligar da empresa, bastará retirar seu login do sistema ou, se ele mudar de projeto, associar seu login a uma outra role de grupo.
No cenário acima:
Antônio deverá ser capaz de criar tabelas em ambos os sistemas no servidor de desenvolvimento e fazer todas as operações como se fosse um super-usuário, entretanto, tudo o que ele criar deverá ser feito como se fosse o Gestor_compras, ou seja, apesar de ser o Antônio executando a criação o DONO dos objetos deverá ser o Gestor_compras. Afinal, se o Antônio sair da empresa ou mudar de projeto, outro desenvolvedor deverá ser capaz de continuar os serviços "no papel" de Gestor_compras.
Carlos deverá ser capaz de criar tabelas e fazer todas as operações somente no sistema de vendas do servidor de desenvolvimento e fazer todas as operações como se fosse um super-usuário (somente do BD do sistema de vendas), entretanto, tudo o que ele criar deverá ser feito como se fosse o Gestor_vendas, ou seja, apesar de ser o Carlos executando a criação o DONO dos objetos deverá ser o Gestor_vendas. Afinal, se o Carlos sair da empresa ou mudar de projeto, outro desenvolvedor (o Antônio, por exemplo, que trabalha nos dois sistemas) deverá ser capaz de continuar os serviços "no papel" de Gestor_vendas.Pedro e Célio deverão ser capazes de testar o sistema, logar nos BDs de desenvolvimento e fazer consultas às tabelas sem, no entanto, criar nenhum objeto.Na condição de desenvolvedores, cada qual em seu sistema, Antônio e Carlos serão super-usuários (restritos a seus BDs) no servidor de desenvolvimento, mas, terão acesso somente como usr_compras e usr_vendas no servidor de produção.Já os estagiários, não terão acesso ao servidor de produção.
Tentei fazer as roles acima utilizando o PgAdmin, mas encontrei as seguintes dificuldades:

Mesmo criando um role de grupo (Gestor_vendas) e colocando nela os usuários Antônio e Carlos, eles não herdaram os privilégios da role para criação de BDs nem de super-usuários;Criando cada um como super-usuário, os desenvolvedores não ficaram restritos cada um a seu BD. Note que Carlos, só deveria ter provilégio de super-usuário no sistema de vendas e como super-usuário, poderia acessar qualquer BD do servidor.Mesmo com Antônio e Carlos pertencendo à role de grupo Gestor_vendas, e existindo a permissão de acesso para o Gestor_compras no pg_hba.conf, é necessário liberar o acesso individual a cada login no pg_hba.conf. (Considerando que num cenário real existem dezenas de desenvolvedores, dois servidores, duas redes - interna e externa - e dezenas de BDs, o gerenciamento do pg_hba.conf, por acesso individual (sem roles de grupo) fica impraticável).Eis o desafio:

Quais são os comandos passo-a-passo (na prática e não na teoria) para se criar o ambiente descrito acima?Ou o PostgreSQL não é capaz de implementar esta configuração de segurança?
Sei que o tópico ficou extenso, mas, acho que assim, será mais fácil um companheiro oferecer uma solução direta, fazendo com que este post fique mais curto.

Abraço a todos e meu obrigado antecipado pela ajuda.


Alexandre



Alexandre Thees

Alexandre Thees

Curtidas 0
POSTAR