我想通过设置root密码来保护mysql。 我成功重置root密码:
MariaDB [(none)]> select Host, User, Password from mysql.user;
+-----------+------+-------------------------------------------+
| Host | User | Password |
+-----------+------+-------------------------------------------+
| localhost | root | *58319282EAB9E38D49CA25844B73DA62C80C2ABC |
+-----------+------+-------------------------------------------+
1 row in set (0.00 sec)
但是,在刷新权限后,重新启动Mysql,我仍然可以在不输入密码的情况下登录mysql(在本地主机上)。
root@myhost:/# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 10.0.29-MariaDB SLE 12 SP1 package
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
连接时如何强制mysql询问密码?谢谢!
答案 0 :(得分:50)
在MySQL表上,你有一个名为plugin的列:
MariaDB [(none)]> SELECT host, user, password, plugin FROM mysql.user LIMIT 0,1;
+-----------+------+-------------------------------------------+--------+
| host | user | password | plugin |
+-----------+------+-------------------------------------------+--------+
| localhost | root | * | |
+-----------+------+-------------------------------------------+--------+
1 row in set (0.00 sec)
如果我没记错的话,mariaDB安装的默认插件是' console'或者' unix_socket',此插件允许您从控制台无密码输入。但是也要禁用密码验证,并且无法从其他客户端连接。
只需使用空('')值更新插件字段,然后使用FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;
有了这个,你就解决了问题。
答案 1 :(得分:2)
我知道这个问题很旧,但是我遇到了同样的问题,下面的步骤解决了我的问题:
在Linux终端上,运行以下命令为root用户设置新密码,如果已经设置了root密码,请跳过此步骤。
mysqladmin --user=root password "newpassword"
登录mysql
mysql -uroot -p
输入“ root”用户密码
在MariaDB控制台上运行以下查询
MariaDB [(none)]> select host,user,password from mysql.user;
您可能会注意到某些带有“用户”列值的记录为“(空),请使用以下查询删除这些记录
MariaDB [(none)]> delete from mysql.user where user='';
MariaDB [(none)]> flush privileges;
Query OK, 2 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye
#$ mysql
ERROR 1045 (28000): Access denied for user ''@'localhost' (using password: NO)
按照上述步骤操作后,您将无法在没有密码的情况下登录mysql。
答案 2 :(得分:2)
我发现我需要更改此内容:
UPDATE mysql.user SET plugin = 'auth_socket' WHERE user = 'root' AND host = 'localhost';
收件人
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND host = 'localhost';
这是密码AFAICT的插件。