RDS的白名单设置是针对整个实例的,无法根据数据库账号限制特定IP地址的访问,存在安全缺陷。本文介绍通过SQL命令实现指定账号仅能从特定IP地址访问数据库,从而提升访问控制的安全性。
已创建高权限账号,创建方法,请参见创建高权限账号。 指定IP地址后,使用控制台或API接口管理账号(如删除账号、修改密码)可能引发故障,建议使用DMS或SQL命令管理账号。 如果数据库中存在用户名相同且绑定的主机IP等价(如192.168.%和192.168.%.%)的账号,系统无法保证鉴权顺序,可能导致访问异常。例如,存在 通过以下命令创建新账号并授权管理数据库,允许账号通过特定IP地址访问数据库。 创建新账号test001并授权管理rds001数据库,允许从42.120.XX.XX访问数据库。 说明 此账号在控制台上无法查看到所属数据库。将42.120.XX.XX更改为%,即可在控制台查看此账号的所属数据库。 要修改IP为42.121.XX.XX,使用如下命令:前提条件
注意事项
[email protected].%和[email protected].%.%两个账号时,系统会随机选择一个进行鉴权,若两个账号的密码或权限不同,可能导致无法登录或权限不一致。因此,应尽量避免这种情况。使用SQL命令设置账号从特定IP地址访问数据库
CREATE USER `test001`@`42.120.XX.XX`IDENTIFIED BY 'passwd';
GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test001'@'42.120.XX.XX';
GRANT ALL PRIVILEGES ON `rds001`.* TO 'test001'@'42.120.XX.XX';
GRANT SELECT ON mysql.* TO 'test001'@'42.120.XX.XX';
RENAME USER `test001`@`42.120.XX.XX` TO `test001`@`42.121.XX.XX`;