使用Proxysql进行权限控制
2017/11/16
posted in
ProxySQL
2017/11/16
posted in
ProxySQL
对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的控制需要在query rules做控制,通过client_addr字段来控制访问的ip,但是不能进行模糊匹配或者正则匹配。所以要做IP控制只能一个IP一个IP的添加。
由于proxysql不能进行批量匹配ip地址,所以我们可以iptables进行ip地址匹配,但是这样我们就无法对服务地址和服务使用的mysql账户关联起来进行限制了。
为此,我们可以使用mysql-interfaces参数让proxysql监听多个端口,为每一个服务分配一个端口,在query rules里通过proxy_addr和proxy_port参数来根据proxysql的端口进行路由规则的配置。
MySQL的授权语句可以对库级别和表级别进行不同权限的细化的权限管理。
需要注意的是服务器使用的用户需要在Proxysql和MySQL同时进行注册才能够正常的使用。