Postgresql

角色,其名稱與數據庫名稱不匹配,無法訪問數據庫

  • December 2, 2016

角色app可以訪問數據庫app。但是角色app2不行。我沒有看到角色app的任何特定權限,並且它不是所有者,根據\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使用者所有。這就是文件所講述的內容:

如果給定對象的“訪問權限”列為空,則表示該對象具有預設權限(即,其權限列為空)。預設權限始終包括所有者的所有權限,並且可以根據對像類型包括一些 PUBLIC 權限,如上所述。

由於\dp輸出中的“訪問權限”下沒有顯示任何內容,並且app使用者可以讀取和寫入表,因此很明顯它是所有者。例如,可以通過發出來證明這一點,\dt access_users它應該返回類似

       List of relations
Schema │ Name         │ Type  │ Owner  
────────┼──────────────┼───────┼───────
public │ access_users │ table │ app

這也意味著(毫不奇怪),沒有其他使用者(除了超級使用者和app角色成員)可以訪問這些表。如果您想app2對它們(以及未來的表格)擁有一些權利,我的早期答案可能會很有趣。

引用自:https://dba.stackexchange.com/questions/156775