微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法让用户访问 PostgreSQL 中表的不同行上的不同列?

如何解决有没有办法让用户访问 PostgreSQL 中表的不同行上的不同列?

有没有办法让 Postgresql 用户访问表的不同行上的不同列?例如在下表中,是否有 GRANTPOLICY 或 ??? 的某种组合那只会允许用户查看“允许”的单元格?

CREATE TABLE my_table (
  id INT,col_a TEXT,col_b TEXT
);

INSERT INTO my_table VALUES 
  (1,'allowed','allowed'),(2,'forbidden')
;

我认为可以通过将列拆分到不同的表来完成,但是仅使用一个表可以吗?


O. Jones 建议的一种可能的解决方案 - 使用视图:

CREATE OR REPLACE VIEW my_secure_view AS
SELECT
  id,col_a,CASE WHEN id = 1 THEN col_b ELSE NULL END AS col_b
FROM my_table;

GRANT SELECT ON my_secure_view TO whatever_user;
REVOKE SELECT ON my_table FROM whatever_user;

有更好的方法吗?

解决方法

您可以通过创建一个包含您允许用户查看的行和列的 VIEW,然后授予用户 SELECT 访问视图而不是基础表的权限来实现此目的。

例如

CREATE OR REPLACE VIEW my_secure_view AS
SELECT allowedcol1,allowedcol2
  FROM my_table
 WHERE col_b <> 'forbidden';

GRANT SELECT ON my_secure_view TO whatever_user;
REVOKE SELECT ON my_table TO whatever_user;

如果您愿意,您还可以编写存储过程并将访问权限授予您选择的用户,同时撤消对基础表的访问权限。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。