业务ip访问白名单
在UDB主从节点前,增加了读写分离中间件后, UDB看到的客户端Ip是中间件的Ip, 而不是业务真实ip。 因此, MySQL根据用户名+访问ip来做权限管理的功能, 便不再可用。 为了解决这一问题, UDB读写分离中间件提供业务ip访问白名单机制。该机制具备两个功能:
1、业务ip访问白名单: 在该白名单中的业务ip,才能登录到中间件,否则拒绝登录。
2、业务操作白名单:业务Ip登录后,发起的操作将被中间件进行鉴别。 如果该操作在操作白名单中,则中间件予以通过;否则将被拒绝。
业务ip访问白名单, 和业务操作白名单,均可通过4条自定义SQL进行配置。同时为了减少用户学习成本,
这4条自定义SQL的语法,和MySQL用户权限管理语句:createuser、grant、revoke、drop user
高度相似。
举例:
假如用户需要创建一个名为“robert”的账号, 并只允许该账号在“10.10.1.%”网段, 和“10.10.2.%”网段的UHost,访问数据库。 而且, robert 在10.10.1.%网段发起访问时, 只具备select权限,但不具备其他权限(比如create table、insert等);robert 在10.10.2.%网段发起访问时, 除了不具备create 库表的权限,具备所有其他权限,而且能够授权给其他用户。
为了实现这个权限配置,可以采用以下做法:
1、 登录读写分离中间件(使用高权限用户,比如root)
2、创建mysql用户:
使用标准的create user、grant命令, 到主udb节点(可直连或者通过读写分离中间件)去创建用户。其中, 用户ip必须为%create user ‘robert’@’%’ identified by ‘123qwe’;grant all privileges on test.* to ‘robert’@’%’; 注: udb等云数据库, 均不可对整个实例(.)进行授权, 而只能以库或表为单位进行授权
创建成功后, 可以使用该用户名(robert), 在任意uhost上, 登录读写分离中间件。
1、使用ucreate user命令, 创建ip访问白名单:
ucreate user 'robert'@'10.10.1.%';
该命令执行后, 允许10.10.1.%网段的robert账号登录中间件, 其他ip禁止。 但登录后, 权限只有show databases 和 show processlist,暂无其他权限。
2、使用ugrant 、urevoke等命令,配置ip操作权限白名单。比如:ugrant select to 'robert'@'10.10.1.%'
; 注: 和标准grant命令不同的是, ugrant省略了 指定授权对象(on .) 这个语法,
ugrant的授权对象,直接继承自grant 执行该命令, 为 ‘robert’@‘10.10.1.%’ 用户开通 select 权限
如果要为10.10.2.%上的roert账号, 开通除create table之外的其他权限,可以这样做:ugrant all privileges to 'robert'@'10.10.2.%' with grant option;urevoke create from 'robert'@'10.10.2.%'
; 执行该命令, 允许 ‘robert’@‘10.10.2.%’ 执行除create
table、database 之外的所有其他操作; 同时,还支持级联授权,允许’robert’@‘10.10.2.%’
将权限授予其他用户(发起ucreate user 和ugrant命令)。
3、使用udrop命令, 删除访问ip访问控制白名单。如:
udrop user 'robert'@'10.10.1.%';
特别说明: 如果robert用户下的所有ip访问白名单都被删除, 则视为系统没有配置白名单, 此时可以用robert账号从任意uhost上登录。
提供权限配置查询命令:ushow users;