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:
createusernomedropusernome
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.