在PostgreSQL-9.5

时间:2015-07-07 04:10:28

标签: postgresql postgresql-9.5

我已经构建了全新的PostgreSQL-9.5(alpha),我对row level security的新功能感到非常兴奋。这有望使多角色访问管理变得更加直接。

作为一个例子,我到目前为止使用的模型中NOLOGIN角色是数据库的所有者以及所有表,视图,函数等;然后创建视图以授予对特定角色的适当访问权限。一切都很好,但观点确实激增。具有CREATE POLICY的表上的新ENABLE ROW LEVEL SECURITY命令看起来是达到相同目的的更清晰的替代方案。

但是,到目前为止,我还无法确定哪些表是启用RLS的,以及在它们上定义了哪些策略。 (显然已经定义了表和策略之后的所有这些。)是否有一种简单的方法可以在启用RLS的表上识别已建立的策略?

(对于那些感兴趣的人,以及许多性能改进,还有期待已久的UPSERT和更多jsonb函数。)

1 个答案:

答案 0 :(得分:5)

好的,想通了。 (Geez,还没有人用9.5?)

问题1:哪些表具有行级安全性?

pg_class关系有一个新列relrowsecurity boolean,它看起来很简单:

SELECT oid, relname FROM pg_class WHERE relrowsecurity = 'true';

问题2:在启用RLS的表上定义了哪些策略?

系统目录有一个新关系pg_policy,它存储有关策略的所有信息,特别是策略名称,表的oid,它适用的命令,角色(该政策适用的oid[]}以及USINGWITH CHECK条款。

有趣的是,后两者存储为pg_node_tree,它与受策略的查询的执行计划合并,因此不会在每次调用时重新评估策略的条件。这使得这种方法可能比使用问题中详细阐述的视图更快,因为每次调用都必须解析和评估更少的子句。

相关问题