A função app
pode acessar o banco de dados app
. Mas o papel app2
não pode. Não vejo nenhum privilégio específico para role app
e não é um proprietário de acordo com \l
:
app2=> \l
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------------+----------+----------+-------------+-------------+--------------------------
app | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres +
| | | | | postgres=CTc/postgres +
| | | | | app=CTc/postgres +
| | | | | app2=CTc/postgres
...
app2=> \dp
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+---------------------------------------------+----------+-------------------+--------------------------
public | access_users | table | |
public | access_users_id_seq | sequence | |
...
app2=> select * from users;
ERROR: permission denied for relation users
Por que a função app
pode acessar o banco de dados? O que posso verificar?
Ao que parece, as tabelas (não necessariamente o banco de dados) são de propriedade do
app
usuário. Isto é o que a documentação diz sobre isso:Como nada é exibido em "Privilégios de acesso" na
\dp
saída e oapp
usuário pode ler e gravar na tabela, fica claro que é o proprietário. Pode-se provar isso, por exemplo, emitindo\dt access_users
, que deve retornar algo comoIsso também significa (não surpreendentemente) que nenhum outro usuário (exceto superusuários e membros da
app
função) tem acesso às tabelas. Se você quiserapp2
ter alguns direitos sobre eles (e tabelas futuras), uma resposta anterior minha pode ser interessante.