上一期我们介绍了管理端,这一期我们来介绍一下权限和黑白名单。

功能简介

权限是对表的 DML 权限控制,包括 insert、update、select、delete 这样的权限是否允许。
黑名单是继承自 druid 的一个解析器功能,解析完 SQL 觉得不安全,可以在解析完这个层面就直接禁止掉这些不安全的操作。
白名单是我指定某个用户和 IP 才有登录的许可,否则是不能登录的。

操作演示

我们通过实例来演示一下,这三个功能实际的工作效果是什么样的。

首先随机查询一张表,那么还是拿 tb_mod 这张表做演示。现在 select 是成功的,有三行数据。然后去设置一下 DML 权限。在 USER 项下面有这样一个配置项,默认是注释起来的。它包含了 insert、update、select、delete 这样一个权限。我们把这个注释解开,看会发生什么现象。
注意:如果后端节点是大小写敏感,这里也要大小写敏感依赖于后端节点。

我们现在把 schema 级别的开关全部开启,不限制它的任何行为。但是我们把 td_mod 这个表级别变成了 1101,也就是第三项 select 权限给关掉了。配置后,我们通过 reload 热加载生效。成功以后,我们回到终端就可以看到 select 会报错。通过这种方式可以控制每张表执行权限的粒度。再把配置项删掉,删掉权限限制效果没有了。回到我的管理端口 reload 一下,然后再回到流量端口可以查了,顺便又展示了一下 reload 功能。

然后来看看黑名单。黑名单直接影响全局的行为。它配置项非常多,不像刚才的是个单表而且只有四项功能,黑名单可能有几十项。下面我们通过简单的 selectAllow 功能来展示一下。
我们把白名单的功能先注释起来,只留黑名单。请大家注意,这个 SelelctAllow 的 select 是拼错的。我猜这是 druid 故意做的这个事情。因为一般情况下禁止 select 比较奇怪,所以你一旦有了这样的选项,就说明你真的知道自己在做什么。所以我猜他是故意把这里写错的。我们把功能打开 SelectAllow 改成 false,就是我不允许 select。再 reload 一下 config,回到流量端口 select 报错,说明这是一条不安全的 SQL ,在这里被用户拒绝了。这就是黑名单功能,目前是全局生效的,所以比较暴力。
白名单的功能展示前,我先把黑名单配置删掉以后重新 reload 一遍。这样数据就可以查了,恢复到正常。我们去把白名单的注释去掉。这里面默认的白名单是允许 root 在本地登录,我们把它稍微改一下。我们把管理端用户放开,把其它的用户都关掉,这是白名单了。只有在这个列表上指定 IP 的指定用户才能去登陆。所以我们把它改成 man1,第二行我们就直接删掉了。
我们把 IP 地址指成我们刚才在运行终端的机器,这样理论上我从 10.186.61.2 这台机器只有 man1 用户才能登录,其它用户都不能登录。我们还是通过 reload config 让命令生效。从终端退出以后重新登陆就会发现登录已经被我拒绝了,但管理端用户 man1 其实还是可以登录的。它粒度能精细到 IP + 用户这样一个级别,相对来说白名单的可用性更高一些。这就是白名单功能。
今天就介绍到这里。
图文稿为了方便阅读,在不影响学习的情况下优化了一些口语化词汇,文稿与视频会尽量保持一致。

DBLE 及相关项目代码地址:

https://github.com/actiontech/dble

https://github.com/actiontech/dble-docs-cn

https://github.com/actiontech/dble-test-suite

课程咨询:

  • 「爱可生开源社区」微信公众号:ActiontechOSS

  • 「爱可生开源社区」官方技术交流群(669663113)