2014-09-05 79 views
4

請解釋PostgreSQL中\z命令的輸出。我瞭解許可,我閱讀了文檔,但不知何故,我錯過了對\z輸出的解釋。解釋PostgreSQL權限

datastore_default=> \z 

            Access privileges 
Schema |  Name  | Type |   Access privileges   | Column access privileges 
--------+-----------------+-------+-----------------------------------+-------------------------- 
public | _table_metadata | view | ckan_default=arwdDxt/ckan_default+| 
     |     |  | datastore_default=r/ckan_default +| 
     |     |  | readonlyuser=r/ckan_default  +| 
public | foo    | table | ckan_default=arwdDxt/ckan_default+| 
     |     |  | datastore_default=r/ckan_default +| 
     |     |  | readonlyuser=r/ckan_default  +| 

不知怎的readonlyuser似乎能夠讀取表foo和_foo但在實踐中它不能。這兩個命令都返回一個錯誤:

sudo -u postgres psql -d datastore_default -U readonlyuser -c 'SELECT * FROM foo' 
sudo -u postgres psql -d datastore_default -U readonlyuser -c 'SELECT * FROM public.foo' 
ERROR: permission denied for schema public 
LINE 1: SELECT * FROM public.foo 

編輯:顯然,我對數據庫和模式權限的工作方式瞭解甚少。首先只有數據庫管理員(用戶postgres)或數據庫的所有者(在我的情況下用戶ckan_default)可以授予其他用戶在特定數據庫上的權限。該架構僅在數據庫級別,因此可以添加readonlyuser查看公共架構的權限,無論如何都無法從其他數據庫中進行選擇。

+0

我已經在閱讀ACL時添加了一些細節以供我回答。 – Eelke 2014-09-09 08:49:29

回答

14

錯誤說權限被拒絕了架構公共(重點煤礦)

你需要給有關模式的公共readonlyuser權利:

GRANT USAGE ON SCHEMA public TO readonlyuser; 

的ACL的內容是在this page解釋。這裏引用的最相關部分:

rolename=xxxx -- privileges granted to a role =xxxx -- privileges granted to PUBLIC

 r -- SELECT ("read") 
     w -- UPDATE ("write") 
     a -- INSERT ("append") 
     d -- DELETE 
     D -- TRUNCATE 
     x -- REFERENCES 
     t -- TRIGGER 
     X -- EXECUTE 
     U -- USAGE 
     C -- CREATE 
     c -- CONNECT 
     T -- TEMPORARY 
    arwdDxt -- ALL PRIVILEGES (for tables, varies for other objects) 
     * -- grant option for preceding privilege 

    /yyyy -- role that granted this privilege 

+是psql格式化結果的一部分,它們不是值的一部分。

+2

謝謝,但它似乎仍然不起作用。 'sudo -u postgres psql -d datastore_default -U ckan_default -c'在模式中授予用戶public to readonlyuser;' 警告:「公共」 GRANT沒有授予特權。 \ z打印相同的東西。我有PostgreSQL 9.1.14(Ubuntu 12.04 LTS) – ddreian 2014-09-05 20:24:47

+1

我認爲當你登錄的用戶沒有足夠的權限來授予這些權限時,它會給出這個消息。您應該擁有GRANT權限,或者是公共所有者或超級用戶。 – Eelke 2014-09-06 08:05:57

+0

謝謝。現在很清楚。我有這樣的印象:這個+有一些特殊的含義。 – ddreian 2014-09-09 11:47:41