ERROR 1045 (28000): 用户访问被拒绝(使用密码:是)

3
我正在尝试在一个服务器上建立一个简单的mysql数据库,并在另一个连接到它的服务器上建立另一个数据库。
我已经完成了以下步骤:
1. 安装了mysql-server 2. 创建了数据库 3. 使用以下命令创建了用户: CREATE USER admin@'localhost' IDENTIFIED BY 'admin'; 4. 给此用户授权: GRANT ALL PRIVILEGES ON confWeb.* TO admin@''; 5. 打开了bind-address
现在,当我从另一台服务器运行命令mysql -u admin -p -h <address>时,它只是一遍又一遍地告诉我:
ERROR 1045 (28000): Access denied for user 'admin'@'X.X.X.X' (using password: YES)

我真的不知道该怎么办了,感觉已经试过了所有方法。我尝试在GRANT行末尾加入GRANT OPTION,也尝试允许了很多不同的地址,但都无济于事。


2
您创建了一个与本地主机绑定的用户,但您正在连接到不是本地主机的服务器。 - Chris Forrence
3个回答

7
在MySQL中,用户由用户名主机名共同标识。
下面介绍一下这个用户:
 admin@localhost

不是同一位用户

 admin@'10.242.167.235'

作为一种选择,您可以这样做以允许连接:
  GRANT USAGE ON *.* TO admin@'10.242.167.235' IDENTIFIED BY 'mysecret' ;
  GRANT ALL ON confWeb.* TO admin@'10.242.167.235' ;

如果想要更深入地了解MySQL访问权限系统,包括“通配符”、“localhost”的特殊含义、使用IP地址代替主机名等内容,请参考以下链接:

http://dev.mysql.com/doc/refman/5.7/en/privilege-system.html


我认为你的回答可能对我所写的有帮助,但是我尝试了你说的方法,仍然没有解决问题。不过我已经找到了解决方案,我会发布它。 - Licia
这似乎不同于仅仅使用 admin:https://dba.stackexchange.com/questions/191606/error-1045-28000-access-denied-for-user-myuserlocalhost-using-password - pyb
1
@pyb: 正确。MySQL账户由用户(user)主机(host)标识。根据MySQL参考手册:“如果省略账户名的主机(host)部分,则默认为 '%'。” https://dev.mysql.com/doc/refman/5.7/en/create-user.html 因此,指定“只有 admin ”与指定 admin@'%'相同。 - spencer7593

2

我不太清楚为什么,但显然当我使用 with grant option 并先授予对数据库的访问权限,然后再授予对其表的访问权限时,它起作用了。 以下是我输入的命令列表:

mysql> create user 'admin'@'localhost' identified by 'admin';
mysql> grant all privileges on confWeb to 'admin'@'10.69.101.%' identified by 'admin' with grant option;
mysql> grant all privileges on confWeb.* to 'admin'@'10.69.101.%' identified by 'admin' with grant option;
mysql> flush privileges;

我不知道之前为什么不起作用,而且我看到的答案看起来都像我看过的所有文档,但似乎我的问题在别处。


'admin'@'localhost''admin'@'10.69.101.%' 是完全不同的用户。而且这两个用户都不会与来自 10.242.167.235 的连接匹配。如果从 10.242.167.235 建立连接,则此答案中显示的两个语句定义的任何一个用户都没有任何影响。https://dev.mysql.com/doc/refman/5.7/en/account-names.html - spencer7593

0

请按照以下步骤操作:

  CREATE USER 'user name'@'IP or % or localhost' IDENTIFIED BY 'password';

  GRANT all privileges ON *.* TO 'user name'@'IP or % or localhost' IDENTIFIED BY 'password' ;
  flush privileges;

在“IP”的位置,您可以使用远程服务器IP连接服务器。您还可以使用“%”从世界上任何地方使用数据库。

现在,在授予权限选项中,“所有权限”的位置,您可以单独给予访问权限,例如选择、更改、更新等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接