2010-11-01 22 views
0

我在Windows Server 2003 SP2上的PostgreSQL 9.0.1上遇到了一個奇怪的問題。儘管權限正確,但爲什麼我可以選擇視圖定義而不是視圖本身?

我連接爲一個超級用戶,然後設置SESSION授權,誰是小組的作用「extranet_user」,它繼承組角色「用戶」 會員的會員用戶 「X」。 「X」,「extranet_user」,甚至 「用戶」都是INHERIT。

我有以下看法:

CREATE OR REPLACE VIEW page_startup AS 
SELECT contact.name, contact.nickname, COALESCE( 
     CASE 
      WHEN has_table_privilege('mandate'::text, 'select'::text) 
THEN (SELECT false AS bool 
       FROM mandate 
     NATURAL JOIN task 
     WHERE task.waiting_for = "session_user"()::text::integer AND 
task.deadline < now() 
     LIMIT 1) 
      ELSE NULL::boolean 
     END, true) AS no_mandates 
    FROM contact 
    WHERE contact.id = "session_user"()::text::integer; 
GRANT SELECT ON TABLE page_startup TO "user"; 

如果我運行此:

set session authorization "X"; 
select pg_has_role('user','member') 

我得到't'結果。另外,如果我運行這個(僅僅複製視圖的定義 ):

set session authorization "X"; 
SELECT contact.name, contact.nickname, COALESCE( 
     CASE 
      WHEN has_table_privilege('mandate'::text, 'select'::text) 
THEN (SELECT false AS bool 
       FROM mandate 
     NATURAL JOIN task 
     WHERE task.waiting_for = "session_user"()::text::integer AND 
task.deadline < now() 
     LIMIT 1) 
      ELSE NULL::boolean 
     END, true) AS no_mandates 
    FROM contact 
    WHERE contact.id = "session_user"()::text::integer; 

我得到的數據的單行我要找的。

但是,如果我嘗試使用視圖而不是複製它的定義:

set session authorization "X"; 
select * from page_startup 

我得到如下:

ERROR: permission denied for relation page_startup 
********** Error ********** 
ERROR: permission denied for relation page_startup 
SQL state: 42501 

奇怪,不是嗎?任何想法,爲什麼這可能是?

回答

0

原來重新啓動pgAdminIII以某種方式修復它。我在第一次遇到此錯誤後的某個時間點將extranet_user的權限更改爲繼承,並且結果未發生變化。今天早上我啓動了pgAdminIII,複製了這篇文章中的代碼,並且工作。

相關問題