2014-02-28 82 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

相关问题