查看PostgreSQL-9.5中定义的行级安全策略

Pat*_*ick 8 postgresql postgresql-9.5

我已经构建了全新的PostgreSQL-9.5(alpha),我对行级安全性的新功能感到非常兴奋.这有望使多角色访问管理变得更加简单明了.

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

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

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

Pat*_*ick 5

好吧,想通了.(Geez,还没人用9.5吗?)

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

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

SELECT oid, relname FROM pg_class WHERE relrowsecurity = 'true';
Run Code Online (Sandbox Code Playgroud)

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

系统目录具有新关系pg_policy,该关系存储策略的所有信息,特别是策略名称,oid表的名称,应用的命令,oid[]策略应用的角色()USINGWITH CHECK条款.

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