不使用sudo连接到mysql服务器


80

命令:

mysql -u root -p

给出错误:

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

但是运行sudo特权可以:

sudo mysql -u root -p

是否有可能摆脱sudo要求,因为它阻止了我在intellij中打开数据库?我在尝试此问题的答案时尝试了以下操作:不使用sudo连接到本地MySQL服务器

sudo chmod -R 755 /var/lib/mysql/

这没有帮助。上面的问题抛出了另一个错误



1
我已经提到它不起作用
Riyafa Abdul Hameed

Answers:


104

只有root用户需要sudo要求才能登录mysql。我通过创建新用户并授予对所需数据库的访问权限来解决此问题:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON database_name.* TO 'newuser'@'localhost';

现在newuser无需sudo即可登录:

mysql -u newuser -p

2
对于想知道密码是什么的人来说,它是后面的字符串IDENTIFIED BY,在本例中为“ password”
AGoranov

请注意:连接时,请勿在-p选项后留空格。例如:(mysql -u newuser -ppassword没有空间!)
Taimoor Ahmad

60

您需要更改算法。为我工作

mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
mysql > FLUSH PRIVILEGES;

1
谢谢它帮助我。
kunj

它也对我有帮助。突然,重新启动后,我开始获得对用户root @ localhost的访问被拒绝。此解决方案帮助我连接mysql
ahsan_cse2004 '20

37

您可以使用相同的ROOT用户或NEW_USER并删除SUDO特权。以下示例显示了如何使用ROOT(不使用SUDO)删除连接。

使用SUDO连接到MY-SQL

sudo mysql -u root

从用户表中删除当前的根用户

DROP USER 'root'@'localhost';

创建一个新的ROOT用户(如果需要,可以创建其他用户)

CREATE USER 'root'@'%' IDENTIFIED BY '';

向新用户授予权限(ROOT)

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

刷新特权,以便立即重新加载Grant表。(为什么我们需要清除特权?

FLUSH PRIVILEGES;

现在一切都很好。以防万一,请检查是否创建了新的root用户。

SELECT User,Host FROM mysql.user;

+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| root             | %         |
| debian-sys-maint | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

退出mysql。(按CTRL + Z)。不使用SUDO连接到MySQL

mysql -u root

希望这会有所帮助!


1
为我工作。我所做的唯一更改是将“%”替换为“ localhost”
大卫

30

首先使用sudo登录到您的mysql。

然后使用此代码将root用户的“插件”列值从“ unix_socket”或“ auth_socket”更改为“ mysql_native_password”。

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin IN ('unix_socket', 'auth_socket');

FLUSH PRIVILEGES;

最后重启mysql服务。而已。

如果您需要更多信息,请查看链接

更新:

在新版本的mysql或mariadb中,可以使用:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password USING PASSWORD('your-password');
FLUSH PRIVILEGES;

2
在我的情况下,插件值为'auth_socket'。
Zubin

sudo service mysql restart重新启动。
tejasvi88

这是对我有用的所有列出的答案中的唯一一个(MariaDB v15.1)。
赫斯基

6

您可以使用以下查询:

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

这个查询就足够了。


6

我已经使用以下命令解决了这个问题。

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'username'@'localhost';
FLUSH PRIVILEGES;

在这里, username=您喜欢的任何用户名。

password=您喜欢的任何密码。


1

这个答案需要稍微适合于mariaDB而不是mysql。

首先使用sudo以root身份登录:

$ sudo mysql -uroot

然后更改mariadb根用户:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password USING PASSWORD('mypassword');
FLUSH PRIVILEGES;

从现在开始,不再需要sudo了:

$ mysql -uroot -p

使用的版本:mysql Ver 15.1 Distrib 10.4.13-MariaDB,用于使用readline 5.1的osx10.15(x86_64)


-1

在您回答的问题的评论中,其内容为

好的,只需尝试分析套接字文件路径中的所有目录,它们也需要具有o + rx和sock文件(将其更改为其他人不是一个好主意)。

您也可以尝试删除mysql.sock,然后重新启动mysqld,该文件应由守护程序以适当的权限创建。

这似乎适用于此问题(您说过的问题),因此也可能适用于您


我怎么做?我提到的问题引发了另一个错误
Riyafa Abdul Hameed

多数民众赞成在没有理由!!:可以在/etc/mysql/my.cnf文件中查看并使用以下命令:#plugin-load-add = auth_socket.so并重新启动databse,或者阅读此方法如何在没有密码的情况下启动mysql liberiangeek.net/2014/10/ reset-root-password-mariadb-centos-7
Bernd Buffen

-5

错误信息:

“错误1698(28000):用户'root'@'localhost'的访问被拒绝”

表示服务器不允许该用户的连接,并且mysql无法访问套接字。

试试这个解决问题:

登录您的数据库

sudo mysql -u root -p

然后进行以下修改:

MariaDB []>use mysql;
MariaDB [mysql]>update user set plugin=' ' where User='root';
MariaDB [mysql]>flush privileges;
MariaDB [mysql]>exit

尝试不使用sudo重新登录


3
我尝试过,现在我什至无法使用sudo登录。可能必须重新安装mysql :(
Riyafa Abdul Hameed
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.