黑白名单
📄字数 5.8K
👁️阅读量 加载中...
一、概述
1.1 基本概念
数据库黑白名单是一种核心的访问控制机制,通过定义信任策略(白名单)和限制策略(黑名单),精确控制哪些用户、从哪些IP地址范围能够访问特定数据库资源。白名单明确授权合法访问路径,仅允许受信主体访问敏感数据库;黑名单则主动拦截高风险访问,阻止恶意IP、未授权用户或可疑连接。这种双重防护机制为数据库系统构建起精细化的访问安全防线。
数据库黑白名单通过配置信任IP地址、信任用户和指定数据库来实现访问控制:
- 白名单:允许访问的可信配置项
- 黑名单:禁止访问的不可信配置项
1.2 配置方式
配置方式 | 生效范围 | 生效时间 | 管理复杂度 |
---|---|---|---|
修改配置文件 | 当前节点 | 需重启服务 | 低 |
执行数据库命令 | 单节点/所有节点 | 立即生效 | 高 |
二、配置文件方式配置黑白名单
2.1 配置文件位置
通过修改数据库安装包根路径下SETUP
文件夹的trust.ini
文件配置黑白名单。
重要
配置文件方式需在数据库服务启动前配置或配置后重启生效,建议集群环境下保持所有节点配置一致
2.2 trust.ini配置格式
2.3 参数说明
参数 | 说明 |
---|---|
TRUST | 表示该条配置信息为可信策略,允许配置用户访问数据库,即白名单策略 |
UNTRUST | 表示该条配置信息为不可信策略,不允许配置用户访问数据库,即黑名单策略 |
db_name | 指定策略所影响的目标数据库名 |
EVERYDB | 指定策略影响所有数据库 |
user_name | 指定策略所影响的目标用户名 |
EVERYONE | 指定策略影响所有所有用户 |
ip_str1 | 指定策略所影响的IP地址 |
TO ip_str2 | 可选参数,表示从ip_str1到ip_str2的IP段均受策略影响 |
ANYWHERE | 所有IP |
2.4 配置示例
白名单配置
ini
# 允许192.168.1.100的SYSDBA用户访问SYSTEM库
trust system sysdba from 192.168.1.100
# 允许192.168.1.100-109网段的SYSDBA用户访问SYSTEM库
trust system sysdba from 192.168.1.100 to 192.168.1.109
1
2
3
4
5
2
3
4
5
提示
在trust.ini中默认配置trust everydb everyone from anywhere,该项覆盖了所有白名单选项,单独设置白名单无意义,若需白名单生效,需删除该配置项,可在启动服务前修改配置生效或通过命令删除该项。
黑名单配置
ini
# 禁止192.168.2.50的guest用户访问test库
untrust test guest from 192.168.2.50
# 禁止192.168.3.200-220网段所有用户访问report库
untrust report everyone from 192.168.3.200 to 192.168.3.220
1
2
3
4
5
2
3
4
5
三、数据库命令方式配置黑白名单
除了通过修改配置文件进行黑白名单策略配置外,还可通过命令进行策略配置。
重要
所有的可信策略配置只能在系统库进行设置,普通用户库的管理员无权设置可信策略。
删除可信策略时必须谨慎,若删除了所有可信策略,以下三种解决方案可避免用户无法登录数据库:
- 1、在当前连接未断开之前新增白名单;
- 2、若当前连接已断开,在数据库服务所在机器使用ip
127.0.0.1
登录,可登录成功,然后新增白名单; - 3、关闭数据库服务,修改
SETUP
文件夹的trust.ini
文件配置白名单,重启生效(不推荐)。
3.1 命令语法
3.2 参数说明
参数 | 说明 |
---|---|
TRUST | 表示该条配置信息为可信策略,允许配置用户访问数据库,即白名单策略 |
UNTRUST | 表示该条配置信息为不可信策略,不允许配置用户访问数据库,即黑名单 |
db_name | 指定策略所影响的目标数据库名 |
EVERYDB | 指定策略影响所有数据库 |
user_name | 指定策略所影响的目标用户名 |
EVERYONE | 指定策略影响所有所有用户 |
ip_str1 | 指定策略所影响的IP地址 |
TO ip_str2 | 可选参数,表示从ip_str1 到ip_str2 的IP段均受策略影响 |
ANYWHERE | 所有IP |
ON ALL NODE | 多节点,可信策略对所有节点生效,单节点可不配置 |
ON NODE iconst | 其中iconst 为节点号,表示黑白名单在iconst 节点号生效,若未使用ON ALL NODE 和ON NODE iconst 则表示黑白名单在当前节点生效 |
3.3 黑名单管理
添加黑名单
sql
-- 增加一个黑名单,不允许高风险IP所有用户访问所有数据库
SQL> ALTER CONNECT POLICY ADD DISABLE 'everyone' LOGIN 'everydb' FROM '192.168.2.239' ON ALL NODE;
SQL> SELECT * FROM sys_black_white_list WHERE IP_RANGE='192.168.2.239';
+--------+-----------+---------+-----------+---------------+
| NODEID | LIST_TYPE | DB_NAME | USER_NAME | IP_RANGE |
+--------+-----------+---------+-----------+---------------+
| 1 | blacklist | everydb | everyone | 192.168.2.239 |
+--------+-----------+---------+-----------+---------------+
-- 增加一个黑名单,不允许用户user_black从任何IP访问1号节点库customer_db
SQL> CREATE DATABASE customer_db;
SQL> CREATE USER user_black IDENTIFIED BY '123@';
SQL> ALTER CONNECT POLICY ADD DISABLE 'user_black' LOGIN 'customer_db' FROM 'anywhere' ON NODE 1;
SQL> SELECT * FROM sys_all_black_white_list WHERE list_type='blacklist' AND db_name='customer_db' AND nodeid=1;
+--------+-----------+-------------+-----------+----------+
| NODEID | LIST_TYPE | DB_NAME | USER_NAME | IP_RANGE |
+--------+-----------+-------------+-----------+----------+
| 1 | blacklist | customer_db | user_black| anywhere |
+--------+-----------+-------------+-----------+----------+
-- 增加一个黑名单,不允许任何用户从192.168.3.107到192.168.3.120这个IP地址段登录用户库test
SQL> ALTER CONNECT POLICY ADD DISABLE 'everyone' LOGIN 'customer_db' FROM '192.168.3.107' TO '192.168.3.120' ON ALL NODE;
SQL> SELECT * FROM sys_all_black_white_list WHERE list_type='blacklist' AND db_name='customer_db';
+--------+-----------+-------------+------------+-----------------------------+
| NODEID | LIST_TYPE | DB_NAME | USER_NAME | IP_RANGE |
+--------+-----------+-------------+------------+-----------------------------+
| 1 | blacklist | customer_db | user_black | anywhere |
| 1 | blacklist | customer_db | everyone | 192.168.3.107-192.168.3.120 |
| 2 | blacklist | customer_db | everyone | 192.168.3.107-192.168.3.120 |
| 3 | blacklist | customer_db | everyone | 192.168.3.107-192.168.3.120 |
+--------+-----------+-------------+------------+-----------------------------+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
删除黑名单
sql
-- 删除用户user_black从任何IP访问1号节点库customer_db的黑名单策略
SQL> ALTER CONNECT POLICY DROP DISABLE 'user_black' LOGIN 'customer_db' FROM 'anywhere' ON NODE 1;
-- 删除customer_dbt库所有黑名单策略
SQL> ALTER CONNECT POLICY DROP ALL DISABLE LOGIN 'customer_db' ON ALL NODE;
-- 删除当前节点所有黑名单策略
SQL> ALTER CONNECT POLICY DROP ALL DISABLE;
-- 删除所有节点所有黑名单策略
SQL> ALTER CONNECT POLICY DROP ALL DISABLE ON ALL NODE;
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
3.4 白名单管理
添加白名单
sql
-- 增加一个白名单,允许用户user_white从192.168.10.50至192.168.10.60这个IP地址段访问数据库monitor_db
SQL> CREATE DATABASE monitor_db;
SQL> CREATE USER user_white IDENTIFIED BY '123@';
SQL> ALTER CONNECT POLICY ADD ENABLE 'user_white' LOGIN 'monitor_db' FROM '192.168.10.50' TO '192.168.10.60' ON ALL NODE;
SQL> SELECT * FROM sys_all_black_white_list WHERE db_name = 'monitor_db';
+--------+-----------+------------+------------+-----------------------------+
| NODEID | LIST_TYPE | DB_NAME | USER_NAME | IP_RANGE |
+--------+-----------+------------+------------+-----------------------------+
| 1 | whitelist | monitor_db | user_white | 192.168.10.50-192.168.10.60 |
| 2 | whitelist | monitor_db | user_white | 192.168.10.50-192.168.10.60 |
| 3 | whitelist | monitor_db | user_white | 192.168.10.50-192.168.10.60 |
+--------+-----------+------------+------------+-----------------------------+
-- 增加一个白名单,允许用户user_white从192.168.3.105访问任意数据库
SQL> ALTER CONNECT POLICY ADD ENABLE 'user_white' LOGIN 'everydb' FROM '192.168.3.105' ON ALL NODE;
SQL> SELECT * FROM sys_all_black_white_list WHERE ip_range = '192.168.3.105';
+--------+-----------+---------+------------+---------------+
| NODEID | LIST_TYPE | DB_NAME | USER_NAME | IP_RANGE |
+--------+-----------+---------+------------+---------------+
| 1 | whitelist | everydb | user_white | 192.168.3.105 |
| 2 | whitelist | everydb | user_white | 192.168.3.105 |
| 3 | whitelist | everydb | user_white | 192.168.3.105 |
+--------+-----------+---------+------------+---------------+
-- 增加一个白名单,允许任意用户从任意IP访问2号节点的monitor_db库
SQL> ALTER CONNECT POLICY ADD ENABLE 'everyone' LOGIN 'monitor_db' FROM 'anywhere' ON NODE 2;
SQL> SELECT * FROM sys_all_black_white_list WHERE nodeid=2 AND ip_range='anywhere' and user_name='everyone' and db_name='monitor_db';
+--------+-----------+------------+-----------+----------+
| NODEID | LIST_TYPE | DB_NAME | USER_NAME | IP_RANGE |
+--------+-----------+------------+-----------+----------+
| 2 | whitelist | monitor_db | everyone | anywhere |
+--------+-----------+------------+-----------+----------+
-- 增加一个白名单,允许任意用户user_white从任意IP访问3号节点的任意库
SQL> ALTER CONNECT POLICY ADD ENABLE 'user_white' LOGIN 'everydb' FROM 'anywhere' ON NODE 3;
SQL> SELECT * FROM sys_all_black_white_list WHERE nodeid=3 AND ip_range='anywhere' and user_name='user_white';
+--------+-----------+---------+------------+----------+
| NODEID | LIST_TYPE | DB_NAME | USER_NAME | IP_RANGE |
+--------+-----------+---------+------------+----------+
| 3 | whitelist | everydb | user_white | anywhere |
+--------+-----------+---------+------------+----------+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
删除白名单
sql
-- 删除用户user_white从192.168.3.105访问monitor_db库的白名单策略
SQL> ALTER CONNECT POLICY DROP ENABLE 'user_white' LOGIN 'monitor_db' FROM '192.168.3.105' ON ALL NODE;
-- 删除用户user_white从任何IP访问任何3号节点任何库的白名单策略
SQL> ALTER CONNECT POLICY DROP ENABLE 'user_white' LOGIN 'everydb' FROM 'anywhere' ON NODE 3;
-- 删除所有用户从任何IP访问库monitor_db的白名单策略
SQL> ALTER CONNECT POLICY DROP ENABLE 'everyone' LOGIN 'monitor_db' FROM 'anywhere' ON ALL NODE;
-- 删除所有节点所有白名单策略【慎用!】
SQL> ALTER CONNECT POLICY DROP ALL ENABLE ON ALL NODE;
-- 删除所有的黑白名单策略【慎用!】
SQL> ALTER CONNECT POLICY DROP ALL ON ALL NODE;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
注意
执行增加/删除黑白名单策略的命令后,将自动在SETUP/trust.ini下同步相应的内容
如:执行命令“ALTER CONNECT POLICY ADD DISABLE 'everyone' LOGIN 'everydb' FROM '192.168.2.239' ON NODE 1;”后,1号节点的trust.ini中将自动添加“untrust everydb everyone from 192.168.2.239”,执行删除命令后,trust.ini中相应内容也会删除。
四、相关系统表
- SYS_BLACK_WHITE_LIST:记载当前节点的黑白名单策略
- SYS_ALL_BLACK_WHITE_LIST:记载所有节点的黑白名单策略
字段名 | 类型 | 说明 |
---|---|---|
NODEID | INTEGER | 节点ID |
LIST_TYPE | VARCHAR | 名单类型(whitelist/blacklist) |
DB_NAME | VARCHAR | 数据库名称 |
USER_NAME | VARCHAR | 用户名称 |
IP_RANGE | VARCHAR | IP地址范围 |
查询示例:
sql
SQL> SELECT * FROM SYS_BLACK_WHITE_LIST WHERE LIST_TYPE = 'whitelist';
+--------+-----------+---------+-----------+----------+
| NODEID | LIST_TYPE | DB_NAME | USER_NAME | IP_RANGE |
+--------+-----------+---------+-----------+----------+
| 1 | whitelist | everydb | everyone | anywhere |
+--------+-----------+---------+-----------+----------+
1
2
3
4
5
6
2
3
4
5
6