连接到没有sudo的mysql服务器

Riy*_*eed 35 mysql sudo

命令:

mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

给出错误:

ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Run Code Online (Sandbox Code Playgroud)

但运行sudo权限,有效:

sudo mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

是否有可能摆脱sudo要求,因为它阻止我在intellij中打开数据库?我在这个问题的答案中尝试了以下内容连接到没有sudo的本地MySQL服务器:

sudo chmod -R 755 /var/lib/mysql/
Run Code Online (Sandbox Code Playgroud)

这没有帮助.上面的问题引发了不同的错误

Riy*_*eed 58

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

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

GRANT ALL PRIVILEGES ON database_name.* TO 'newuser'@'localhost';
Run Code Online (Sandbox Code Playgroud)

现在newuser可以登录而无需sudo要求:

mysql -u newuser -p
Run Code Online (Sandbox Code Playgroud)

  • 对于任何想知道密码可能是什么的人来说,它是“IDENTIFIED BY”之后的字符串,在这种情况下只是“密码” (2认同)

小智 22

你需要改变算法.为我工作,

mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
mysql > FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)


小智 18

首先用sudo登录你的mysql.

然后使用此代码将root用户的"插件"coloumn值从"unix_socket"更改为"mysql_native_password".

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

FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

最后重启mysql服务.而已.

如果您想了解更多信息,请查看链接

  • 在我的情况下,插件值是“auth_socket”。 (2认同)
  • `sudo service mysql restart` 重新启动。 (2认同)
  • 这是所有列出的答案中唯一对我有用的答案(MariaDB v15.1)。 (2认同)

小智 8

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

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'username'@'localhost';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

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

password= 您喜欢的任何密码。


Kee*_*asa 7

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

使用SUDO连接到MY-SQL

sudo mysql -u root
Run Code Online (Sandbox Code Playgroud)

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

DROP USER 'root'@'localhost';
Run Code Online (Sandbox Code Playgroud)

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

CREATE USER 'root'@'%' IDENTIFIED BY '';
Run Code Online (Sandbox Code Playgroud)

向新用户授予权限(ROOT)

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
Run Code Online (Sandbox Code Playgroud)

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

FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

现在一切都很好。以防万一,请检查是否创建了新的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)
Run Code Online (Sandbox Code Playgroud)

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

mysql -u root
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助!

  • 为我工作。我所做的唯一更改是将 '%' 替换为 'localhost' (2认同)
  • 杰出的!这应该是公认的答案。正是我正在寻找的内容,正如您在详细记录的步骤中解释的那样! (2认同)

小智 5

您可以使用以下查询:

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
Run Code Online (Sandbox Code Playgroud)

这个查询就足够了。