1.3 user.xml 配置

1.3.1 整体XML结构

  • managerUser (可多值,至少一个)
  • shardingUser (可多值)
  • rwSplitUser (可多值)
  • analysisUser (可多值)
  • hybridTAUser (可多值)
  • blacklist(可多值)

配置注意事项:

  1. 当user.xml文件中不配置shardingUser,dble不再加载sharding.xml配置文件(即dble不具备分表分库),包括集群情况下出现sharding.xml不一致,均属于已知现象。

1.3.2 managerUser(管理用户配置)

配置名称

配置内容

可选项/默认值

详细作用原理或应用

name

用户名

符合mysql用户名规范的字符串

用户唯一标识,用于登录校验

password

密码

用户密码校验

usingDecrypt

是否启用加密

可配置true/false,默认false

启用加密password项配置通过执行脚本encrypt.sh 0:{user}:{password}的结果进行配置
举例:
encrypt.sh 0:xxx:123456
fP/nl3XPXrSfWjpQzit5lIOrRU1QRXuLTYtATUG0fGW2k5kdXUhKL5zf02hE6nGjdnSWrufVkJPUZpbQ2qX9uQ==
配置项:
password fP/nl3XPXrSfWjpQzit5lIOrRU1QRXuLTYtATUG0fGW2k5kdXUhKL5zf02hE6nGjdnSWrufVkJPUZpbQ2qX9uQ==
user xxx
登录项:
-u xxx -p123456

whiteIPs

可登录的ip的白名单

可选项

可以参考本配置文件中的whiteIPs内容

readOnly

是否是只读管理用户

可配置true/false,默认false

只读用户不能进行运维管理操作,只能进行show或者select

maxCon

负载限制,默认不做限制

正整数

用户的连接数限制,会在用户验证登录的时候进行校验,默认0,表示不做限制。 特别的,管理用户不受系统级别的maxCon的限制

1.3.3 shardingUser(分库用户配置)

配置名称

配置内容

可选项/默认值

详细作用原理或应用

name

用户名

符合mysql用户名规范的字符串

用户唯一标识,用于登录校验

password

密码

用户密码校验

usingDecrypt

是否启用加密

可配置true/false,默认false

启用加密password项配置通过执行脚本encrypt.sh 0:{user}:{password}的结果进行配置
举例:
encrypt.sh 0:xxx:123456
fP/nl3XPXrSfWjpQzit5lIOrRU1QRXuLTYtATUG0fGW2k5kdXUhKL5zf02hE6nGjdnSWrufVkJPUZpbQ2qX9uQ==
配置项:
password fP/nl3XPXrSfWjpQzit5lIOrRU1QRXuLTYtATUG0fGW2k5kdXUhKL5zf02hE6nGjdnSWrufVkJPUZpbQ2qX9uQ==
user xxx
登录项:
-u xxx -p123456

whiteIPs

可登录的ip的白名单

可选项

可以参考本配置文件中的whiteIPs内容

readOnly

是否是只读分库用户

可配置true/false,默认false

只读用户不能进行DML操作,只能进行show或者select

tenant

租户名

可选配置。和用户名相当于整个用户列表的联合主键

可以参考本配置文件中的tenant内容

schemas

该用户可以访问的schema列表

可配置多值,用逗号隔开

该用户可以访问的schema列表,schema参见sharding.xml中的schma名称

maxCon

负载限制,默认不做限制

正整数

用户的连接数限制,会在用户验证登录的时候进行校验,默认0,表示不做限制。 特别的,当系统级别的maxCon已经到达上限之后,本用户的maxCon会失效,不能新建连接

blacklist

blacklist的名称

可选配置

可以参考本配置文件中的blacklist内容

privileges

子元素,具体table的增删改查权限

可选配置

可以参考本配置文件中的privileges内容

1.3.3.1 user.privileges.schema

user.privileges 下的schema的dml权限,可配置多值


配置名称



配置内容



可选项/默认值



详细作用原理或应用



name



schema名称



用以标识对应schema



dml



dml权限



0000



权限判断,每一位分别表示INSERT UPDATE SELECT DELETE四种权限


1- 拥有权限 0-没有权限 例如拥有所有权限为1111


table


子元素


可配置多个



如果没有配置,则table继承schema的权限


