不使用 sudo 连接到 mysql 服务器

命令:

mysql -u root -p

给出了错误:

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

但是运行 sudo 特权是有效的:

sudo mysql -u root -p

有没有可能去掉 sudo 需求 ,因为它阻止我在 intellij 中打开数据库?在回答这个问题时,我尝试了以下方法:

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

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

124718 次浏览

在您所回答的问题的注释中,它显示

对象路径中的所有目录进行分析 套接字文件,他们需要有 o + rx 和 sock 文件太(它不是一个 让别人可以修改的好主意)。

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

这似乎工作的 这个问题(你说你看了) ,所以它可能为你以及

错误信息:

“ ERROR 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 再次登录

只有 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

首先用 sudo 登录您的 mysql。

然后使用此代码将 root 用户的“ plugin”列值从“ unix _ socket”或“ auth _ socket”更改为“ mysql _ nate _ 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;

你需要改变算法,接下来的工作,

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

你可使用以下查询:

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

这个查询就足够了。

您可以使用相同的 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

希望这个能帮上忙!

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

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

给你, username = 您喜欢的任何用户名。

password = 任何你喜欢的密码。

这个 回答需要稍微适应 MariaDB 而不是 mysql。

首先使用 sudo 作为 root 用户登录:

$ sudo mysql -uroot

然后更改 Mariadb root 用户:

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

从现在起,不再需要 sudo:

$ mysql -uroot -p

使用版本: 用 readline 5.1为 osx10.15(x86 _ 64)分发10.4.13-MariaDB

用 sudo 登录 mysql: sudo mysql -u root -p

在此之后,删除当前 root@localhost 帐户:

~ MariaDB [(none)]> DROP USER 'root'@'localhost';
~ MariaDB [(none)]> CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
~ MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
~ MariaDB [(none)]> FLUSH PRIVILEGES;