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
奇怪,不是嗎?任何想法,爲什麼這可能是?