1.3.3.2 user.privileges.schema.table


配置名称



配置内容



可选项/默认值



详细作用原理或应用



name



表格名称





在权限判断的时候作为key值



dml



dml权限



0000



权限判断,每一位分别表示INSERT UPDATE SELECT DELETE四种权限


1- 拥有权限 0-没有权限 例如拥有所有权限为1111

1.3.4 rwSplitUser(读写用户配置)

配置名称

配置内容

可选项/默认值

详细作用原理或应用

name

用户名

符合mysql用户名规范的字符串

用户唯一标识,用于登录校验

password

密码

用户密码校验

usingDecrypt

是否启用加密

可配置true/false,默认false

启用加密password项配置通过执行脚本encrypt.sh 0:{user}:{password}的结果进行配置
举例:
encrypt.sh 0:xxx:123456
fP/nl3XPXrSfWjpQzit5lIOrRU1QRXuLTYtATUG0fGW2k5kdXUhKL5zf02hE6nGjdnSWrufVkJPUZpbQ2qX9uQ==
配置项:
password fP/nl3XPXrSfWjpQzit5lIOrRU1QRXuLTYtATUG0fGW2k5kdXUhKL5zf02hE6nGjdnSWrufVkJPUZpbQ2qX9uQ==
user xxx
登录项:
-u xxx -p123456

whiteIPs

可登录的ip的白名单

可选项

可以参考本配置文件中的whiteIPs内容

tenant

租户名

可选配置。和用户名相当于整个用户列表的联合主键

可以参考本配置文件中的tenant内容

dbGroup

该用户对应的数据库组dbGroup

单值配置

对应db.xml中的dbGroup名称

maxCon

负载限制,默认不做限制

正整数

用户的连接数限制,会在用户验证登录的时候进行校验,默认0,表示不做限制。 特别的,当系统级别的maxCon已经到达上限之后,本用户的maxCon会失效,不能新建连接

blacklist

blacklist的名称

可选配置

可以参考本配置文件中的blacklist内容

1.3.5 analysisUser(分析用户配置)

配置名称

配置内容

可选项/默认值

详细作用原理或应用

name

用户名

符合分析数据库用户名规范的字符串(目前支持clickhouse)

用户唯一标识,用于登录校验

password

密码

用户密码校验

usingDecrypt

是否启用加密

可配置true/false,默认false

启用加密password项配置通过执行脚本encrypt.sh 0:{user}:{password}的结果进行配置
举例:
encrypt.sh 0:xxx:123456
fP/nl3XPXrSfWjpQzit5lIOrRU1QRXuLTYtATUG0fGW2k5kdXUhKL5zf02hE6nGjdnSWrufVkJPUZpbQ2qX9uQ==
配置项:
password fP/nl3XPXrSfWjpQzit5lIOrRU1QRXuLTYtATUG0fGW2k5kdXUhKL5zf02hE6nGjdnSWrufVkJPUZpbQ2qX9uQ==
user xxx
登录项:
-u xxx -p123456

whiteIPs

可登录的ip的白名单

可选项

可以参考本配置文件中的whiteIPs内容

tenant

租户名

可选配置。和用户名相当于整个用户列表的联合主键

可以参考本配置文件中的tenant内容

dbGroup

该用户对应的数据库组dbGroup

单值配置

对应db.xml中的dbGroup名称;
注意:这里的dbGroup可以与hybridTAUser的apNode共用同一个

maxCon

负载限制,默认不做限制

正整数

用户的连接数限制,会在用户验证登录的时候进行校验,默认0,表示不做限制。 特别的,当系统级别的maxCon已经到达上限之后,本用户的maxCon会失效,不能新建连接

blacklist

blacklist的名称

可选配置

可以参考本配置文件中的blacklist内容

