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

ctzwtxfj  于 2022-11-08  发布在  其他
关注(0)|答案(9)|浏览(182)

今天我做了一个登录作为根到Ubuntu 14.04.1 LTS ll
然后是apt-get install mariadb-server(没有sudo,但作为根)。
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;

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

kxkpmulp

kxkpmulp1#

**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

我会接受我的密码,并允许我设置它,但我无法通过mysql客户端以root身份登录
我不得不开始mariadb

sudo mysqld_safe --skip-grant-tables

以root用户身份进行访问,而所有其他用户仍然可以正常访问。
查看mysql.user表,我注意到root用户的plugin列被设置为unix_socket,而其他所有用户的列都被设置为'mysql_native_password'。https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/解释了Unix套接字通过将运行客户端的进程的uidmysql.user表中的用户的uid进行匹配来启用登录。换句话说,要以root身份访问mariadb,您必须以超级用户身份登录。
果然,重新启动我的mariadb守护进程需要身份验证,我可以作为root登录

sudo mysql -u root -p

sudo su -
mysql -u root -p

完成这些之后,我考虑了如何在不执行sudo的情况下访问,而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;

将根帐户更改为使用密码登录而不更改密码,但这可能会使您的mysql/mariadb安装没有根密码。
在这两种情况下,你需要重新启动mysql/mariadb:

sudo service mysql restart

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

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

想想看,我很高兴有sudo mysql -u root -p,所以我切换回,但我想我会张贴我的解决方案,因为我找不到一个其他地方。

q35jwt9p

q35jwt9p2#

在干净的Ubuntu 16.04 LTS中,localhost 的MariaDB root 登录名从密码样式更改为sudo登录样式...
所以,就这么做吧

sudo mysql -u root

由于我们希望使用密码登录,因此请创建另一个用户“user”
在MariaDB控制台中...(您可以使用“sudo mysql -u root”进入MariaDB控制台)

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

然后在bashshell提示符下,

mysql-workbench

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

wd2eg0qa

wd2eg0qa3#

来自超级用户accepted answer

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

hsvhsicv4#

请尝试以下命令

sudo mysql_secure_installation

按回车键并为mysql/mariadb中的 root 指定新密码。
如果出现类似以下的错误
错误2002(HY 000):无法通过套接字'/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中的问题。
祝你好运

ve7v8dk2

ve7v8dk25#

我必须以root身份登录Ubuntu才能访问Mariadb。这可能与“Harden ...”有关,它在您第一次安装时会提示您这样做。因此:

$ sudo su
[sudo] password for user: yourubunturootpassword

# mysql -r root -p

Enter password: yourmariadbrootpassword

你就可以加入了。

cidc1ykv

cidc1ykv6#

刷新权限的新命令是:
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
希望这对你有帮助:)

jjjwad0x

jjjwad0x7#

运行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?

vd8tlhqk

vd8tlhqk8#

像Ubuntu这样的系统更喜欢使用auth_socket插件,它会尝试通过比较数据库中的用户名和发出mysql请求的进程来进行认证;它在here中描述
套接字插件检查套接字用户名(操作系统用户名)是否与客户端程序指定的MySQL用户名匹配,并仅在名称匹配时才允许连接。
相反,您可能希望使用mysql_native_password,它将要求用户/密码进行身份验证。
关于实现这一点的方法,我推荐使用this

yqkkidmi

yqkkidmi9#

首先关闭终端退出此cmd;
然后运行:sudo mysql(不要忘记sudo,否则MySQL需要您不知道的密码-使用sudo跳过mysql密码验证)
通过以下命令选择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)

相关问题