角色app
可以访问数据库app
。但是角色app2
不能。我没有看到 roleapp
的任何特定特权,并且根据以下内容,它不是所有者\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
为什么角色app
能够访问数据库?我可以检查什么?
听起来,表(不一定是数据库)归
app
用户所有。这是文档讲述的内容:由于
\dp
输出中“访问权限”下没有显示任何内容,并且app
用户可以读取和写入表,很明显它是所有者。可以证明这一点,例如,通过发出\dt access_users
,它应该返回类似这也意味着(毫不奇怪)没有其他用户(超级用户和
app
角色成员除外)可以访问这些表。如果您想app2
对它们(以及未来的表)拥有一些权利,我之前的回答可能会很有趣。