1.3.6 hybridTAUser(HTAP用户配置)

  • 可参考 HTAP 快速上手指南

    配置名称

    配置内容

    可选项/默认值

    详细作用原理或应用

    name

    用户名

    符合mysql用户名规范的字符串

    用户唯一标识,用于登录校验

    password

    密码

    用户密码校验

    usingDecrypt

    是否启用加密

    可配置true/false,默认false

    启用加密password项配置通过执行脚本encrypt.sh 0:{user}:{password}的结果进行配置
    举例:
    encrypt.sh 0:xxx:123456
    fP/nl3XPXrSfWjpQzit5lIOrRU1QRXuLTYtATUG0fGW2k5kdXUhKL5zf02hE6nGjdnSWrufVkJPUZpbQ2qX9uQ==
    配置项:
    password fP/nl3XPXrSfWjpQzit5lIOrRU1QRXuLTYtATUG0fGW2k5kdXUhKL5zf02hE6nGjdnSWrufVkJPUZpbQ2qX9uQ==
    user xxx
    登录项:
    -u xxx -p123456

    whiteIPs

    可登录的ip的白名单

    可选项

    可以参考本配置文件中的whiteIPs内容

    readOnly

    是否是只读分库用户

    可配置true/false,默认false

    只读用户不能进行DML操作,只能进行show或者select

    tenant

    租户名

    可选配置。和用户名相当于整个用户列表的联合主键

    可以参考本配置文件中的tenant内容

    schemas

    该用户可以访问的schema列表

    可配置多值,用逗号隔开

    该用户可以访问的schema列表,schema参见sharding.xml中的schma名称
    注意:对应的dbGroup的databaseType必须是clickhouse

    maxCon

    负载限制,默认不做限制

    正整数

    用户的连接数限制,会在用户验证登录的时候进行校验,默认0,表示不做限制。 特别的,当系统级别的maxCon已经到达上限之后,本用户的maxCon会失效,不能新建连接

    blacklist

    blacklist的名称

    可选配置

    可以参考本配置文件中的blacklist内容

    privileges

    子元素,具体table的增删改查权限

    可选配置

    可以参考本配置文件中的privileges内容

1.3.7 blacklist(黑名单配置)

配置名称 配置内容 配置范围/可选项 详细作用原理或应用
name blacklist的名称

用于被用户引用,标记黑名单

property 子元素,可以有多个 详细的黑名单校验规则 如果开启黑名单校验具体的校验规则将有 所有property来确定

1.3.7.1 blacklist.property(详细的黑名单配置)

形式为

<property name="selectHavingAlwayTrueCheck">true</property>

下面表格来描述key和value的含义。

  • 解析判断
useAllow
配置名称
描述
默认值
可选项
详细作用原理或应用
分库分表支持程度
读写分离支持程度
multiStatementAllow
是否允许一次执行多条语句 false

true

false

sql数 >1, 值为true时,允许执行多条语句。值为false时,不允许执行多条语句。 由于dble是个中间件,在协议解析层面已经处理过多语句了,所以这个黑名单的配置在Dble下不生效。多语句开关根据应用需要驱动自行设置

不支持 不支持
- sql类型判断
配置名称
描述
默认值
可选项
详细作用原理或应用
命中黑名单sql样例
分库分表支持程度
读写分离支持程度
insertAllow
是否允许执行INSERT语句 true

true

false

值为true时,允许执行INSERT语句。值为false时,不允许执行INSERT语句

insert into t1 valut1 values(4,5); 支持 支持
deleteAllow
是否允许执行DELETE语句 true

true

false

值为true时,允许执行DELETE语句。值为false时,不允许执行DELETE语句

delete from t1; 支持 支持
updateAllow
是否允许执行UPDATE语句 true

true

false

值为true时,允许执行UPDATE语句。值为false时,不允许执行UPDATE语句

update t1 set id = 1 where id =10; 支持 支持
mergeAllow
是否允许执行merge语句 true

true

false

值为true时,允许允许执行merge语句。值为false时,不允许允许执行merge语句

insert into t1 valut1 values(4,5); mysql不支持该语法,无意义 mysql不支持该语法,无意义
callAllow
是否允许执行call语句 true

true

false

值为true时,允许执行call语句。值为false时,不允许执行call语句

call proc_arc(1);

支持,分库分表的存储过程默认需要带hint ,详见 https://actiontech.github.io/dble-docs-cn/3.SQL_Syntax/3.6_procedure_support.html

支持
truncateAllow
是否允许执行Truncate语句 true

true

false

值为true时,允许执行Truncate语句。值为false时,不允许执行Truncate语句

truncate table t1; 支持 支持
createTableAllow
是否允许创建表 true

true

false

值为true时,允许创建表。值为false时,不允许创建表

