允许linux root用户mysql root访问而无需密码


28

在cPanel上,当我以root用户身份登录并键入“ mysql”而没有主机名和密码时,它使我可以直接访问mysql root用户。

我想对我的一台非面板服务器执行此操作,在该服务器中,Linux根用户以与cPanel上相同的方式获得较少的密码登录mysql根用户。

这可能吗 ?

Answers:


53

最简单的方法是使用〜/ .my.cnf文件的client部分,然后在其中添加凭据。

[client]
user=root
password=somepassword
...

最好也使该文件只能由root读取。


1
是的,这
可行

9
我需要指出一个潜在的安全问题。.您需要小心一点,不要/etc/my.cnf在mysql服务器用来启动的地方进行编辑。如果您将mysql根用户放在/etc/my.cnfANYONE中,则可以在每个数据库上使用具有所有特权的mysql服务器,而无需输入密码。Iain指向.my.cnf根用户家中的shell用户自己,这是正确的。
Koen van der Rijt

如果没有〜/ .my.cnf文件怎么办?如果创建它并重新启动mysqld,那么我应该能够做到这一点吗?
Amalgovinus

21

对于mysql 5.7+,如果您为初始设置设置了空密码,则mysql将自动auth_socket用作策略。尝试不更改策略即更新密码将没有结果。如果您的用户是,则始终可以登录而无需使用密码root

解决方案 运行以下命令来更改身份验证策略并设置密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ''

参考:https : //www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/


3
我必须在末尾添加一个空字符串以使其起作用:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
kramer65 '18

有趣的是,@ kramer仅在我将其设置为您时才有效... BY "";。谢谢!
Juan Antonio

它将passwiord更改为“ ANY_PASSWORD”,并且未清除密码。要清除并不使用密码登录,请将其设置为空字符串。
Fernando Kosh

7

从MySQL 5.6.6开始,您可以使用mysql_config_editor创建一个加密文件,该文件将自动登录:

mysql_config_editor set --login-path=client --host=localhost --user=root --password

然后在出现提示时输入密码。

注意:如果您的密码中包含“#”以及其他字符,请在输入密码时使用单引号。


您能详细说明一下单引号吗?它会提示您在终端上输入密码,您是否将密码用单引号引起来
user2299958

是的,我发现如果输入的字符带有特殊字符,则不带引号的输入将不起作用。因此,在出现提示时,只需输入'(单引号),然后输入密码,然后输入'。
布赖恩·德林2015年

0

制作一个仅包含mysql root密码且只有root可以读取的文件。

# ls -l /root/.mysqlpw 
-rw------- 1 root root 7 2013-08-19 13:24 /root/.mysqlpw

您可以使用导入数据库

# mysql -u root -p`cat /root/.mysqlpw ` yourdatabase < databasedump.sql

或连接到您的数据库并发出mysql命令

# mysql -u root -p`cat /root/.mysqlpw ` yourdatabase
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20460
Server version: 5.1.63-0ubuntu0.10.04.1 (Ubuntu)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| yourdatabase       |
+--------------------+
3 rows in set (0.00 sec)

mysql> show tables;
...

5
这比其他答案要复杂得多。而且您的密码太短。:)
迈克尔·汉普顿

8
不要这样做。它将密码放在任何人都可以使用ps(1)读取的命令行上
camh

这确实不是一个好主意
费尔南多·科什
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.