Permissões do usuário do PostgreSQL

2

Estou tentando fazer uma transição do MySQL para o PostgreSQL, mas acho que o sistema de contas / permissões de usuários é bem diferente.

Com o mysql, todas as contas são manipuladas internamente pelo mysql. Com postgres é parece que preciso fazer uma conta dentro do sistema, bem como dentro do postgres.

Existe algum guia sobre como as contas de usuário do sistema se relacionam com as contas de usuário do postgres? O manual do postgres não parece explicar muito sobre isso.

    
por Ian 29.10.2009 / 17:10

2 respostas

3

Você só precisa criar usuários do sistema se quiser usar a autenticação local.

Para conexões de rede, você usa CREATE USER e GRANT como você está acostumado no MySQL.

A principal diferença é que, diferentemente do MySQL, onde as partes de autenticação e autorização estão dentro das tabelas no banco de dados mysql, parte das regras de autenticação do Postgres estão em um arquivo externo pg_hba.conf).

Para permitir que o usuário foo se conecte à barra de banco de dados a partir de 10.1.1.0/24, você quer uma linha como essa no arquivo:

host bar foo 10.1.1.0/24 md5

Depois de editar o pg_hba.conf, lembre-se de executar

pg_ctl reload

para recarregar a configuração.

Quando o usuário tenta se conectar, ele precisará fornecer uma senha (que você forneceu quando criou o usuário).

Lembre-se também que no PostgreSQL tudo é um papel. Um papel que você define como 'WITH LOGIN' é um usuário, enquanto um que não possui esse sinalizador é mais parecido com um grupo. Por flexibilidade, tenho a tendência de criar usuários com senhas e WITH LOGIN. Em seguida, crio funções sem senhas e concedo essa função aos usuários de login. Meus subsídios são para o papel de grupo, e não para usuários individuais.

Em pg_hba.conf, use + role para corresponder a qualquer pessoa que tenha a função atribuída (em vez de foo no exemplo acima)

    
por 29.10.2009 / 17:58
1

Observe que, se uma conta do postgresql estiver configurada para usar ident e md5, por padrão, tentará usar ident.

Você pode forçá-lo a usar o nome de usuário / senha (ou seja, md5), adicionando a opção --host = localhost ao final da linha de comando do psql ou similar.

Isso força a conexão a passar pelos sockets, o que desativa ident e, portanto, força a autenticação do nome de usuário / senha.

    
por 29.11.2009 / 19:19