create table t1(id int, age int); 支持 支持
renameTableAllow
是否允许执行Rename语句 true

true

false

值为true时,允许执行Rename语句。值为false时,不允许执行Rename语句

rename table t1 to t4; 不支持 支持
alterTableAllow
是否允许执行Alter Table语句 true

true

false

注意:类似ALTER TABLE t1 RENAME t6 的sql会被替换成renam t1 to t6,属于RenameTableAllow控制 值为true时,允许执行Alter Table语句。值为false时,不允许执行Alter Table语句

alter table t1 add d timestamp; 支持 支持
dropTableAllow
是否允许执行DropTable语句 true

true

false

值为true时,允许执行DropTable语句。值为false时,不允许执行DropTable语句

drop table t1; 支持 支持
setAllow
是否允许执行Set语句 true

true

false

值为true时,允许执行Set语句。值为false时,不允许执行Set语句

set @name = 1; 支持 支持
replaceAllow
是否允许执行Replace语句 true

true

false

值为true时,允许执行Replace语句。值为false时,不允许执行执行Replace语句

replace into t1 values (1, 1); 支持 支持
describeAllow
是否允许执行describe语句 true

true

false

值为true时,允许执行describe语句。值为false时,不允许执行describe语句

describe t1 id; 支持 支持
showAllow
是否允许执行show语句 true

true

false

值为true时,允许执行show语句。值为false时,不允许执行show语句

show columns from t1; 支持 支持
commitAllow
是否允许执行Commit语句 true

true

false

值为true时,允许执行Commit语句。值为false时,不允许执行Commit语句

commit; 支持 支持
rollbackAllow
是否允许执行Rollback语句 true

true

false

值为true时,允许执行Rollback语句。值为false时,不允许执行Rollback语句

rollback; 支持 支持
useAllow
是否允许执行Use语句 true

true

false

值为true时,允许执行Use语句。值为false时,不允许执行Use语句

use db1; 支持 支持
hintAllow
是否允许执行Hint语句 true

true

false

值为true时,允许执行Hint语句。值为false时,不允许执行Hint语句

select * from t1/*!TEMPORARY */; 支持 支持
lockTableAllow
是否允许执行LockTable语句 true

true

false

值为true时,允许执行LockTable语句。值为false时,不允许执行LockTable语句

lock table t1 write; 支持 支持
startTransactionAllow
是否允许执行StartTransaction语句 true

true

false

值为true时,允许执行StartTransaction语句。值为false时,不允许执行StartTransaction语句

start transaction; 支持 支持
blockAllow
是否允许语句块 true

true

false

值为true时,允许执行LockTable语句。值为false时,不允许执行LockTable语句

begin select * from t1 where id=1end; 支持 支持
noneBaseStatementAllow
是否允许非以上基本语句的其他语句,通过这个选项就能够屏蔽DDL false

true

false

值为true时,不允许以上基本语句的其他语句。值为false时,允许执行以上基本语句的其他语句

支持 支持
  • sql组成元素判断
    说明:组成元素用expr代替 ,另外未做特殊声明如果判断条件中有多个条件默认为并列都需要满足 除非对以下内容有足够深的了解,否则不建议使用,保持默认值即可

1.常规设置

配置名称
描述
默认值
可选项
详细作用原理或应用
命中黑名单sql样例
分库分表支持程度
读写分离支持程度
mustParameterized
含有where条件时,是否必须参数化 false

true

false

如果为True,则不允许类似WHERE ID = 1这种不参数化的SQL

例如

1.select * from t1 inner join t3 on t1.id = 1; 没有where条件,不受规则控制

值为true时,不允许不参数化的SQL 。值为false时,允许不参数化的SQL

select * from t1 where t1.id =1; 支持 支持
constArithmeticAllow
拦截常量运算的条件 true

true

false

值为true时,允许执行常量运算的条件。值为false时,不允许执行常量运算的条件

select * from t1 where 1>1;

select * from t1 where id = 3-1;

select * from t1 where true & false;

支持 支持
limitZeroAllow
是否允许limit 0这样的语句 false

true

false

值为true时,允许执行limit 0这样的语句。值为false时,不允许执行limit 0这样的语句

select * from t1 limit 0; 支持 支持
selectAllow
是否允许执行SELECT语句 true

true

false

