我正在处理一个远程数据库,我只能访问特定的表。
相关数据的格式为:
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_a
和v_c
之间建立关联,所以我可以不从t_b
中选择任何列。经过一番思考后,我可以看到为什么权限系统不允许这样做 - 毕竟,我尝试从t_b
读取一些信息。
我也希望可能有不同的权限层,其中一个允许非选择查询。
答案 0 :(得分:2)
您可以使用拥有它或已被GRANTED读取到该表的其他帐户创建该表。您可以创建由拥有或有权读取表的同一帐户创建的存储函数。 GRANT EXECUTE对您的个人帐户的新功能,该帐户无权使用该表。执行新功能,您就可以获得数据。这称为SECURITY DEFINER,可在此处阅读更多内容http://www.postgresql.org/docs/9.3/static/sql-createfunction.html
使用此设置,您的帐户将无法直接访问该表,例如从your_table执行select *。你只能通过这个功能来实现它。可以使用视图完成相同的操作,并且许多数据库设计如何设置对表的访问权限。功能或视图是公共接口