Mysql 错误1698(28000):拒绝用户访问';根'@';本地主机';
我正在安装一个新服务器,并一直遇到这个问题 当我尝试使用root用户登录MySQL数据库时,我得到错误: 错误1698(28000):拒绝用户“root”@“localhost”的访问 无论我是通过终端(SSH)、PHPMyAdmin还是MySQL客户端(例如Navicat)进行连接。他们都失败了 我查看了mysql.user表,得到以下结果:Mysql 错误1698(28000):拒绝用户访问';根'@';本地主机';,mysql,iredmail,Mysql,Iredmail,我正在安装一个新服务器,并一直遇到这个问题 当我尝试使用root用户登录MySQL数据库时,我得到错误: 错误1698(28000):拒绝用户“root”@“localhost”的访问 无论我是通过终端(SSH)、PHPMyAdmin还是MySQL客户端(例如Navicat)进行连接。他们都失败了 我查看了mysql.user表,得到以下结果: +------------------+-------------------+ | user | host
+------------------+-------------------+
| user | host |
+------------------+-------------------+
| root | % |
| root | 127.0.0.1 |
| amavisd | localhost |
| debian-sys-maint | localhost |
| iredadmin | localhost |
| iredapd | localhost |
| mysql.sys | localhost |
| phpmyadmin | localhost |
| root | localhost |
| roundcube | localhost |
| vmail | localhost |
| vmailadmin | localhost |
| amavisd | test4.folkmann.it |
| iredadmin | test4.folkmann.it |
| iredapd | test4.folkmann.it |
| roundcube | test4.folkmann.it |
| vmail | test4.folkmann.it |
| vmailadmin | test4.folkmann.it |
+------------------+-------------------+
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------------------+
| User | plugin |
+------------------+-----------------------+
| root | auth_socket |
| mysql.sys | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+
sudo service mysql restart
如您所见,root应该具有访问权限
服务器非常简单,因为我已经尝试解决了一段时间了
它使用Apache、MySQL和PHP运行Ubuntu16.04.1LTS,这样它就可以托管网站,而iRedMail 0.9.5-1则可以托管邮件
在安装iRedMail之前,登录MySQL数据库可以正常工作。我也试过了,只是安装了iRedMail,但是root,也不起作用
如果有人能告诉我如何修复MySQL登录问题,或者如何在现有MySQL安装的基础上安装iRedMail。是的,我尝试了,但在配置文件中找不到这些变量。您想使用root用户访问MySQL,但没有提供root用户的正确密码 如果您需要为root用户设置一个新密码,MySQL的网站上有很多关于如何设置密码的文档:
我将不在这里显示流程,因为上面链接上的MySql文档清晰明了我建议删除MySql连接- 这是针对Mysql版本5.5的更新,如果您的版本不同,请相应更改第一行
sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean
并再次安装,但这次自己设置根密码。
这将节省很多精力
sudo apt-get update
sudo apt-get install mysql-server
一些系统,如Ubuntu、mysql,默认情况下使用 基本上意味着:使用它的db_用户将通过系统用户证书进行“身份验证”。您可以通过执行以下操作查看您的
root
用户是否设置为这样:
+------------------+-------------------+
| user | host |
+------------------+-------------------+
| root | % |
| root | 127.0.0.1 |
| amavisd | localhost |
| debian-sys-maint | localhost |
| iredadmin | localhost |
| iredapd | localhost |
| mysql.sys | localhost |
| phpmyadmin | localhost |
| root | localhost |
| roundcube | localhost |
| vmail | localhost |
| vmailadmin | localhost |
| amavisd | test4.folkmann.it |
| iredadmin | test4.folkmann.it |
| iredapd | test4.folkmann.it |
| roundcube | test4.folkmann.it |
| vmail | test4.folkmann.it |
| vmailadmin | test4.folkmann.it |
+------------------+-------------------+
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------------------+
| User | plugin |
+------------------+-----------------------+
| root | auth_socket |
| mysql.sys | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+
sudo service mysql restart
如您在查询中所见,root
用户正在使用auth\u socket
插件
有两种方法可以解决此问题:
mysql\u native\u密码
插件db\u用户
(推荐)$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ sudo service mysql restart
选项2:(用您的用户名替换您的系统用户)
请记住,如果您使用选项2,您必须连接到mysql作为您的系统用户名(mysql-u您的系统用户
)
注意:在某些系统(例如Debian stretch)上调用了“auth_socket”插件,因此相应的SQL命令应该是:UPDATE user SET plugin='unix_socket'WHERE user='YOUR_SYSTEM_user'代码>
更新:
从@andy的评论来看,mysql 8.x.x似乎更新/替换了caching\u sha2\u password
的auth\u socket
,我没有使用mysql 8.x.x进行测试的系统设置,但是上面的步骤应该可以帮助您理解这个问题。答复如下:
MySQL 8.0.4的一个变化是新的默认身份验证插件是“缓存\u sha2\u密码”。新的“YOUR_SYSTEM_USER”将具有此身份验证插件,您现在可以使用“mysql-u YOUR_SYSTEM_USER-p”从bash shell登录,并在提示符处为该用户提供密码。不需要“更新用户设置插件”步骤。有关8.0.4默认身份验证插件更新,请参见,我在通过Windows 10桌面上的Putty与Debian 8虚拟机进行交互时遇到了此问题
我在这里尝试了各种各样的建议,但是没有什么效果,我正在Debian主机上运行MariaDB。最后,我发现我无法在安全模式下启动db服务器,但我不需要,并且以下命令实际上对我有效,即允许新创建的MySql用户登录MySql/MariaDB服务器:
sudo service mysql restart
sudo mysql # logs in automatically into MariaDB
use mysql;
update user set plugin='' where user='your_user_name';
flush privileges;
exit;
sudo service mysql restart # restarts the mysql service
如果上述方法对您不太有效,请按照zetacu在上述帖子()中概述的步骤进行操作,然后按照我的步骤进行操作
现在,您应该能够使用远程终端客户端并使用以下命令安全地登录mysql:
mysql -u your_user_name -p
*出现提示时键入密码第一步:转到/etc/phpmyadmin/config.inc.php,然后取消对AllowNoPassword所在行的注释。
第二步:登录到mysql默认帐户
mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;
就这些 新版本的MYSQL就是这样做的。
sudo mkdir /var/run/mysqld
sudo chown mysql: /var/run/mysqld
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -uroot mysql
sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown
sudo service mysql start
在新的my sql中,如果安装时密码为空,则它基于auth_socket
插件
正确的方法是使用sudo
权限登录到我的sql
$ sudo mysql -u root -p
然后使用以下命令更新密码:
$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';
完成此操作后,请停止并启动mysql服务器
$ sudo service mysql stop
$ sudo service mysql start
有关完整的详细信息,请参阅。步骤1sudomysql-u root-p
第二步<代码>使用mysql代码>
第三步<代码>更改用户“root”@“localhost”,由“admin”使用mysql_native_密码标识代码>
这里的“admin”是您的新密码,您可以更改它
第四步<代码>退出
谢谢。你完了。为我工作:
mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
这也发生在我身上。问题在于linux发行版附带的mysql repo。因此,当你简单地做:
$sudo apt安装mysql服务器
它从默认的repo安装mysql,这就产生了这个问题。因此,为了克服这个问题,您需要卸载已安装的mysql
$sudo apt remove mysql*--清除--自动删除
然后从mysql官方网站下载mysql repo
按照他们的文档说明如何添加和安装repo。
这没有问题。
正如@zetacu所回答的,您可以验证mysql root现在确实使用mysql\u native\u密码插件
mysql:5.7
跳过授权表
添加到文件末尾
sudo mysql service restart
sudo mysql -u root -p
sudo service mysql stop
sudo mkdir /var/run/mysqld
sudo chown mysql: /var/run/mysqld
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -uroot mysql
UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
EXIT;
sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown
sudo service mysql start
dev@Dev-007:~$ mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
dev@Dev-007:~$ sudo mysql -u root -p
mysql> alter user 'root'@'%' identified with mysql_native_password by 'me123';
Query OK, 0 rows affected (0.14 sec)
mysql>
mysql -u $(whoami)
use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit
mysql -u root -p
sudo mysql
mysql> use mysql
mysql> update user set authentication_string=PASSWORD("mypass") where user='root';
mysql> flush privileges;
mysql> quit;
sudo service mysql restart
sudo mysql_secure_installation
sudo mysql
1. CREATE USER 'jack'@'localhost' IDENTIFIED WITH mysql_native_password BY '<<any password>>';
2. GRANT ALL PRIVILEGES ON *.* TO 'jack'@'localhost';
3. SELECT user,plugin,host FROM mysql.user WHERE user = 'root';
+------+-------------+-----------+
| user | plugin | host |
+------+-------------+-----------+
| root | auth_socket | localhost |
+------+-------------+-----------+
4. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<<any password>>';
5. FLUSH PRIVILEGES;
sudo mysql -u root -p
SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
SET GLOBAL validate_password.policy=LOW;
SET GLOBAL validate_password.length=4;
SET GLOBAL validate_password.number_count=0;
SET GLOBAL validate_password.special_char_count=0;
SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 4 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 0 |
| validate_password.policy | LOW |
| validate_password.special_char_count | 0 |
+--------------------------------------+-------+
exit;
sudo mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';
exit;
sudo mysql -u root -p
SET GLOBAL validate_password.length = 4;
SET GLOBAL validate_password.mixed_case_count = 0;
SET GLOBAL validate_password.number_count = 0;
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.special_char_count = 0;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';