如何解决有没有办法让用户访问 PostgreSQL 中表的不同行上的不同列?
有没有办法让 Postgresql 用户访问表的不同行上的不同列?例如在下表中,是否有 GRANT
或 POLICY
或 ??? 的某种组合那只会允许用户查看“允许”的单元格?
CREATE TABLE my_table (
id INT,col_a TEXT,col_b TEXT
);
INSERT INTO my_table VALUES
(1,'allowed','allowed'),(2,'forbidden')
;
我认为可以通过将列拆分到不同的表来完成,但是仅使用一个表可以吗?
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 举报,一经查实,本站将立刻删除。