值为true时,允许执行SELECT语句。值为false时,不允许执行SELECT语句 (与使用方面无关的tips:这个判断正常应该放在sql类型判断的代码逻辑中,druid把它放在了sql组成元素判断)

select id from t1; 支持 支持
selectAllColumnAllow
是否允许查询所有列 true

true

false

需要满足以下条件

1.expr 属于SQLAllColumnExpr类型

2.expr所在的sql是select类型

3.所在sql的from中的表为普通单表

4.不带有别名(x.*)

举例:

1.select t.* from t1 t; 不属于SQLAllColumnExpr类型,所以不符合该规则,不受黑名单控制

2.select * from t1,t3; from后面的表是一个结果集,所以不符合该规则,不受黑名单控制

3.select * from t1 inner join t3; from后面的表是一个结果集,所以不符合该规则,不受黑名单控制

值为true时,允许查询所有列。值为false时,不允许查询所有列

select * from t1; 支持 支持
commentAllow
是否允许语句中存在注释 false

true

false

值为true时,允许语句中存在注释。值为false时,不允许语句中存在注释

select * from t1 where id =1 or 1=1 /*dble:sql=select 1 from account */; 支持 支持
conditionOpXorAllow
查询条件(where或having)中是否允许有XOR条件 false

true

false

特例:

select * from t1 inner join t3 on t1.id =(1 xor 1); 没有where 或者having,不受规则控制

值为true时,允许查询条件(where或having)中有XOR条件。值为false时,不允许查询条件(where或having)中有XOR条件

select * from t1 where id = (1 xor 1); select * from t1 having id = (1 xor 1); 支持 支持
conditionOpBitwseAllow
查询条件中是否允许有"&"、"~"、"|"、"^"运算符 true

true

false

值为true时,允许查询条件中是否允许有"&"、"~"、"|"、"^"运算符。值为false时,不允许查询条件中是否允许有"&"、"~"、"|"、"^"运算符

select * from t1 where id = (1 & 1);

select * from t1 where id = (1 & select id from t1 limit1);

select * from t1 where id = (1 ^ 1);

select * from t1 where id = (1 ~ 1);

select * from t1 where id = (1 | 1);

支持 支持
conditionDoubleConstAllow
查询条件中是否允许连续两个常量运算表达式 false

true

false

必须是and两侧表达式为恒真或者恒假的表达式

举例:

select *from t1 where 3=1 or 3=3; 不是在and两侧,不受规则控制

值为true时,允许连续两个常量运算表达式。值为false时,不允许连续两个常量运算表达式

select *from t1 where 3=1 and 3=3;

select *from t1 where 3=1 or (1=1 and 3=3);

select *from t1 where 3=1 and (1=1 and 3=3);

select * from t3 where 1=1 and k like '%';(需要开启conditionLikeTrueAllow 为false)

select * from t3 where 1=1 and 1= (select count(*) from t1 limit1);

select * from t3 where 2=1 and true = true;

select * from t3 where id =1 and true = true or id =1 or(1=1 and id =2);

支持 支持
deleteWhereNoneCheck
检查DELETE语句是否无where条件 false

true

false

需满足以下条件

1.sql没有where条件

2.没有using

3.from 的表为普通单表

举例:

delete from t1 using t1 inner join t2; 使用using,导致条件不满足,所以不符合该规则,不受黑名单控制

delete t1,t2 from t1 left join t2 on t1.id=t2.id; from 的表是一个结果集,所以不符合该规则,不受黑名单控制

值为true时,不允许语句中无where条件。值为false时,允许语句中无where条件

delete from t1;

delete t1 from t1 left join t2 on t1.id=t2.id;

支持 支持
updateWhereNoneCheck
检查UPDATE语句是否无where条件 false

true

false

需满足以下条件

1.没有limit

举例:

1.update t1 set idd =1 limit 1;有limit条件,所以不符合该规则,不受黑名单控制

值为true时,不允许语句无where条件。值为false时,允许语句中无where条件

update t1 set idd =1 ; 支持 支持
conditionAndAlwayFalseAllow
检查查询条件(WHERE/HAVING子句)中是否包含AND永假条件 false

true

false

值为true时,允许语句中查询条件(WHERE/HAVING子句)中包含AND永假条件。值为false时,不允许语句中查询条件(WHERE/HAVING子句)中包含AND永假条件

