RDS白名单设置适用于所有账号,无法根据账号来限制IP地址的访问。在安全性上有较大缺陷。本文介绍如何指定账号从特定的IP地址访问数据库。
注意事项
- 通过本文的操作步骤为账号指定IP地址后,再通过控制台或者API接口管理该账号(删除账号、修改账号密码等)可能会引发故障,建议后期统一使用DMS或者SQL命令管理该账号。
- 数据库中如果存在用户名相同且绑定的主机IP等价(例如192.168.%和192.168.%.%)的账号,系统无法保证鉴权顺序,可能导致访问异常。例如数据库中存在
user@192.168.%
和user@192.168.%.%
两个账号,当您使用其中一个账号登录时,系统会随机选择一个账号进行鉴权,如果两个账号的密码或权限各不相同,则可能会出现无法登录、或登录后权限不一致的问题。因此,应尽量避免上述情况。
使用SQL命令设置账号从特定IP地址访问数据库
- 通过客户端、命令行连接RDS。
- 通过以下命令创建新账号并授权管理数据库,允许账号通过某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`.`help_topic` TO 'test001'@'42.120.XX.XX';
GRANT SELECT ON `mysql`.`func` TO 'test001'@'42.120.XX.XX';
GRANT SELECT ON `mysql`.`time_zone` TO 'test001'@'42.120.XX.XX';
GRANT SELECT ON `mysql`.`slow_log` TO 'test001'@'42.120.XX.XX';
GRANT SELECT ON `mysql`.`time_zone_transition` TO 'test001'@'42.120.XX.XX';
GRANT SELECT ON `mysql`.`event` TO 'test001'@'42.120.XX.XX';
GRANT SELECT ON `mysql`.`proc` TO 'test001'@'42.120.XX.XX';
GRANT SELECT ON `mysql`.`help_category` TO 'test001'@'42.120.XX.XX';
GRANT SELECT ON `mysql`.`help_relation` TO 'test001'@'42.120.XX.XX';
GRANT SELECT ON `mysql`.`help_keyword` TO 'test001'@'42.120.XX.XX';
GRANT SELECT ON `mysql`.`general_log` TO 'test001'@'42.120.XX.XX';
GRANT SELECT ON `mysql`.`time_zone_leap_second` TO 'test001'@'42.120.XX.XX';
GRANT SELECT ON `mysql`.`time_zone_transition_type` TO 'test001'@'42.120.XX.XX';
GRANT SELECT ON `mysql`.`time_zone_name` TO 'test001'@'42.120.XX.XX';