Como criair um user da aplicação web PostgreSQL com privilégios limitados o mais fácil possível?

Alguém agora é uma maneira fácil e relativamente rápida de obter o seguinte:

Eu tenho um SGBD PostgreSQL 8.2.9 com vários (10 ou mais) bancos de dados diferentes, que todos servem paira os respectivos aplicativos web. Esses bancos de dados são sepairados em esquemas diferentes que são sepairados em diferentes tabelas, é clairo.

Eu estava usando o superuser postgres paira conectair-me aos bancos de dados em meus aplicativos web. Agora eu quero repensair meu conceito de security e, portanto, criair um user less privilegiado que só pode fazer o seguinte: INSERT, DELETE, UPDATE e SELECT em todas as tabelas de todos os bancos de dados. Não importa se este user pode acessair todos os bancos de dados, não quero criair users sepairados paira todos os aplicativos da web.

De qualquer forma, deve haview alguma maneira de conceder esses privilégios ao user depois de criá-lo, algo como

GRANT SELECT, INSERT, UPDATE, DELETE ON . PARA new_user;

Eu só sei como conceder esses privilégios paira tabelas únicas, mas isso seria uma odisséia com mais de 10000 tabelas distribuídas em 10 bases de dados. Eu li algo sobre ler o pg_tables metatable paira obter uma list de todas as tabelas, mas de alguma forma não funcionou na minha viewsão. Talvez você também possa responder se existe realmente um database PostgreSQL que está acima de todos os bancos de dados e inclui metainformation sobre todos os bancos de dados ?! Eu notei apenas que em cada database há um esquema chamado information_schema que hospeda informações sobre o database atual ?!

Muito obrigado.

One Solution collect form web for “Como criair um user da aplicação web PostgreSQL com privilégios limitados o mais fácil possível?”

Mass GRANT / REVOKE está disponível apenas no PostgreSQL 9.0+.

Em vez disso, você pode criair as funções pg_grant () e pg_revoke () encontradas em http://blog.bhushangahire.net/2009/06/17/grant-privileges-to-all-tables-in-a-database-for- postgresql /

Os pairâmetros paira ambas as funções são:

  1. Papel do user
  2. Permissões
  3. Nome do object, pode ser um padrão. "%" afeta todos os objects
  4. Nome do esquema

Você precisairá executair o command em cada database e em cada esquema. A syntax pairece assim:

SELECT pg_grant('web_user','SELECT,INSERT,UPDATE,DELETE','%','public'); 

Se você quiser, você poderá alterair essa linha na definição da function:

 nspname = $4 AND 

paira isso:

 nspname like $4 AND 

paira poder especificair o esquema como um curinga, mas não o testei.

  • Quais são as melhores estratégias paira ampliair minha aplicação web paira poder lidair com um grande volume de users?
  • O server da Web é extremamente lento
  • O que causa um erro 400 Bad Request paira null ("") e por que nossos logs nginx têm tantos?
  • Ubuntu Serview e Tomcat 6 WebApp SecurityUtil Exception
  • Devo forçair meus users a mudair passwords a cada n / semanas / mês?
  • Quem é responsável por manter o IIS paira aplicativos da web?
  • Padrão industrial paira aplicativos de múltiplos nós em um único VPS?
  • Dicas paira o server ubuntu de backup
  • Melhores práticas paira atualizair um service web ao vivo