select * from t1 where id = 567 and 2 = 1;

select * from t1 having id =1 and 2=1;

支持 支持
conditionAndAlwayTrueAllow
检查查询条件(WHERE/HAVING子句)中是否包含AND永真条件 false

true

false

实际条件如果稍微复杂,可能就判断不出来了,例如:

update t1 set id = 1 where 1=1 and (1 =1 or id =2) ;

select * from t1 having id =1 and (1 =1 or id =2) ;

值为true时,允许语句中查询条件(WHERE/HAVING子句)中包含AND永真条件。值为false时,不允许语句中查询条件(WHERE/HAVING子句)中包含AND永真条件

select * from t1 where id = 567 and 1 = 1;

update t1 set id = 1 where 1=1 and 1=1;

select * from t3 where id = 567 and k like ‘%’;

select * from t1 having id =1 and 1=1;

支持 支持
conditionLikeTrueAllow
检查查询条件(WHERE/HAVING子句)中是否包含LIKE永真条件 true

true

false

单独使用并不会拦截。 conditionLikeTrueAllow为false的时候才会把like ‘%’当成永真条件配合其他参数(比如conditionAndAlwayTrueAllow)使用 值为true时,语句中查询条件(WHERE/HAVING子句)中包含LIKE永真条件,不判断为永真条件。值为false时,语句中查询条件(WHERE/HAVING子句)中包含LIKE永真条件,判断为永真条件

select * from t3 where id = 5 and k like '%';

select * from t1 having id =1 and k like '%';

支持 支持
selectLimit
配置最大返回行数 -1

-1 不设置

配置最大返回行数,如果select语句没有指定最大返回行数,会自动修改selct添加返回限制

不支持,dble中不可用 不支持,dble中不可用
2.select into 参数
配置名称
描述
默认值
可选项
详细作用原理或应用
命中黑名单sql样例
分库分表支持程度
读写分离支持程度
selectIntoAllow
SELECT查询中是否允许INTO语句 true

true

false

值为true时,允许select into语句。值为false时,不允许select into语句

select * into @myvar from t1;

select * from t1 into @myvar for update;

select id, data into @x, @y from test.t1 limit 1;

不支持 支持
selectIntoOutfileAllow
当outfile子句不是最外层的sql时,SELECT ... INTO OUTFILE 是否允许 false

true

false

满足outfile子句不是最外层的sql时, 值为true时,允许SELECT ... INTO OUTFILE语句。值为false时,不允许SELECT ... INTO OUTFILE语句

select * from t1 where id in(select id into outfile '/exportdata/customers.txt' fields terminated by ',' optionally enclosed by '"' lines terminated by '\n' from t1);

这个sql并不符合sql语法,是基于druid逻辑构造出来的sql,所以无实际意义

不支持,无意义 不支持,无意义
3.AlwayTrue条件(规则复杂,理论上都可以使用,但规则有点奇葩,一般来说,无论开关都无影响,建议保持默认值)
配置名称
描述
默认值
可选项
详细作用原理或应用
命中黑名单sql样例
分库分表支持程度
读写分离支持程度
selectWhereAlwayTrueCheck
检查SELECT语句的WHERE子句是否为一个AlwayTrue条件 true

true

false

AlwayTrue条件规则复杂 :

1.where条件存在恒真

2.sql以注释结尾

3.条件部分不是简单SQL(单个条件、含有简单数值对等或大小比较、直接是真假值的表达式等)

比如update t1 set idd =1 where id = id 是恒真,但不命中条件2和3

值为true时,不允许满足以上条件的sql执行。值为false时,允许满足以上条件的sql执行

select id from t1 where id =1 union select 1 /*!dble:sql=select 1 from account */; 支持 支持
selectHavingAlwayTrueCheck
检查SELECT语句的HAVING子句是否为一个AlwayTrue条件 true

true

false

AlwayTrue条件含义详见selectWhereAlwayTrueCheck

值为true时,不允许满足以上条件的sql执行。值为false时,允许满足以上条件的sql执行

select * from t1 having id = 1 or 1=1 /*!dble:sql=select 1 from account */; 支持 支持
deleteWhereAlwayTrueCheck
检查DELETE语句的WHERE子句是否为一个AlwayTrue条件 true

true

