我在 AWS 上的 Linux EC2 实例上安装了 mysql/Aurora 1.14 有一个非常奇怪的问题。
我有一个用户能够远程连接到实例,但不能在本地连接。
select user,host from mysql.user;
user | host
admin| %
我可以从外部与该用户联系
mysql -u admin -pxxxx -h ip
但是当我在机器里面时
mysql -u admin -pxxx
ERROR 1045 (28000): Access denied for user 'admin'@'localhost' (using password: YES)
我尝试了其他几件事(有或没有 sudo)
mysql -u admin -pxxx -h localhost
mysql -u admin -pxxx -h 127.0.0.1
mysql -u admin -pxxx --proto=TCP
我也尝试过创建另一个用户
create user 'localtest'@'localhost' identified by 'pwd18';
grant all on mydb.* to 'localtest'@'localhost';
flush privileges;
mysql -u localtest -ppwd18 -h localhost
ERROR 1045 (28000): Access denied for user 'localtest'@'localhost' (using password: YES)
其他奇怪的事情是我在 mysql.user 中没有用户“root”。
如果我从远程尝试,使用用户 admin 将所有数据库上的所有权限授予 localtest,我会得到:
GRANT ALL PRIVILEGES ON *.* TO 'localtest'@'localhost'
Error Code: 1045. Access denied for user 'admin'@'%' (using password: YES)
没有更多的想法。日志不是很有用,只是说“访问被拒绝”
按照要求:
SELECT USER()
[email protected] admin@%
SHOW GRANTS FOR 'admin'@'%'
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, LOAD FROM S3, SELECT INTO S3 ON *.* TO 'admin'@'%' IDENTIFIED BY PASSWORD '*xxxxxx' WITH GRANT OPTION
我还明确向用户'localtest'@'localhost'提供了所有上述授权,但没有任何改变
%
故意不包括在内localhost
。做出这个决定可能是为了强调相对安全的本地连接与来自 World Wild Web 之间的区别。或者可能是因为它暗示了一个套接字而不是 TCP/IP。(没有太大的性能差异。)所以,要么
GRANT ... TO admin@localhost ...;
我使用本地机器的外部 IP 解决了它
虽然我不明白为什么...