我在 EC2 服务器中有 2 个实例,一个实例具有 mysql DB 及其存储的内容,另一个实例用于访问存储在第一个实例中的数据。
我需要创建一个具有存储在数据库中的只读访问权限的用户。
所以
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
grant select on DBname.* to 'chowzter'@'localhost';
错误
ERROR 1130 (HY000): Host 'ip-xx-xx-xxx-xxx.ec2.internal' is not allowed to connect to this MySQL server
2。CREATE USER 'username'@'ec2-xx-xx-xx-xxx.compute-1.amazonaws.com' IDENTIFIED BY 'password'
grant select on DBname.* to 'username'@'ec2-xx-xx-xxx-xxx.compute-1.amazonaws.com';
这次使用的ip地址是second instance
通过命令获取的内部IP。
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 12:31:41:02:58:47 brd ff:ff:ff:ff:ff:ff
inet **XX.XX.XX.XXX/23** brd YY.YYY.YY.YYY scope global eth0
inet6 fe80::1031:41ff:fe02:5847/64 scope link
valid_lft forever preferred_lft forever
IP 地址:“XX.XXX.XX.XXX/23”
命令:mysql -hxx.xx.xxx.xxx -uusername -ppassword
错误
ERROR 1045 (28000): Access denied for user 'username'@'ip-xx-xx-xxx-xxx.ec2.internal' (using password: YES)
知道如何解决吗?
答案1
您还需要检查第一个实例的安全组。您可以从第二个实例 ssh 进入第一个实例吗?
您的安全组设置中 MySQL 端口是否开放?
那么为什么不使用打包服务RDS(MySQL)呢?
答案2
终于解决了。
首先我使用 创建了一个用户%
。
CREATE USER 'name'@'%' IDENTIFIED BY 'password';
然后您可以授予该用户权限。
grant select on DBname.* to 'name'@'%';
mysql -h xx.xx.xxx.xxx -u user -p
此处的 IP 地址是第一个实例
这赋予了我以只读模式从第二个实例访问数据库的权限。
答案3
使用以下虚拟名称:
源 MySQL = ec2-source.compute-1.amazonaws.com
,ip-source.ec2.internal
需要访问的外部 MySQL = ec2-external.compute-1.amazonaws.com
,ip-external.ec2.internal
要创建一个可以以只读权限从外部访问源的用户,同时限制对外部计算机 IP 的访问,请在您的来源MySQL的:
CREATE USER 'username'@'ip-external.ec2.internal' IDENTIFIED BY 'password';
GRANT SELECT ON DBname.* TO 'username'@'ip-external.ec2.internal';
FLUSH PRIVILEGES;
您现在可以在外部的机器访问只读源数据库:
mysql -u username -p -h ec2-source.compute-1.amazonaws.com