false

AlwayTrue条件含义详见selectWhereAlwayTrueCheck

值为true时,不允许满足以上条件的sql执行。值为false时,允许满足以上条件的sql执行

delete from t1 where id = 1 or 1=1 /*!dble:sql=select 1 from account */; 支持 支持
updateWhereAlayTrueCheck
检查UPDATE语句的WHERE子句是否为一个AlwayTrue条件 true

true

false

AlwayTrue条件含义详见selectWhereAlwayTrueCheck

值为true时,不允许满足以上条件的sql执行。值为false时,允许满足以上条件的sql执行

update t1 set idd =1 where id = id or 1=1 /*!dble:sql=select 1 from account */ 支持 支持
4.复杂规则设置(规则复杂,理论上都可以使用,但规则有点奇葩,一般来说,无论开关都无影响,建议保持默认值)
配置名称
描述
默认值
可选项
详细作用原理或应用
命中黑名单sql样例
分库分表支持程度
读写分离支持程度
caseConditionConstAllow
是否允许复杂查询中外部是一个常量 false

true

false

具体条件如下

1.子查询是简单case类型select语句

2.子查询外部是常量

值为true时,允许子查询外部对应的是常量。值为false时,子查询外部对应的是常量那么就在SQL检查的时候抛出异常

select id from t1 where id =1 union select 1 /*!dble:sql=select 1 from account */; 支持 支持
selectUnionCheck
是否进行union check true

true

false

检测SELECT UNION,具体条件如下

1.left sql需包含from条件

2.left sql有where条件

3.right sql 没有from条件

4.操作符为UNION 或者UNION ALL 或者UNION DISTINCT

5.sql结尾有注释

值为true时,不允许UNION语句。值为false时,允许UNION语句

select id from t1 where id =1 union select 1 /*!dble:sql=select 1 from account */; 支持 支持
5.禁用对象检测配置 functionCheck
配置名称
描述
默认值
可选项
详细作用原理或应用
备注
tableCheck
检测是否使用了禁用的表 true

true

false

这个需要配合drui的配置模式使用,在dble此功能无法被使用

druid使用,dble不具有使用意义
functionCheck
检测是否使用了禁用的函数 true

true

false

这个需要配合drui的配置模式使用,在dble此功能无法被使用

druid使用,dble不具有使用意义
objectCheck
检测是否使用了“禁用对象” true

true

false

这个需要配合drui的配置模式使用,在dble此功能无法被使用

druid使用,dble不具有使用意义
variantCheck
检测是否使用了“禁用的变量” true

true

false

这个需要配合drui的配置模式使用,在dble此功能无法被使用

druid使用,dble不具有使用意义
readOnlyTables
指定的表只读,不能够在SELECT INTO、DELETE、UPDATE、INSERT、MERGE中作为"被修改表"出现

需要指定表

指定的表只读后,在SELECT INTO、DELETE、UPDATE、INSERT、MERGE语句中出现会抛出异常返回错误信息

druid使用,dble不具有使用意义,不能配置该参数
schemaCheck
检测是否使用了禁用的Schema true

true

false

这个需要配合drui的配置模式使用,在dble此功能无法被使用

druid使用,dble不具有使用意义,不能配置该参数
6.其他规则设置
配置名称
描述
默认值
可选项
详细作用原理或应用
备注
selectMinusCheck
检测SELECT MINUS true

true

false

值为true时,允许SELECT MINUS语句。值为false时,不允许SELECT MINUS语句

mysql不支持该语法,不具备使用意义
selectExceptCheck
检测SELECT EXCEPT true

true

false

值为true时,允许except语句。值为false时,不允许except语句

mysql不支持该语法,不具备使用意义
selectIntersectCheck
检测SELECT INTERSECT true

true

false

值为true是,不允许INTERSECT语句,值为false时,允许INTERSECT语句

mysql不支持该语法,不具备使用意义
strictSyntaxCheck
是否进行严格的语法检测 true

true

false

Druid SQL Parser在某些场景不能覆盖所有的SQL语法,出现解析SQL出错。 属于调试级别的参数,在正常的使用中不建议更改

druid开发者功能,不具备使用意义,保持默认值即可
minusAllow
是否允许SELECT * FROM A MINUS SELECT * FROM B这样的语句 true

true

