#postgresql #extension #access #expressions #parser #authorization #accumulo

accumulo_access_pg

解析和评估Accumulo访问表达式的PostgreSQL扩展

4个版本

0.1.5 2024年6月10日
0.1.4 2024年5月15日
0.1.3 2024年5月8日
0.1.2 2024年4月22日
0.1.0 2024年1月8日

#565数据库接口

MIT/Apache

11KB
147

Accumulo访问表达式用于PostgreSQL

简介

本项目提供了一种PostgreSQL扩展,允许使用Accumulo访问表达式解析、评估和过滤行(行级安全)以在PostgreSQL查询中使用。该扩展以Rust扩展的形式实现。

没有优秀的 pgrx项目,开发将不可能实现。

安装

待办事项

cargo install cargo-pgrx
cargo pgrx init --pg15=download
cargo build --release
cargo pgrx run pg15
#cargo pgrx package
CREATE EXTENSION accumulo_access_pg;

用法

带有行级安全的示例

create role users;
create user johnny;
grant users to johnny;

create table secret_stuff(id serial primary key, data text not null, authz_expr text not null);
alter table secret_stuff enable row level security;
insert into secret_stuff(data, authz_expr) values('pretty secret', 'label1');
insert into secret_stuff(data, authz_expr) values('moar secret', 'label1|label2');
insert into secret_stuff(data, authz_expr) values('wat', 'label2');
insert into secret_stuff(data, authz_expr) values('win', 'label2 & (label3 | label4)');

grant select on secret_stuff to users;

create policy evaluate_policies on secret_stuff using ( sec_authz_check(authz_expr, current_setting('session.authorizations')));

-- ...
set session authorization johnny;
select current_user,session_user;
-- current_user | session_user 
----------------+--------------
-- johnny       | johnny

set session.authorizations = 'label1';

select * from secret_stuff;
-- id |     data      |  authz_expr   
------+---------------+---------------
--  1 | pretty secret | label1
--  2 | moar secret   | label1|label2
-- (2 rows)

set session.authorizations = 'label2,label3';
select * from secret_stuff;
-- id |    data     |         authz_expr         
------+-------------+----------------------------
--  2 | moar secret | label1|label2
--  3 | wat         | label2
--  4 | win         | label2 & (label3 | label4)
-- (3 rows)

待办事项

  • 使缓存功能可配置(策略、大小)
  • 实现一些基准测试。
  • 支持签名授权(JWT?仅原始签名?)

许可证

本项目同时受Apache 2.0许可证和MIT许可证的许可。有关详细信息,请参阅LICENSE_APACHELICENSE_MIT文件。

贡献

欢迎贡献。请打开一个问题或拉取请求。

依赖项

~22MB
~489K SLoC