• 0
Sign in to follow this  
rai7799

Atribuir apropriadamente cargos/papéis (roles)

Question

Olá scriptbrasil.

Venho aqui na esperança de encontrar ajuda em mais um local, estou a tempos rodando por comunidades internacionais e nada. Há algum tempo atrás eu comecei a trabalhar com o PostgreSQL 9.5.3, e venho encontrando dificuldades em relação a um problema relativo a privilégios (acredito). Estou montando um sistema simples para testes e aprendizado, um e-commerce simples. Este sistema está para ser desenvolvido em Java (eu ainda estou montando o banco de dados). Bem, sem mais papo-furado...

Inicialmente eu resolvi definir no sistema 3 tipos de usuários (todos são contas de usuário com LOGIN):

  • dbadiretor: Este cargo/papel (role) tem a função de agir como super usuário no banco de dados.
  • dbagerente: Este cargo tem permissões CRUD relativas aos objetos presentes no banco de dados, não em relação a registros. Ou seja, este cargo pode criar, modificar, alterar, e/ou apagar objetos do banco de dados, tal como tabelas, funções, triggers, e etc.
  • clisistema:Esta cargo representa uma conexão para a aplicação cliente, o sistema que se conectará e utilizará o banco de dados. Este papel/cargo pode realizar operações CRUD nos registros das tabelas, mas não operações CRUD nos objetos do banco de dados. Em resumo, este cargo pode pesquisar registros, mas não pode alterar as estruturas do banco de dados. Além disso, para algumas tabelas maiores limitações (filtros) são adicionados, impedindo que este cargo realize todas as operações CRUD, mas sim, só algumas.

Eu não sou DBA (apesar de modelador de dados com DER), sou desenvolvedor Java, e não sei se separar e organizar estes tipos de cargos é aplicável e/ou recomendado. Mas enfim... Como sou novo no assunto, resolvi criar e organizar arquivos de passos lógicos para a criação e preparação do banco de dados. Cada arquivo representa uma etapa na preparação do banco de dados.

No meio da execução destes arquivos, ao distribuir privilégios para os cargos (contas, no caso) criados, eu me deparei com um erro o qual eu não estou conseguindo resolver de forma alguma. Estou realmente perdendo o juízo com isso (estou utilizando o pgAdmin 3):

ERROR:  permission denied for relation tb_tabelas
CONTEXT:  SQL statement "SELECT 1 FROM ONLY "regrast"."tb_tabelas" x WHERE "tba_id" OPERATOR(pg_catalog.=) $1 FOR KEY SHARE OF x"
********** Error **********

ERROR: permission denied for relation tb_tabelas
SQL state: 42501

Mesmo utilizando o super usuário postgresql ou o super usuário criado dbadiretor eu me deparo com este erro. Eu não estou realizando esta declaração SQL, pelo menos, talvez, não diretamente. Como super usuário, acredito ter permissão para realizar tal operação, mas parando para olhar, acho que o erro diz que a permissão não é dada devido a uma relação existente pela tabela tb_tabelas. Contudo, mesmo assim, não vejo o que há de errado se paro para observar o código SQL.

Para que vocês vejam completamente e com precisão o que eu estou fazendo (de errado) do começo ao fim, e possam ao mesmo tempo observar o meu código, eu gravei um vídeo da tela de meu computador com duração de 4 minutos, aproximadamente. Por favor, se você, leitor, não se incomodar, dê uma olhada:

http://sendvid.com/30c2s87s

Observe que no vídeo eu encontro-me criando e preparando um banco de dados do começo ao fim. Tudo o que eu faço é executar arquivos com instruções SQL, como já dito. Tenho desconfianças no momento que as instruções "REVOKE ..." são feitas, pois quando comento-as, tudo parece funcionar adequadamente, no sentido que, eu posso inserir novos registros nas tabelas.

Caso qualquer informação adicional seja necessária para melhor compreensão, ficarei feliz em coloca-la a disposição aqui. Basta pedir. De outra forma, se o vídeo não for aceitável por qualquer motivo que seja, eu posso removê-lo e adicionar o resto das informações necessárias aqui.

Agradeço de antemão pela atenção, pela disponibilidade, e pelo conhecimento doado. Qualquer dica, crítica, sugestão, melhoria, suspeita em relação ao código são bem vindas.

Share this post


Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this