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