MySQL新用户访问被拒绝。

20

我刚开始学习MySQL。我使用root登录,并按照在线参考文档创建了一个新用户:

mysql> CREATE USER 'abc'@'%' IDENTIFIED BY '111111';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'abc'@'%' WITH GRANT OPTION;

然后我退出了并尝试使用新用户登录:

mysql --user=abc --password=111111 mysql

但是收到了一个错误信息:

用户 'abc'@'localhost' 的访问被拒绝(使用密码:是)

我错过了什么吗?


1
你刷新了权限吗?FLUSH PRIVILEGES; - harish.venkat
在上述两个语句后添加FLUSH PRIVILEGES,并使用“localhost”或“IP地址”代替“%”,这对我很有效。希望这可以帮到你! - Pankaj Wanjari
6个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
24

运行此命令即可工作。

FLUSH PRIVILEGES

给用户授予所需的权限后,您需要刷新权限才能完成设置并使新设置生效。为此,请在SQL命令提示符中运行以下命令:

[编辑]
如果您还想从本地连接,您应该创建另一个帐户。

必须拥有'用户'的两个帐户才能让'用户'能够从任何地方连接。没有本地主机帐户,mysql_install_db创建的用于本地主机的匿名用户帐户将优先于“用户”从本地主机连接时。结果,“用户”会被视为匿名用户。这是因为匿名用户帐户具有比“用户”@“%”帐户更具体的Host列值,并且因此在用户表排序顺序中排在前面。)

参考资料:http://dev.mysql.com/doc/refman/5.5/en/adding-users.html


1
嗯,奇怪,这应该可以创建“超级用户”权限。尝试使用root用户登录并查看记录是否已创建! - Venu
这是哪个版本的MySQL?我用得很好。请按照此教程操作:http://dev.mysql.com/doc/refman/5.5/en/adding-users.html - Venu
8
哈!你需要两个账户!从上面的链接中:为了让Monty能够在任何地方连接,必须拥有这两个帐户。如果没有本地主机帐户,那么由mysql_install_db创建的本地主机匿名用户帐户将在Monty从本地主机连接时优先使用。结果,Monty将被视为匿名用户。原因是匿名用户帐户的Host列值比“monty'@'%'帐户更具体,因此在用户表排序顺序中排在前面。 - Venu
1
我不知道需要2个账户。这解决了我遇到的许多其他模糊的情况,用户无法登录。谢谢! - chiliNUT
1
你其实不需要两个账户,localhost和%的区别在于,后者告诉mysql用户将从多个主机连接,而前者明确表示用户只能从localhost登录。此外,使用GRANT授予权限不需要运行FLUSH PRIVILEGES,因为mysql在使用GRANT后会自动重新加载权限表。 - Jeffery ThaGintoki
显示剩余3条评论

5

在我的情况下,问题在于密码。将其包含的特殊字符数量减少后,它开始正常工作。


我有同样的经历。 - Md. Mahmud Hasan

3

通常这对我来说会起到作用:

登录MySQL

mysql -u root -p

创建MySQL用户

CREATE USER 'username'@'ip' IDENTIFIED BY '*password*';

授权该用户完全控制权

GRANT ALL PRIVILEGES ON * . * TO 'username'@'ip';
重新装载权限表
FLUSH PRIVILEGES;

退出MySQL接口

exit;

允许从特定IP地址对端口3306的外部访问

sudo ufw allow from ip to any port 3306

进入MySQL配置文件

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

允许MySQL在外部查找连接

更改为:

bind-address            = 127.0.0.1

To:

bind-address            = 0.0.0.0

在MySQL 8+中,这行代码一开始就不存在,如果需要,请添加。

重新启动MySQL。

sudo systemctl restart mysql

但是出现了“用户访问被拒绝”的问题,希望有人能够扩展我的答案并解决这个问题。


2

将主机从“%”更改为“localhost”对我有用。

但是我不知道为什么。

记得使用“flush privileges;”

我正在使用mysql Ver 15.1 Distrib 10.1.32-MariaDB,适用于Linux(x86_64),使用readline 5.1


-1
如果您使用 Docker 镜像运行 MySQL 8 或更高版本,则应降级版本。我尝试了 MYSQL 5.7 镜像,然后我能够从远程网络连接到一个用户(非 root 用户)。

1
降级版本不应该是解决方案,尤其是降到如此过时的版本。 - Lunar
2
通常情况下,我会同意@Lunar的观点,但在这种情况下,我不能同意,因为mysql 5.x服务器和mysql 8.x客户端存在已知的兼容性问题,例如https://serverfault.com/questions/1054823/how-do-i-deal-with-mysql-incompatibility-8-5以及一个密码哈希问题,据我所知,不会有修复。因此,对于那些无法控制升级服务器的人来说,降级客户端是唯一的选择。Eric在这个答案上不应该被down-vote。实际上,在这种情况下使用docker镜像是一个明智的想法。 - Jim

-2

就是这样。

grant all privileges on *.* to `root`@`%` identified by 'chnagethepasswordhere'; 
flush privileges;
--helps to excute store procedure as root user

GRANT EXECUTE ON PROCEDURE mbu4u.ratingProcedure TO 'root'@'ip.ip.ip.ip' identified by 'changepasswordheere';

GRANT ALL ON mbu4u.* TO root@'ip.ip.ip.ip' IDENTIFIED BY 'changepassword';

dantheman @祝你有美好的一天!


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