1.3 user.xml 配置
1.3.1 整体XML结构
- managerUser (可多值,至少一个)
- shardingUser (可多值)
- rwSplitUser (可多值)
- analysisUser (可多值)
- hybridTAUser (可多值)
- blacklist(可多值)
配置注意事项:
- 当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}的结果进行配置 |
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}的结果进行配置 |
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}的结果进行配置 |
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}的结果进行配置 |
whiteIPs |
可登录的ip的白名单 |
可选项 |
可以参考本配置文件中的whiteIPs内容 |
tenant |
租户名 |
可选配置。和用户名相当于整个用户列表的联合主键 |
可以参考本配置文件中的tenant内容 |
dbGroup |
该用户对应的数据库组dbGroup |
单值配置 |
对应db.xml中的dbGroup名称; |
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必须是clickhousemaxCon
负载限制,默认不做限制
正整数
用户的连接数限制,会在用户验证登录的时候进行校验,默认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的含义。
- 解析判断
配置名称
|
描述
|
默认值
|
可选项
|
详细作用原理或应用
|
分库分表支持程度
|
读写分离支持程度
|
---|---|---|---|---|---|---|
multiStatementAllow |
是否允许一次执行多条语句 | false | true false |
sql数 >1, 值为true时,允许执行多条语句。值为false时,不允许执行多条语句。 由于dble是个中间件,在协议解析层面已经处理过多语句了,所以这个黑名单的配置在Dble下不生效。多语句开关根据应用需要驱动自行设置 |
不支持 | 不支持 |
配置名称
|
描述
|
默认值
|
可选项
|
详细作用原理或应用
|
命中黑名单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中不可用 |
配置名称
|
描述
|
默认值
|
可选项
|
详细作用原理或应用
|
命中黑名单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,所以无实际意义 |
不支持,无意义 | 不支持,无意义 |
配置名称
|
描述
|
默认值
|
可选项
|
详细作用原理或应用
|
命中黑名单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 */ | 支持 | 支持 |
配置名称
|
描述
|
默认值
|
可选项
|
详细作用原理或应用
|
命中黑名单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 */; | 支持 | 支持 |
配置名称
|
描述
|
默认值
|
可选项
|
详细作用原理或应用
|
备注
|
---|---|---|---|---|---|
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不具有使用意义,不能配置该参数 |
配置名称
|
描述
|
默认值
|
可选项
|
详细作用原理或应用
|
备注
|
---|---|---|---|---|---|
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支持两种方式的设置
用户:租户 这种方式以:分隔开用户和租户,一起作为登录的用户 如:
mysql -u用户:租户 -p -h
DriverManager.getConnection("jdbc:mysql://127.0.0.1:8066", "root2:tenant1", "123456");
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>