false

值为true时,允许MINUS语句。值为false时,不允许MINUS语句

mysql不支持该语法,不具备使用意义
intersectAllow
是否允许SELECT * FROM A INTERSECT SELECT * FROM B这样的语句 true

true

false

值为true时,允许intersect语句。值为false时,不允许intersect语句

mysql不支持该语法,不具备使用意义
completeInsertValuesCheck
在dble依赖的1.0.31、1.2.6版本中没有效果 false

true

false

druid内部函数调用值,不建议修改

druid使用,dble不具有使用意义
doPrivilegedAllow
druid内部权限控制使用 false

true

false

druid内部函数调用flag,不建议修改

druid使用,dble不具有使用意义
wrapAllow
是否允许调用Connection/Statement/ResultSet的isWrapFor和unwrap方法 true

true

false

druid内部函数调用flag

druid连接池功能,dble不具有使用意义
metadataAllow
是否允许调用Connection.getMetadata方法 true

true

false

druid内部函数调用flag

druid连接池功能,dble不具有使用意义

1.3.8 tenant(租户配置)

dble支持两种方式的设置

  1. 用户:租户 这种方式以:分隔开用户和租户,一起作为登录的用户 如:

    mysql -u用户:租户 -p -h
    
    DriverManager.getConnection("jdbc:mysql://127.0.0.1:8066", "root2:tenant1", "123456");
    
  2. JDBC-connectionAttributes 在connectionAttributes中添加tenant指定租户名称 如:

    DriverManager.getConnection("jdbc:mysql://127.0.0.1:8066?connectionAttributes=tenant:tenant1", "root2", "123456");
    

以上两种方式中,若同时设置了1/2两种方式,则采用方式1的配置

1.3.9 whiteIPs(IP白名单)

默认不限制,值为IP,多个用逗号隔开

格式:

支持用户输入多ip,如192.168.1.2,192.168.2.22
支持用户输入IP段,如192.168.1.10-192.168.1.100
支持用户输入通配符,如192.168.1.%
支持用户输入IP/CIDR格式,如192.168.1.1/20

以上格式同样适合IPV4/IPV6

注:

  • 管理员用户一旦配置该项,默认允许本机(127.0.0.1、0:0:0:0:0:0:0:1)登陆
  • IPV6格式中不支持IPv4映射

1.3.10 完整例子

<?xml version="1.0" encoding="UTF-8"?>
<dble:user xmlns:dble="http://dble.cloud/">
    <managerUser name="man1" password="654321" whiteIPs="127.0.0.1,0:0:0:0:0:0:0:1" readOnly="false"/>
    <managerUser name="user" usingDecrypt="true" readOnly="true" password="AqEkFEuIFAX6g2TJQnp4cJ2r7Yc0Z4/KBsZqKhT8qSz18Aj91e8lxO49BKQElC6OFfW4c38pCYa8QGFTub7pnw==" />

    <shardingUser name="root" password="123456" schemas="testdb" readOnly="false" blacklist="blacklist1" maxCon="20"/>
    <shardingUser name="root2" password="123456" schemas="testdb,testdb2" maxCon="20" tenant="tenant1">
        <privileges check="true">
            <schema name="testdb" dml="0110">
                <table name="tb01" dml="0000"/>
                <table name="tb02" dml="1111"/>
            </schema>
        </privileges>
    </shardingUser>
    <!--rwSplitUser not work for now-->
    <rwSplitUser name="rwsu1" password="123456" dbGroup="dbGroup1" blacklist="blacklist1"
                 maxCon="20"/>

    <analysisUser name="analysisUser" password="123456" dbGroup="dbGroup3" maxCon="20"/>

    <hybridTAUser name="hysu1" password="111111" schemas="testdb3" maxCon="20"/>
    <hybridTAUser name="hysu2" password="111111" schemas="testdb3" maxCon="20" blacklist="blacklist1" tenant="tenant2">
        <privileges check="true">
            <schema name="testdb3" dml="0110">
                <table name="tb_global1" dml="0000"/>
                <table name="tb_global2" dml="1111"/>
            </schema>
        </privileges>
    </hybridTAUser>

    <blacklist name="blacklist1">
        <property name="selectAllow">true</property>
    </blacklist>
</dble:user>

results matching ""

    No results matching ""