sql - 未经许可使用表的PostgreSQL查询

标签 sql 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 读取一些信息。

我也希望可能有不同的权限层,其中之一允许非选择查询。

最佳答案

您可以使用拥有它或已被授权读取该表的不同帐户创建该表。您可以创建由拥有或有权读取该表的同一帐户创建的存储函数。将新功能 GRANT EXECUTE 授予您无权访问该表的个人帐户。执行新函数,就可以得到数据了。这称为 SECURITY DEFINER,更多信息可在此处阅读 http://www.postgresql.org/docs/9.3/static/sql-createfunction.html

使用此设置,您的帐户将无法直接访问该表,例如通过执行 select * from your_table。您只能通过函数访问它。同样可以用 View 来完成,这也是许多数据库设计如何设置对表的访问。函数或 View 是公共(public)接口(interface)

关于sql - 未经许可使用表的PostgreSQL查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22106792/

相关文章:

sql boolean 数据类型替代

mysql - 带公式的SQL语句

SQL Server - 获取作业历史记录详细信息

php - 从 MYSQL 数据透视表中筛选记录

postgresql - 在创建 postgres DB 时,centOs 6.9 中的无效命令\ir

mysql - SQL新手需要知道什么是错的

sql - 有条件地加入表

postgresql - plpgsql:引发通知输出仅在 pgAdmin 中显示

sql - Postgres : integer out of range. 为什么会出现这个错误?

sql - PostgreSQL 中的聚簇索引?