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:
createusernome_da_role
dropusernome_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.