在Ubuntu上进行新安装后,拒绝用户'root'@'localhost'的访问(使用密码:是)


124

今天我以root用户身份登录到Ubuntu 14.04.1 LTS ll

然后apt-get install mariadb-server(没有sudo但以root身份)。

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

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

随着mySQL -u root -p我登录数据库,并做了

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

但这并没有帮助。你有什么主意吗 我没有找到类似问题的答案。


您是否尝试过重置root密码?
Ozgur Bar 2015年

Answers:


277

TL; DR:以root用户身份访问新版本的mysql / mariadb之后,在新安装后,您需要位于root用户的shell中(即sudo mysql -u root,或mysql -u root位于由su -sudo -i首先启动的shell中)。


在Ubuntu上完成相同的升级后,我遇到了相同的问题。

奇怪的是

sudo /usr/bin/mysql_secure_installation

会接受我的密码,并允许我设置它,但是我无法root通过mysql客户端登录

我必须从开始mariadb

sudo mysqld_safe --skip-grant-tables

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

查看mysql.user我注意到的根表,该plugin列设置为,unix_socket而所有其他用户的列设置为“ mysql_native_password”。快速浏览此页面:https : //mariadb.com/kb/zh-CN/mariadb/unix_socket-authentication-plugin/解释了Unix Socket通过将uid运行客户端的进程与客户端中用户的进程进行匹配来启用登录。mysql.user表。换句话说,root必须以root用户身份登录才能访问mariadb 。

确保通过身份验证重新启动我的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;

(替换<password>为所需的mysql根密码)。为root用户启用了密码登录。

或者运行mysql查询:

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

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

这些之后,您需要重新启动mysql / mariadb:

sudo service mysql restart

瞧,我可以通过我的个人帐户访问 mysql -u root -p

请注意这样做是在降低安全性大概由于充分的理由,MariaDB开发人员选择了像这样的root访问工作。

考虑到这一点,我感到非常高兴,sudo mysql -u root -p因此我又切换回了这一点,但是我认为我会发布解决方案,因为我找不到其他解决方案。


7
“要以超级用户身份访问mariadb,必须以超级用户身份登录。” -这句话应该在答案的最前面。
菲利普·路德维希

1
为什么GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>'; 在刷新权限之前两次运行命令?
布莱格23年

4
这应该在更可见的地方,例如在安装过程中出现大红色字母或其他内容...只是浪费了数小时的时间来尝试设置我需要尽快的服务器....
Gall Annonim

1
顺便说一句,如果您像我一样懒惰,可以使用sudo service mysql restart
zeisi

1
感谢您的提示,非常适合开发人员,但是如何将其还原为原始格式?
山姆

42

在干净的Ubuntu 16.04 LTS中,本地主机的 MariaDB 登录从密码样式更改为sudo登录样式...

所以,只要做

sudo mysql -u root

由于我们要使用密码登录,因此请创建另一个用户“ user”

在MariaDB控制台中...(使用'sudo mysql -u root'在MariaDB控制台中获得)

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

然后在bash shell提示符下,

mysql-workbench

您可以在本地主机上使用“用户”和“ yourpassword”登录


12

尝试命令

sudo mysql_secure_installation

按Enter并在mysql / mariadb中root分配一个新密码。

如果出现类似错误

错误2002(HY000):无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器

通过启用服务

service mysql start

现在,如果您重新输入

mysql -u root -p

如果您遵循此问题,请输入sudo sumysql -u root -p现在将权限应用于root用户

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

这解决了我在MariaDB中的问题。

祝好运



3

我必须以root用户身份登录Ubuntu,才能以root用户身份访问Mariadb。它可能与“ Harden ...”有关,在首次安装时会提示您执行此操作。所以:

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

你进去了


2

刷新特权的新命令是:

FLUSH PRIVILEGES

旧命令FLUSH ALL PRIVILEGES不再起作用。

您将收到如下错误:

MariaDB [(none)]> FLUSH ALL PRIVILEGES; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ALL PRIVILEGES' at line 1

希望这可以帮助 :)



0

像Ubuntu这样的系统更喜欢使用auth_socket插件。它将通过比较您在数据库中的用户名和发出mysql请求的进程来尝试进行身份验证;在这里描述

套接字插件检查套接字用户名(操作系统用户名)是否与客户端程序向服务器指定的MySQL用户名匹配,并且仅在名称匹配时才允许连接。

相反,您可能想返回mysql_native_password,这将需要用户/密码进行身份验证。

关于实现该目标的方法,我建议改用此方法

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.