Carregando...
Sem categoria

Gerenciando usuários, grupos no PostgreSQL

O PostgreSQL tem um sistema super completo de gerenciamento de usuários e grupos (roles). Ele utiliza o conceito de users e roles.

A diferença entre user e role é que o user tem poder de fazer login no banco, a role não.

O PostgreSQL usa 3 tabelas para gerenciar users, roles e membros:

pg_catalog.pg_user
pg_catalog.pg_roles
pg_catalog.pg_auth_members

A tabela pg_user contém apenas as roles onde a coluna rolcanlogin = true

Existem algumas ambiguidades entre algumas colunas das tabelas pg_user e pg_roles, são elas:

pg_user.usename = pg_roles.rolname
pg_user.usesysid = pg_roles.oid

Usando o PGAdmin 4

No PG Admin 4, se você quiser adicionar um usuário a um grupo existente, clique com o botão direito no usuário, Properties… Membership e adicione o grupo desejado. A lógica dessa interface é meio estranha pois é o usuário quem define em que grupo ele está, mas é assim que o PG Admin 4 implementou essa funcionalidade.

Listando todos os Usuários

SELECT *
FROM pg_catalog.pg_user;

Listando todas as Roles

SELECT *
FROM pg_catalog.pg_roles;

Listando todos os membros de Roles

SELECT *
FROM pg_catalog.pg_auth_members;

Listando todas as Roles que são membros de outras Roles

SELECT "role".rolname "role", "is_member_of".rolname "is_member_of", "grantor".rolname "grantor"
FROM pg_catalog.pg_auth_members membership
JOIN pg_catalog.pg_roles "is_member_of" ON "is_member_of".oid = membership.roleid
JOIN pg_catalog.pg_roles "role" ON "role".oid = membership.member
JOIN pg_catalog.pg_roles "grantor" ON "grantor".oid = membership.grantor
ORDER BY "role";

E onde as senhas dos usuários são guardados?

As senhas são guardadas na tabela pg_catalog.pg_authid

As senhas são por padrão salvas com hash MD5, entretanto essa tabela só é acessível por usuários que são SUPER USER.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *