sepgsql

基于SELinux标签的强制访问控制

概览

扩展包名版本分类许可证语言
sepgsql-SECPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
7960sepgsql-
相关扩展pg_readonly pg_permissions set_user noset pgaudit credcheck login_hook passwordcheck_cracklib

版本

PG18PG17PG16PG15PG14
-----

安装

提示:这是 PostgreSQL 内核自带的 contrib 扩展

用法

sepgsql: PostgreSQL 基于 SELinux 标签的强制访问控制

sepgsql 基于 SELinux 安全策略提供基于标签的强制访问控制(MAC)。它在 PostgreSQL 标准 SQL 权限之上增加了额外的安全检查层。

配置参数

参数默认值描述
sepgsql.permissiveoff无论系统 SELinux 设置如何都启用宽容模式
sepgsql.debug_auditoff无论策略如何都强制记录所有可能的日志

函数

函数返回类型描述
sepgsql_getcon()text获取当前客户端安全标签
sepgsql_setcon(text)boolean将客户端域切换到新标签(NULL 恢复)
sepgsql_mcstrans_in(text)text将限定 MLS/MCS 范围转换为原始格式
sepgsql_mcstrans_out(text)text将原始 MLS/MCS 范围转换为限定格式
sepgsql_restorecon(text)boolean为数据库中所有对象设置初始安全标签

安全标签

可以为模式、表、列、序列、视图和函数分配安全标签:

SECURITY LABEL ON COLUMN customer.credit
    IS 'system_u:object_r:sepgsql_secret_table_t:s0';

动态域转换

SELECT sepgsql_getcon();
-- unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0-s0:c1.c4');
-- t

可信过程

-- 创建函数以使用脱敏方式访问敏感数据
CREATE FUNCTION show_credit(int) RETURNS text
    AS 'SELECT regexp_replace(credit, ''-[0-9]+$'', ''-xxxx'', ''g'')
         FROM customer WHERE cid = $1'
    LANGUAGE sql;

-- 标记为可信过程
SECURITY LABEL ON FUNCTION show_credit(int)
    IS 'system_u:object_r:sepgsql_trusted_proc_exec_t:s0';

权限类别

DML 操作检查:db_table:{select|insert|update|delete}db_column:{select|update|insert}。 DDL 操作检查:createdropsetattradd_nameremove_name。 模式访问需要:db_schema:search


最后修改 2026-03-12: update extension pages (f579993)