在 Ubuntu 上新安装后,拒绝用户‘ root’@‘ localhost’(使用密码: YES)的访问

今天我以 root 用户的身份登录了 Ubuntu 14.04.1 LTS II

然后是 apt-get install mariadb-server(没有 sudo 但是作为 root)。

我有 mySQL -h localhost -u root --password=<PW>

拒绝访问用户‘ root’@‘ localhost’(使用密码: YES)

我用 mySQL -u root -p登录了数据库

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<PW>';
FLUSH ALL PRIVILEGES;

但这没有帮助。你有任何想法吗? 我没有找到类似问题的答案。

372553 次浏览

要以 root 用户的身份访问较新版本的 mysql/mariadb,在新安装之后,您需要在一个 root shell 中(即 sudo mysql -u root,或者首先由 su -sudo -i启动的 shell 中的 mysql -u root)


在 Ubuntu 上做了同样的升级之后,我也遇到了同样的问题。

奇怪的是

sudo /usr/bin/mysql_secure_installation

将接受我的密码,并允许我设置它,但我不能通过 mysql客户端登录为 root

我不得不从 Mariadb 开始

sudo mysqld_safe --skip-grant-tables

以 root 用户身份访问,而其他用户仍然可以访问。

查看 mysql.user表,我注意到对于 root 用户,plugin列被设置为 unix_socket,而其他所有用户都被设置为“ mysql _ nate _ password”。快速浏览一下这个页面: https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/解释了 Unix Socket 通过匹配运行客户端的进程的 uidmysql.user表中用户的进程的 uid来支持登录。换句话说,要以 root的身份访问 mariadb,您必须以 root 用户身份登录。

当然,重新启动 Mariadb 守护进程需要身份验证,我可以作为 root 用户登录

sudo mysql -u root -p

或者

sudo su -
mysql -u root -p

完成这一步之后,我考虑了如何在不执行 sudo 的情况下进行访问,这只是运行这些 mysql 查询的问题

GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;

(用所需的 mysql root 密码替换 <password>)。

或者运行 mysql 查询:

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;

将更改 root 帐户以使用密码登录而不更改密码,但是这可能会导致安装 mysql/mariadb 时没有 root 密码。

在这两个之后,你需要重新启动 mysql/mariadb:

sudo service mysql restart

瞧,我通过 mysql -u root -p进入了我的个人账户

请注意,这样做会降低安全性 可能 MariaDB 开发人员选择使用这样的 root 访问工作是有充分理由的。

考虑到这一点,我很高兴有 sudo mysql -u root -p,所以我切换回来,但我认为我会张贴我的解决方案,因为我无法找到一个其他地方。

在干净的 Ubuntu 16.04 LTS 中,用于 本地主机的 MariaDB 登录从密码风格改为 sudo 登录风格..。

那就做吧

sudo mysql -u root

因为我们想用密码登录,所以创建另一个用户‘用户’

在 MariaDB 控制台中... (在 MariaDB 控制台中使用‘ sudo mysql-u root’)

use mysql
CREATE USER 'user'@'localhost' IDENTIFIED BY 'yourpassword';
\q

然后在 bash shell 提示符中,

mysql-workbench

你可以在本地主机上用“ user”和“ yourpassword”登录

我必须以 root 用户身份登录 Ubuntu 才能以 root 用户身份访问 Mariadb。它可能与第一次安装时提示您执行的“ Harden...”有关。所以:

$ sudo su
[sudo] password for user: yourubunturootpassword
# mysql -r root -p
Enter password: yourmariadbrootpassword

你进去了。

刷新特权的新命令是:

FLUSH PRIVILEGES

旧的命令 FLUSH ALL PRIVILEGES不再工作了。

你会得到一个类似这样的错误:

MariaDB [(无)] > 冲洗所有特权; ERROR 1064(42000) : 您的 SQL 语法有错误; 请检查与 MariaDB 服务器版本相对应的手册,以便在第1行“ ALL PRIVILEGES”附近使用正确的语法

希望这对你有帮助:)

试试命令

sudo mysql_secure_installation

按回车键并为 Mysql/mariadb中的 分配一个新密码。

如果你得到一个错误,比如

ERROR2002(HY000) : 无法通过套接字连接到本地 MySQL 服务器 “/var/run/mysqld/mysqld.sock”

使服务

service mysql start

现在,如果你重新进入

mysql -u root -p

如果您跟随问题输入与 sudo sumysql -u root -p现在应用权限到

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<password>';

这解决了我在 MariaDB的问题。

祝你好运

运行 mysql _ update。

检查一下

SHOW GRANTS FOR 'root'@'localhost';

GRANT ALL PRIVILEGES ON ... WITH GRANT OPTION

检查该表是否存在 _ mysql.proxy _ priv _。

当尝试授予特权时,拒绝用户访问。我如何授予特权?

像 Ubuntu 这样的系统更喜欢使用 Auth _ socket插件。它将尝试通过比较数据库中的用户名和执行 mysql 请求的进程来进行身份验证; 这在 给你中进行了描述

套接字插件检查套接字用户名(操作 系统用户名)匹配客户端指定的 MySQL 用户名 程序连接到服务器,并且只有在名称为 火柴。

相反,您可能希望返回 Mysql _ national _ password,这将需要用户/密码进行身份验证。

关于实现这一点的方法,我推荐使用 这个

来自超级用户 接受的答案:

sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;

首先关闭终端以退出此 cmd;

然后运行: sudo mysql(不要忘记 sudo,否则 MySQL 需要你不知道的密码-使用 sudo跳过 MySQL 密码验证)

按照 cmd 选择 mysql数据库

mysql> use mysql

然后为 root 用户设置新密码

mysql> alter user root@localhost identified with mysql_native_password by 'MyNewPassword@123';

那么

mysql> flush privileges;

quit关闭 mysql 连接

mysql> quit

现在可以运行 sudo mysql_secure_installation而不会出现任何错误 在这里您必须输入您的新设置密码(MyNewPassword@123)