21.1. Funções 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;

O nome 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;

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
dropuser nome

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 FROM pg_roles;

ou para ver apenas aqueles que podem se conectar:

SELECT rolname FROM pg_roles WHERE rolcanlogin;

O metacomando \du do utilitário psql também é útil para listar as funções de banco de dados existentes.

Para ativar o sistema de banco de dados, um sistema recém-inicializado sempre contém uma função de banco de dados predefinida com capacidade de se conectar. Esta função de banco de dados é sempre um superusuário e terá o mesmo nome do usuário do sistema operacional que inicializou a instância de banco de dados com o initdb, a menos que seja especificado um nome diferente. Esta função de banco de dados frequentemente se chama postgres. Para criar mais funções de banco de dados, deve-se primeiro conectar-se usando esta 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 esta função de banco de dados determina os privilégios de acesso iniciais para os comandos executados nesta 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 utilitário 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.