使用Proxysql进行权限控制

2017/11/16 posted in  ProxySQL
Tags: 

对MySQL进行权限控制可以更好的维护数据库的高可用,也可以更方便的定位问题。

权限控制可以分为两层,一层是向外对IP做控制,一层是向内对库表做控制。

当我们使用Proxysql中间件以后,由于数据库的IP入口只有Proxysql服务了,所以我们只能够通过Proxysql来对外部的服务IP做控制。

而对内的库表权限控制,Proxysql目前还不支持,所以只能通过MySQL原生的权限管理来实现。

P.S.:在Proxysql管理端口下的mysql_users表中,有 backend 和 frontend 字段。Proxysql的官方文档的解释是,Proxysql将会从 backend 和 frontend 两个层面来支持user的权限控制,即从client到proxysql和从proxysql到mysql两个阶段来分别控制user的权限。到时候我们就可以将不同的frontend账户路由到同一个backend账户,或者反之。但是目前该功能还没实现。

通过Proxysql对IP访问权限控制:

Proxysql对IP的控制需要在query rules做控制,通过client_addr字段来控制访问的ip,但是不能进行模糊匹配或者正则匹配。所以要做IP控制只能一个IP一个IP的添加。

通过Proxysql和iptables对IP访问权限控制:

由于proxysql不能进行批量匹配ip地址,所以我们可以iptables进行ip地址匹配,但是这样我们就无法对服务地址和服务使用的mysql账户关联起来进行限制了。

为此,我们可以使用mysql-interfaces参数让proxysql监听多个端口,为每一个服务分配一个端口,在query rules里通过proxy_addr和proxy_port参数来根据proxysql的端口进行路由规则的配置。

通过MySQL对库表进行权限管理:

MySQL的授权语句可以对库级别和表级别进行不同权限的细化的权限管理。

需要注意的是服务器使用的用户需要在Proxysql和MySQL同时进行注册才能够正常的使用。