查看 PostgreSQL-9.5 中定义的行级安全策略
Reviewing defined row level security policies in PostgreSQL-9.5
我已经构建了全新的 PostgreSQL-9.5(alpha),我对 row level security 的新功能感到非常兴奋。这有望使多角色访问管理变得更加直接。
例如,到目前为止,我使用的模型中 NOLOGIN
角色是数据库和所有表、视图、函数等的所有者;然后创建视图以授予对特定角色的适当访问权限。一切都很好,但观点确实激增。 ENABLE ROW LEVEL SECURITY
表上的新 CREATE POLICY
命令看起来是达到相同目的的更简洁的替代方法。
但是,到目前为止,我无法确定哪些表启用了 RLS 以及在这些表上定义了哪些策略。 (很明显,所有这些都是在定义了表和策略之后。)是否有一种简单的方法来识别启用 RLS 的表上的既定策略?
(还有期待已久的 UPSERT
和更多 jsonb
功能供感兴趣的人使用,还有许多性能改进。)
好的,明白了。 (哎呀,还没有人用 9.5 吗???)
问题 1:哪些 table 具有行级安全性?
pg_class
关系有一个新列 relrowsecurity boolean
,它看起来很简单:
SELECT oid, relname FROM pg_class WHERE relrowsecurity = 'true';
问题 2:在启用 RLS 的 table 上定义了哪些策略?
系统目录有一个新的关系pg_policy
,它存储了策略的所有信息,特别是策略的名称,table的oid
,命令它适用于、策略适用的角色 (oid[]
) 以及 USING
和 WITH CHECK
子句。
有趣的是,后两者存储为 pg_node_tree
,它与受策略约束的查询的执行计划合并,因此策略的条件不会在每次调用时重新评估.这使得这种方法可能比使用问题中详述的视图更快,因为每次调用必须解析和评估的子句更少。
我已经构建了全新的 PostgreSQL-9.5(alpha),我对 row level security 的新功能感到非常兴奋。这有望使多角色访问管理变得更加直接。
例如,到目前为止,我使用的模型中 NOLOGIN
角色是数据库和所有表、视图、函数等的所有者;然后创建视图以授予对特定角色的适当访问权限。一切都很好,但观点确实激增。 ENABLE ROW LEVEL SECURITY
表上的新 CREATE POLICY
命令看起来是达到相同目的的更简洁的替代方法。
但是,到目前为止,我无法确定哪些表启用了 RLS 以及在这些表上定义了哪些策略。 (很明显,所有这些都是在定义了表和策略之后。)是否有一种简单的方法来识别启用 RLS 的表上的既定策略?
(还有期待已久的 UPSERT
和更多 jsonb
功能供感兴趣的人使用,还有许多性能改进。)
好的,明白了。 (哎呀,还没有人用 9.5 吗???)
问题 1:哪些 table 具有行级安全性?
pg_class
关系有一个新列 relrowsecurity boolean
,它看起来很简单:
SELECT oid, relname FROM pg_class WHERE relrowsecurity = 'true';
问题 2:在启用 RLS 的 table 上定义了哪些策略?
系统目录有一个新的关系pg_policy
,它存储了策略的所有信息,特别是策略的名称,table的oid
,命令它适用于、策略适用的角色 (oid[]
) 以及 USING
和 WITH CHECK
子句。
有趣的是,后两者存储为 pg_node_tree
,它与受策略约束的查询的执行计划合并,因此策略的条件不会在每次调用时重新评估.这使得这种方法可能比使用问题中详述的视图更快,因为每次调用必须解析和评估的子句更少。