22.1. Função de banco de dados

As funções de banco de dados (roles) são conceitualmente inteiramente separadas dos usuários do sistema operacional. Na prática, pode ser conveniente manter uma correspondência, mas não é obrigatório. As funções de banco de dados são globais na instância de bancos de dados (e não por banco de dados individual). Para criar uma função de banco de dados, é usado o comando CREATE ROLE do SQL:

CREATE ROLE nome_da_role;

O nome_da_role segue as regras para identificadores do SQL: ou sem aspas e sem caracteres especiais, ou entre aspas (Na prática, normalmente se deseja incluir atributos adicionais, como LOGIN, no comando. Mais detalhes são mostrados a seguir.) Para remover uma função de banco de dados existente, é usado o comando análogo DROP ROLE:

DROP ROLE nome_da_role;

Por conveniência, são fornecidos os utilitários createuser e dropuser que são invólucros em torno desses comandos SQL, e que podem ser chamados a partir da linha de comando:

createuser nome_da_role
dropuser nome_da_role

Para listar o conjunto de funções de banco de dados existentes e seus atributos, deve-se consultar o catálogo do sistema pg_roles. Por exemplo:

SELECT rolname, rolcanlogin, rolcreatedb FROM pg_roles;

O meta-comando \du do programa psql também serve para listar as funções de banco de dados existentes e seus atributos, exceto as predefinidas.

Para ativar o sistema de banco de dados, um sistema recém-inicializado sempre contém uma função de banco de dados predefinida. Essa função de banco de dados é sempre um superusuário, e por padrão (a menos que seja alterado ao executar o utilitário initdb) terá o mesmo nome do usuário do sistema operacional que inicializou o agrupamento de bancos de dados. Normalmente, essa função de banco de dados se chama postgres. Para criar mais funções de banco de dados, primeiro é necessário se conectar como essa função de banco de dados inicial.

Toda conexão com o servidor de banco de dados é feita usando o nome de alguma função de banco de dados específica, e essa função de banco de dados determina os privilégios de acesso iniciais para os comandos executados nessa conexão. O nome da função de banco de dados a ser usada para uma determinada conexão com o banco de dados é indicado pelo cliente que está efetuando a solicitação de conexão, de uma maneira específica da aplicação. Por exemplo, o programa psql usa a opção de linha de comando -U para indicar qual função de banco de dados será usada para se conectar. Muitas aplicações assumem o nome do usuário corrente do sistema operacional por padrão (inclusive o createuser e o psql). Portanto, muitas vezes é conveniente manter uma correspondência de nomes entre as funções de banco de dados e os usuários do sistema operacional.

A configuração de autenticação de cliente determina o conjunto de funções de banco de dados com as quais uma determinada conexão cliente pode se conectar, conforme explicado em Autenticação de cliente. (Assim, um cliente não está limitado a se conectar como a função de banco de dados correspondente ao seu usuário do sistema operacional, assim como o nome de login de uma pessoa não precisa corresponder ao seu nome real.) Como a identidade da função de banco de dados determina o conjunto de privilégios disponíveis para um cliente conectado, é importante configurar cuidadosamente os privilégios ao configurar um ambiente multiusuário.