RDS白名单设置适用于所有账号,无法根据账号来限制IP地址的访问。在安全性上有较大缺陷。本文介绍如何指定账号从特定的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`;