1、背景
在日常进行数据库的安全加固时,用户提出了需要对连接数据库的IP进行白名单配置,对于业务用户仅支持应用节点IP登录,对此我们提供了alter user的模板SQL对用户的网络白名单进行限制:
alter user "TEST" allow_ip "192.168.10.72" ,"192.168.10.73";
Select A.allow_addr,A.not_allow_addr,A.allow_dt,A.not_allow_dt,B.USERNAME from SYSUSERS A ,DBA_USERS B WHERE A.ID=B.USER_ID;
但是需要配置多个IP时需要将IP以逗号隔开,否则会不断刷新可连接的网络,且只保留最后一个。
2、事件
在处理该问题时,没有将用户名修改为业务用户,而是直接对SYSDBA用户进行的操作,且在IP白名单中还写错了IP地址
alter user "SYSDBA" allow_ip "192.168.100.11";
alter user "SYSDBA" allow_ip "192.168.100.12";
alter user "SYSDBA" allow_ip "192.168.100.13";
alter user "SYSDBA" allow_ip "192.168.100.14";
alter user "SYSDBA" allow_ip "192.168.100.15";
alter user "SYSDBA" allow_ip "192.168.100.16";
alter user "SYSDBA" allow_ip "192.168.100.17";
...
exit;
且用SYSDBA用户在disql执行完成后退出了以上会话。
直接导致了TEST在本地也无法登录。
总共1个语句正依次执行…
[执行语句1]:
alter user “SYSDBA” allow_ip “192.168.100.88”;
执行成功, 影响行数0, 执行耗时28毫秒. 执行号:3709
1条语句执行成功
此时在数据库服务器本地使用disql登录127.0.0.1也无法登录。
而要将网络白名单限制取消又需要dba权限对SYSDBA用户进行操作。
其他用户虽然可以正常登录但是普通用户操作SYSDBA用户时会报错:
总共1个语句正依次执行…
[执行语句1]:
alter user “SYSDBA” allow_ip null;
执行失败(语句1)
-5549: 第1 行附近出现错误:
没有修改用户权限
1条语句执行失败
3、解决
以上操作做完之后出现死循环了,有DBA权限的SYSDBA用户无法登录,而能登录的用户又无法操作修改DBA的网络白名单。
针对这种误操作的问题,现场采用的是Linux虚拟网卡绑定IP来处理,唯一的问题在于,在执行了多次alter user后无法确认允许的IP。
普通用户查询的SYSUSERS视图无法显示SYSDBA用户的网络白名单。在系统默认的用户里面,还可以用审计用户去查询。
至此我们找到了这个白名单列表的IP地址。
接下来我们使用Linux的添加虚拟IP的方式,在本地虚拟一个IP为白名单列表的IP地址。
例如我在本地的ens32这个网卡上虚拟一个IP地址出来:
[root@dsc_131 bin]$ ifconfig ens32:1 192.168.100.88 up
这里并不是都要填写ens32,取决于你这里的文件名
原理就是给服务器虚拟出来一个IP,允许本地的服务器使用这个IP,用完记得down掉
再尝试用SYSDBA用户登录
此时登录成功后,再将SYSDBA用户的网络白名单取消即可。
以下是达梦白名单的所有配置,检查,取消,和查找
1 IP访问限制
允许 IP 和禁止 IP 用于控制此登录是否可以从某个 IP 访问数据库,其中禁止 IP 优先。在设置 IP 时,设置的允许和禁止 IP 需要用双引号括起来,中间用逗号隔开,如"192.168.0.29", "192.168.0.30",也可以利用*来设置网段,如"192.168.0.*"。
1.1 设置ip白名单
alter user "AAA" allow_ip "192.168.10.72" ,"192.168.10.73";
1.2 设置ip黑名单
alter user "AAA" not_allow_ip "127.0.0.1" ;
2 时间段访问限制
允许时间段和禁止时间段用于控制此登录是否可以在某个时间段访问数据库,其中禁止时间段优先。设置的时间段中的日期和时间要分别用双引号括起来。在设置时间段时,有两种方式
2.1 具体时间段
alter user "AAA" allow_datetime "2021-09-01" "14:10:40" to "2021-09-02" "14:10:40";
2.2 规则时间段
alter user "AAA" not_allow_datetime "SAT" "00:00:00" to "SUN" "23:59:59";
3 取消限制
alter user "AAA" not_allow_ip null;
alter user "AAA" allow_ip null
alter user "AAA" allow_datetime null;
alter user "AAA" not_allow_datetime null;
4 查看所有用户访问规则,口令有效期,时间限制
Select A.allow_addr,A.not_allow_addr,A.allow_dt,A.not_allow_dt,B.USERNAME from SYSUSERS A ,DBA_USERS B WHERE A.ID=B.USER_ID;