用户访问被拒绝' root' localhost' (在Ubuntu上新安装后使用密码:YES)

时间:2015-01-21 13:13:16

标签: mysql mariadb

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

然后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;

但这没有用。你有什么想法吗? 我没有找到类似问题的答案。

10 个答案:

答案 0 :(得分:202)

TL; DR:要以root用户身份访问较新版本的mysql / mariadb,在新安装之后,您需要位于root shell中(即sudo mysql -u root,或者mysql -u root内部的su - sudo -isudo /usr/bin/mysql_secure_installation 首先启动

刚刚在Ubuntu上进行了相同的升级,我遇到了同样的问题。

奇怪的是

root

接受我的密码,并允许我进行设置,但我无法通过mysql客户端<{1}}登录

我必须用

开始mariadb
sudo mysqld_safe --skip-grant-tables

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

查看我注意到的mysql.user表,plugin列设置为unix_socket,而所有其他用户设置为'mysql_native_password'。快速浏览一下这个页面:https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/解释说,Unix Socket通过匹配运行客户端的进程uidmysql.user表中用户的进程匹配来启用登录。换句话说,要将mariadb作为root访问,您必须以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>)。这为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所以我转回到那个,但我想我会发布我的解决方案,因为我在其他地方找不到。

答案 1 :(得分:33)

在干净的Ubuntu 16.04 LTS中, localhost 的MariaDB root 登录名从密码样式更改为sudo登录样式...

所以,只需做

sudo mysql -u root

由于我们要使用密码登录,请创建其他用户&#39;

在MariaDB控制台中

...(你使用&#39; sudo mysql -u root&#39;进入MariaDB控制台)

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

然后在bash shell提示符下,

mysql-workbench

您可以使用&#39; user&#39;使用&#39; yourpassword&#39;在localhost上

答案 2 :(得分:7)

尝试命令

sudo mysql_secure_installation

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

如果您收到错误

  

ERROR 2002(HY000):无法通过套接字连接到本地MySQL服务器   &#39; /var/run/mysqld/mysqld.sock'

使用

启用服务
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 :(得分:3)

我必须以root身份登录Ubuntu才能以root用户身份访问Mariadb。它可能与那些相关&#34;哈登......&#34;它首次安装时会提示您执行此操作。所以:

func isValid(url: URL) -> Bool {
    guard let host = url.host else { return false }

    let urlDomainComponents = host.reverseDNSComponents

    // Make sure that the suffix of the host is in the list of valid domains
    return validDomainComponents
        .contains { Array(urlDomainComponents.prefix($0.count)) == $0 }
}

你在。

答案 4 :(得分:3)

来自超级用户accepted answer

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

答案 5 :(得分:2)

我曾经遇到过类似的问题。在我的情况下,它发生是因为我以某种方式损坏了MySQL服务器的用户表。

这篇文章帮助了我:mysql-how-to-fix-Access-denied-for-user-'root'@'localhost'

基本上你必须重置root用户。

答案 6 :(得分:1)

刷新权限的新命令是:

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

希望这会有所帮助:)

答案 7 :(得分:0)

运行mysql_upgrade。

检查

SHOW GRANTS FOR 'root'@'localhost';

GRANT ALL PRIVILEGES ON ... WITH GRANT OPTION 

检查表是否存在_mysql.proxies_priv _。

Access denied for user 'root'@'localhost' while attempting to grant privileges. How do I grant privileges?

答案 8 :(得分:0)

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

中对此进行了描述
  

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

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

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

答案 9 :(得分:-2)

你只需要使用sudo来实现它

sudo mysql_secure_installation