2014-02-28 124 views
1

我正在處理遠程數據庫,我只有權限訪問特定的表。PostgreSQL查詢在沒有權限的情況下使用表格

相關數據的形式爲:

CREATE TABLE t_a(v_a VARCHAR(32), v_b VARCHAR(32)); 
CREATE TABLE t_b(v_b VARCHAR(32), v_c VARCHAR(32)); 

INSERT INTO t_a VALUES ('one', 'abc1'); 
INSERT INTO t_a VALUES ('two', 'abc2'); 
INSERT INTO t_a VALUES ('three', 'abc3'); 

INSERT INTO t_b VALUES ('abc1', 'eins'); 
INSERT INTO t_b VALUES ('abc2', 'zwei'); 
INSERT INTO t_b VALUES ('abc3', 'drei'); 

我的查詢是這樣的:

SELECT DISTINCT ON (v_a) v_a, v_c FROM t_a, t_b WHERE t_a.v_b = t_b=v_b; 

現在實際的問題:我可以以某種方式得到同樣的信息未經允許t_b閱讀?我可以嘗試另一種方法嗎?

編輯

可悲的是,我沒有更改權限的權利。我的思路是,因爲我只想要在v_av_c之間建立關聯,所以我可以不用從t_b中選擇任何列。經過一番思考後,我可以看到爲什麼這不應該被許可系統允許 - 畢竟,我試圖從t_b讀取一些信息。

我也希望可能有不同的權限層,其中一個允許非選擇查詢。

+0

您的意思是即使您沒有對其的讀取權限,也希望在查詢中包含t_b?什麼樣的數據庫系統可以做到這一點? – harmic

+0

您是否在'PUBLIC'或某個用戶​​/角色的表上授予'GRANT'訪問權限?如果不是,那麼只有業主可以訪問它。 –

+0

不相關,但:使用'distinct on'而未指定'order by'並不是一個好主意 –

回答

2

您可以使用擁有它或已被授予讀取到表的其他帳戶創建該表。您要創建一個由擁有或有權讀取該表的相同帳戶創建的存儲函數。將新功能的執行權授予您對該表沒有權限的個人帳戶。執行新功能,您可以獲取數據。這稱爲安全定義,更多可以在這裏閱讀http://www.postgresql.org/docs/9.3/static/sql-createfunction.html

使用此設置,您的帳戶將無法直接訪問表,就像通過在your_table中執行select *操作一樣。您只能通過該功能進入。視圖也是如此,許多數據庫設計如何設置對錶格的訪問權限。該函數或視圖是公共接口

+0

我認爲這實際上是我在編輯中提到的那種權限級別。感謝您的鏈接! – phaebz

相關問題