Postgresql
角色,其名稱與數據庫名稱不匹配,無法訪問數據庫
角色
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
對它們(以及未來的表格)擁有一些權利,我的早期答案可能會很有趣。