gbase8s数据库实现黑白名单的几种方案

1、借用操作系统的黑白名单

2、使用数据库 TRUSTED CONTEXT 机制

sql 复制代码
CREATE TRUSTED CONTEXT tcx1
  USER root
  ATTRIBUTES (ADDRESS '172.16.39.162')
  ATTRIBUTES (ADDRESS '172.16.39.163')
  ENABLE
  WITH USE FOR wangyx WITHOUT AUTHENTICATION;

如上创建 可信任上下文对象 tcx1

在 jdbc URL中添加TRUSTED_CONTEXT=TRUE属性

实际效果为 162 与163 机器的 root 用户可以连接数据库,其他ip 或者非root用户不能连接,从 root切换成 wangyx用户时不需要输入密码

复制代码
SET SESSION AUTHORIZATION TO 'wangyx';

更多语法以及配置细节可参考gbase8s语法手册

3 利用数据库现有机制实现

sql 复制代码
create table sysmaster:gbasedbt.hostlist
(id int,ipaddr varchar(15));

insert into hostlist values(0,'node23');
insert into hostlist values(1,'172.16.39.162');

drop procedure if exists checkip;
create procedure checkip()
define a int;
define v_sessionid int;
define r_msg varchar(10);
define v_ipaddr varchar(100);
let v_sessionid=dbinfo('sessionid');
select hostname into v_ipaddr from sysmaster:sysscblst where sid=v_sessionid;
select count(1) into a from sysmaster:hostlist where ipaddr=v_ipaddr;
if a =0 THEN
execute function sysadmin:task('onmode','z',v_sessionid) into r_msg;
RAISE EXCEPTION -746,0,'connect refuse';
end if;
end procedure;

dbaccess tstnw <<!
create procedure public.sysdbopen()
call sysmaster:checkip();
end procedure;
!

1)在部分环境中由于DNS反向解析策略很有可能将实际IP解析成bogon,需要额外关注下

2)若 sysdbopen 未知异常会导致数据库无法连接,最简单的处理方案为

dbaccess sysmaster -<<!

update <dbname>:sysprocedures set procname='aaa' where procname like '%sysdbopen%';

!

重启数据库

4 某些高版本中支持在参数中直接配置黑白名单

相关推荐
科技小花2 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸2 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain2 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希2 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神2 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员3 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java3 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿3 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴3 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存
YOU OU3 小时前
三大范式和E-R图
数据库