KingbaseES 扩展插件src_restrict 介绍

发布时间 2023-09-19 19:22:46作者: KINGBASE研究院

插件简介

src_restrict是KingbaseES的一个扩展插件,主要用于支持来源限制功能,该功能通过黑白名单来实现。插件src_restrict默认已经加载。

查看插件是否加载
show shared_preload_libraries;

配置插件src_restrict

插件默认版本1.0
test=> select * from sys_available_extensions where name ='src_restrict';
     name     | default_version | installed_version |       comment
--------------+-----------------+-------------------+---------------------
 src_restrict | 1.0             | 1.0               | src restrict plugin
(1 row)

src_restrict.enable:是否允许使用黑白名单功能,取值范围为true或者false ,缺省值为true。

TEST=# \c - sso
You are now connected to database "TEST" as user "sso".
TEST=> show src_restrict.enable
TEST-> ;
 src_restrict.enable
---------------------
 on
(1 row)

插件src_restrict使用方法

系统函数 
添加来源限制的规则,可通过参数选择配置白名单或黑名单。
src_restrict.add_rules(
filter_type int,
rule_user text,
rule_ip text,
outrule_ip text)

参数说明
filter_type
限制规则的类型,0为白名单,1为黑名单。

rule_user
限制的用户名,多个用户时需使用逗号分隔,null表示限制所有用户。当用户名中存在特殊字符时,请将该用户名使用双引号括起来,避免用户名识别失败。
用户名参数最大长度255。

rule_ip
限制的IP,多个IP之间需使用逗号分隔,null表示限制所有IP。
允许使用*号进行IP网段匹配,但网段后不允许出现具体IP,例如192.168.*.123。

outrule_ip
不受限制的IP,与rule_ip相同。
不受限制仅表示该参数与rule_ip的类型相反,例如filter_type为0,则rule_ip为白名单,outrule_ip为黑名单,不影响黑白名单优先级。

系统函数 
删除来源限制规则。
src_restrict.remove_rules(
filter_type int,
rule_user text,
rule_ip text)

参数说明
filter_type
规则的类型,0为白名单,1为黑名单。

rule_user
规则的用户名,多个用户时需使用逗号分隔,null等于all。当用户名中存在特殊字符时,请将该用户名使用双引号括起来,避免用户名识别失败。
用户名参数最大长度255。

rule_ip
规则的IP,只允许删除一个IP,不支持删除多个规则,null等于0.0.0.0/0。
允许使用*号进行IP网段匹配,但网段后不允许出现具体IP,例如192.168.*.123。

查看规则限制视图
TEST=> select * from src_restrict.show_rules;
 filter_type | rule_user |  rule_ip  |                 netmask
-------------+-----------+-----------+-----------------------------------------
 allow       | {all}     |           |
 allow       | {all}     | 127.0.0.1 | 255.255.255.255
 allow       | {all}     | 0.0.0.0   | 0.0.0.0
 allow       | {all}     | ::1       | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
 allow       | {all}     | ::        | ::
 allow       | {all}     |           |
 allow       | {all}     | 127.0.0.1 | 255.255.255.255
 allow       | {all}     | ::1       | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
(8 rows)

测试示例
\c - sso
添加对用户u1,IP地址为192.168.1.2的黑名单规则
TEST=> select src_restrict.add_rules(1, 'u1', '192.168.56.3', '');
 add_rules
-----------
 t
(1 row)

查看当前黑白名单,多了一条filter_type为reject的条目
TEST=> select * from src_restrict.show_rules;
 filter_type | rule_user |   rule_ip    |                 netmask
-------------+-----------+--------------+-----------------------------------------
 allow       | {all}     |              |
 allow       | {all}     | 127.0.0.1    | 255.255.255.255
 allow       | {all}     | 0.0.0.0      | 0.0.0.0
 allow       | {all}     | ::1          | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
 allow       | {all}     | ::           | ::
 allow       | {all}     |              |
 allow       | {all}     | 127.0.0.1    | 255.255.255.255
 allow       | {all}     | ::1          | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
 reject      | {u1}      | 192.168.56.3 | 255.255.255.255
(9 rows)

需要sso用户reload后黑名单生效
TEST=>  select sys_reload_conf();
 sys_reload_conf
-----------------
 t
(1 row)

退出当前会后会再次登录已经被禁止
[kingbase7@localhost ~]$ ksql -h 192.168.56.3 -U u1 test
ksql: error: could not connect to server: FATAL:  no sys_hba.conf entry for host "192.168.56.3", user "u1", database "test", SSL off

删除刚添加的规则
select src_restrict.remove_rules(1, 'u1', '192.168.56.3');

需要sso用户reload后生效
TEST=>  select sys_reload_conf();
 sys_reload_conf
-----------------
 t
(1 row)

删除规则后可以用u1用户登录数据库
[kingbase7@localhost data]$ ksql -h 192.168.56.3 -U u1 test
Password for user u1:
ksql (V8.0)
Type "help" for help.

卸载插件

在kingbase.conf文件中shared_preload_libraries中将对应插件删除后重启数据库。
src_restrict扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级插件。