共计 4093 个字符,预计需要花费 11 分钟才能阅读完成。
DBLE 是基于开源项目 MyCat 发展的企业级开源分布式中间件,适用于高并发及 TB 级海量数据处理场景;江湖人送外号“MyCat Plus”;其简单稳定,持续维护,良好的社区环境和广大的群众基础使 DBLE 得到了社区的大力支持。
DBLE 项目介绍
DBLE 官方项目:https://github.com/actiontech… 如对源码有兴趣或者需要定制的功能的可以通过源码编译安装 DBLE 下载地址:https://github.com/actiontech…DBLE 官方社区交流群:669663113
DBLE 的主要配置文件
前两篇文章 ”DBLE Rule.xml 配置解析 ”、”DBLE Schema.xml 配置解析 ” 分别介绍 DBLE 中 Rule.xml 和 Schema.xml 的配置,今天继续介绍 DBLE 中 Server.xml 文件的配置,希望通过本篇的介绍,能对 Server.xml 文件的整体结构和内容有较为清晰的认识,方便大家能快速地入门。
DBLE 的配置文件都在 conf 目录里面,常用的几个配置文件如下:
DBLE 是一个 JAVA 分库分表中间件,既然是 JAVA 应用肯定会有 JVM 相关的配置,在 DBLE 中我们选择 wrapper 来作为管理 DBLE 进程的工具,配置文件在 conf/wrapper.conf 中,关于 JVM 的详细介绍在 wrapp.conf。
Server.xml 配置解析
Server.xml 是 DBLE 的重要配置文件之一,整体配置可以分为三段,<system> 段,<user> 段和 <firewall> 段,分别定义了 DBLE 软件的相关配置,用户配置和针对用户的权限控制功能。
<dble:server>
<system></system>
<user></user>
<firewall>
<whitehost></whitehost>
</firewall>
</dble:server>
关于配置文件,如果在 DBLE 运行途中修改了配置,要想配置动态生效,只需要使用 reload @@config 命令,但是需要提醒的是 reload @@config 对 Server.mxl 中的 <system> 段中的内容无法生效,即如果修改了 server.xml 的 system 的配置,需要重新启动 DBLE 使其生效,更多关于 DBLE 管理命令请参考 DBLE 管理端命令
同样以思维导图的方式归纳如下,其中个别参数配置只是粗略地将最重要的参数罗列出来,详细的参数还请参考官方文档。
system 配置
DBLE 通过 Server.xml 配置文件来定义相关管理行为,如监听端口,sql 统计和控制连接行为等功能,DBLE 除了支持分库分表功能外,还实现了类似 MySQL 的慢查询日志功能,并且支持使用 pt-query-digest 这样的工具进行慢查询 SQL 分析,极大地方便了 DBA 的 SQL 性能分析与问题 SQL 定位,以下简单列出了一些最重要的也是最基础的功能配置。
用户配置
用户配置在 <user> 段进行配置,因为在 Schema.xml 中允许多个 schema 的存在,因此业务用户也是允许多个用户同时存在,并且还可以给这些用户进行更小粒度的权限划分。
以实际场景来举例,比如当前配置了两个逻辑库 adv 和 motor, 分别是汽车和广告业务,这两个库直接没有任何的关联,因此需要分别配置两个用户来使用这两个 schema,一个是 adv_user, 另一个是 motor_user, 这两个用户登录上去 DBLE 能看到只有自己的 schema,其他 schema 不可见,两个用户的配置如下:
<user name=”adv_user”>
<property name=”password”>adv_user</property>
<property name=”schemas”>adv</property>
<property name=”readOnly”>false</property>
</user>
<user name=”motor_user”>
<property name=”password”>motor_user</property>
<property name=”schemas”>motor</property>
<property name=”readOnly”>false</property>
</user>
但是你可能会想万一这两个库之中的表有关联查询呢?对应场景是:我们需要有个用户叫 adv_motor_user, 它对 motor 和 adv 库都需要有权限访问,别担心,DBLE 提供了对单个用户可以访问多个 schema 的配置方式,我们可以在 schemas 中指定多个 schema,之间用逗号分隔,配置生效后使用这个用户就能登录看到两个 schema。
<user name=”adv_motor_user”>
<property name=”password”>adv_motor_user</property>
<property name=”schemas”>motor,adv</property> <!– 多个逻辑库之间使用逗号分隔,这些逻辑库必须在 Schema.xml 中定义 –>
<property name=”readOnly”>false</property> <!– 用来做只读用户 –>
</user>
你可能还会想,这样的权限粒度依然不够细,我们需要更细粒度的权限控制,比如需要 adv_user 的权限仅限于增删改查权限,即需要将权限细分到 dml 语句,DBLE 仍然提供这样的配置,我们可以继续增加 privileges 的配置,如下图示:
<user name=”adv_user”>
<property name=”password”>adv_user</property>
<property name=”schemas”>adv</property>
<property name=”readOnly”>false</property>
<privileges check=”true”>
<schema name=”adv” dml=”1110″ > <!– 默认库中所有逻辑表的继承权限 –>
<table name=”tb01″ dml=”1111″></table> <!– 单独指定表权限 –>
</schema>
</privileges>
</user>
privileges 的 check 参数作用于是否对用户权限进行检查,默认是不检查,dml 的权限是分别是 INSERT UPDATE SELECT DELETE 四种权限,用 4 个数字 0 或 1 的组合来表示是否开启,1 表示开启,0 表示关闭。
在上图中,adv_user 对 adv 库中所有表的默认权限是 ’1110′, 即只有 insert,update 和 select 权限,即如果没有像 tb01 那样详细地列出来的情况,所有表的权限继承权限 1110,上面例子中,ta01 作为特殊指定的逻辑表的权限,adv_user 对该表的权限是 1111。
我们可以看到 DBLE 可以将权限划分到 DML, 并且是可以精确到某一逻辑表级别,对于只需要 DML 权限的场景是足够了,但是这种权限控制还是很粗略,比如如果想让 adv_user 除了有 dml 权限之外,还需要有 drop table 权限,这时候在用 DBLE 的 privileges 权限控制就显得无能为力了,因此可行的建议是:
控制连接后端 MySQL 的用户的权限,将 DBLE 侧的权限完全放开,
换句话说只严格限制 schema.xml 的 writehost 中配置的连接用户的权限。使用后面要讲的黑名单提供的权限控制。
黑白名单配置
针对上的权限粒度略显粗略的限制 (事实上大多数场景下 DML 的权限也已经足够了),DBLE 提供黑白名单的功能,白名单就是只允许白名单的连接,而黑名单则是详细的针对已经通过白名单的连接的权限控制,黑名单更类似于 SQL 审计,黑名单配置以 firewall 分隔开来,典型配置如下:
<firewall>
<whitehost>
<host host=”127.0.0.1″ user=”adv_user”/>
<host host=”127.0.0.1″ user=”admin”/>
</whitehost>
<blacklist check=”true”>
<property name=”selelctAllow”>false</property> <!– 允许 select–>
<property name=”insertAllow”>false</property> <!– 允许 insert–>
<property name=”updateAllow”>false</property>
……
</blacklist>
</firewall>
对于黑白名单,需要注意:
DBLE 针对来源 IP 和用户名进行限制,放行白名单连接,对于不在白名单列之中的连接,统统拒绝而无法登陆。白名单中的来源 ip, 只能指定固定 IP, 暂不支持 MySQL “%” 类似的 ip 通配符。想象一种场景,需要像 MySQL 一样指定一个 ip 范围能允许连接 DBLE,这时只能一行一行增加允许 ip 了,此处略显笨拙。
如果配置了黑名单,则再根据黑名单中的权限 property 来进一步限制白名单中的用户权限,例如是否允许查询,是否允许 INSERT,是否允许 UPDATE。可以看出 DBLE 中黑名单更像是对用户的权限审计,DBLE 在黑名单中将上面只能粗糙地限制到 DML 权限的用户配置做了较多较细的扩展,这样权限粒度更小,从实际场景来说,这更符合生产需要,由此我们可以针对性地去掉一些危险的 SQL。
总结
本文简单介绍了 Server.xml 中的三个重要的配置段落,分别是 DBLE 的系统配置,用户配置以及黑白名单功能,针对用户配置则介绍了实际应用场景下的配置以及对应的 DML 权限配置,并详细介绍了 DBLE 黑白名单配置实践。
往期精选
| 社区投稿
DBLE 和 Mycat 跨分片查询结果不一致案例分析 DBLE 自定义拆分算法 DBLE rule.xml 配置解析
| 使用指南
开源分布式中间件 DBLE 快速入门指南 DBLE Schema.xml 配置解析
| 社区活动
如何获取全国 25 场 MySQL 主题大会免费入场券