Em 12 de agosto de 2016 20:16, Matheus Saraiva
<[email protected]> escreveu:
> Eu realmente nunca fiz uso do recurso de controle de usuário que o
> PostgreSQL oferece. Eu geralmente fazia o controle de permissões na própria
> aplicação, geralmente usando flags booleanas para demarcar as permissões de
> um usuário em um determinado recurso no sistema. Mas tudo em cima de um
> super usuário.
> Como minhas aplicações são geralmente pequenas com poucos usuários, nunca
> tive problemas.

A maioria dos aplicativos que desenvolvi e que conheço são "mais ou
menos" assim, e olha que alguns são ERP's de médio/grande porte (mais
de 800 usuários simultâneos).

> Mas estou trabalhando em uma aplicação um pouco maior, na qual haverá
> transações remotas via VPN assim pensei em usar um pouco mais os recursos de
> segurança do postgresql, em especial o controle de usuários.
>
> Mas eu estou com algumas dúvidas em como usar tal recurso.

Abro um parênteses: Conexões diretas ao banco via VPN? Não seria
melhor alguma forma de colocar a interface do lado do servidor para
evitar expor o banco de dados? O desempenho disso não vai ser muito
bom, já vi várias tentativas frustradas de conexões remotas com VPN,
em especial porque há um overhead significativo para compressão e
criptografia dos dados.

Existem alternativas: WEB, Terminal Service (MS Windows) ou até mesmo
uma aplicação em NCurses para terminal. Depende da sua aplicação...

> Primeiro - Num cenário de um ERP, deve-se criar um usuário para cada pessoa
> que usa a aplicação?

É o ideal, o sonho de qualquer DBA (ou não, pela dor de cabeça para
gerenciar). Mas isto vai lhe trazer algumas dificuldades de
implementação e controle. Em especial se for (e deve) utilizar pool de
conexões. O pgBouncer 'parece' que faz o pool considerando múltiplos
usuários, mas nunca tentei. Se quiser gerenciar o pool na aplicação,
dentre as diversas outras ferramentas e frameworks de programação
dificilmente você conseguirá fazer um pool desta forma (eu com minha
humilde experiência, não conheço alguma que faça).

> Segundo - Num cenário WEB, onde não é possível prever a quantidade de
> usuários. Sendo mais específico um site de compras, onde um cliente entra,
> faz um cadastro e compra. Como ficaria nesse caso? Um usuário único com as
> permissões definidas e todos os acessos via WEB se conectariam por ele?

Eu acho que é por aí mesmo. Você não deve pensar no usuário
individual, mas sim no papel que este usuário tem. Geralmente eu
defino um usuário por aplicativo que se conecta ao banco de dados e
defino suas permissões. Caso hajam usuários que acessem o banco para
consultas ad-hoc, crio um usuário específico para cada um e defino
suas permissões.

Mas vamos dizer que você queira ainda assim usar a segurança do
PostgreSQL para suas aplicações, ignorando as dificuldades. Eu diria
para você identificar bem os papéis (tipos) de usuários e criar os
seus grupos, definir as permissões e restrições inicialmente por
grupos, aplicá-las aos usuários (roles) e depois tratar exceções para
os  usuários individualmente.

Você pode criar tabelas de configurações que sejam lidas por uma
função de banco que aplique estas permissões gerando os GRANT/REVOKE.

Se quiser mesmo seguir essa linha será algo bem interessante de se
fazer. Eu desconheço algum aplicativo que faça isso, se alguém sabe de
algum, conta aí "pra nóis".


TIAGO J. ADAMI
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a