解決 MariaDB無密碼就可以登錄的問題


問題:

困擾了很久的問題,,

使用apt-get來安裝mysql,安裝好之后發現安裝的是 MariaDB,如下,無需密碼既可以登錄了。即使使用mysqladmin設置好密碼,用密碼登錄可以,不用密碼登錄也可以

復制代碼
1 root@ubuntu:/etc/mysql# mysql
2 Welcome to the MariaDB monitor.  Commands end with ; or \g.
3 Your MariaDB connection id is 35
4 Server version: 10.0.31-MariaDB-0ubuntu0.16.04.2 Ubuntu 16.04
5 
6 Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
7 
8 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
復制代碼

排查思路:

第一看看my.conf有沒有skip-grant-tables,跳過密碼驗證

過濾了下沒有

復制代碼
 1 root@ubuntu:~# cd /etc/mysql/
 2 root@ubuntu:/etc/mysql# pwd
 3 /etc/mysql
 4 root@ubuntu:/etc/mysql# ls -l
 5 總用量 36
 6 drwxr-xr-x 2 root root 4096 12月  7 18:05 conf.d
 7 -rw------- 1 root root  277 12月  7 17:31 debian.cnf
 8 -rw------- 1 root root  317 12月  7 17:05 debian.cnf-5.7
 9 -rwxr-xr-x 1 root root 1426 7月   1 04:26 debian-start
10 -rw-r--r-- 1 root root  869 7月   1 04:26 mariadb.cnf
11 drwxr-xr-x 2 root root 4096 12月  7 18:08 mariadb.conf.d
12 lrwxrwxrwx 1 root root   24 12月  7 17:18 my.cnf -> /etc/alternatives/my.cnf
13 -rw-r--r-- 1 root root  839 1月  22  2017 my.cnf.fallback
14 -rw-r--r-- 1 root root  682 2月   4  2017 mysql.cnf
15 drwxr-xr-x 2 root root 4096 12月  7 18:08 mysql.conf.d
16 root@ubuntu:/etc/mysql# grep "skip-grant-tables"  -r
17 root@ubuntu:/etc/mysql# 
復制代碼

看看my.cnf里面是不是把密碼寫進去了,查找了相關.cnf文件去看了看也沒有

復制代碼
 1 root@ubuntu:~# find / -name "*.cnf"
 2 /usr/share/ssl-cert/ssleay.cnf
 3 /usr/share/dovecot/dovecot-openssl.cnf
 4 /usr/lib/ssl/openssl.cnf
 5 /etc/ssl/openssl.cnf
 6 /etc/alternatives/my.cnf
 7 /etc/mysql/my.cnf
 8 /etc/mysql/mariadb.cnf
 9 /etc/mysql/conf.d/mysqldump.cnf
10 /etc/mysql/conf.d/mysql.cnf
11 /etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf
12 /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
13 /etc/mysql/mariadb.conf.d/50-client.cnf
14 /etc/mysql/mariadb.conf.d/50-server.cnf
15 /etc/mysql/debian.cnf
16 /var/lib/dpkg/alternatives/my.cnf
17 root@ubuntu:~# 
復制代碼

不過有個小發現,

復制代碼
 1  vim /etc/mysql/debian.cnf
 2 # Automatically generated for Debian scripts. DO NOT TOUCH!
 3 [client]
 4 host     = localhost
 5 user     = root
 6 password = 
 7 socket   = /var/run/mysqld/mysqld.sock
 8 [mysql_upgrade]
 9 host     = localhost
10 user     = root
11 password = 
12 socket   = /var/run/mysqld/mysqld.sock
13 basedir  = /usr
14 
15 看了說明是以上由腳本生成,不要改動,
16 雖然這樣寫,我也去改了下,加上密碼,重啟還是不行
復制代碼

最后的最后,,,,去google了很久,終於有發現了,是用戶插件問題。

參見這里:https://nixmash.com/post/fix-for-mysql-rootlocalhost-access-denied-on-new-installs

第一我去跟安裝正常的mysql來比較下,如下

復制代碼
1 正常mysql
2 mysql> select user, plugin from mysql.user where plugin = 'mysql_native_password';
3 +-----------+-----------------------+
4 | user      | plugin                |
5 +-----------+-----------------------+
6 | root      | mysql_native_password |
7 +-----------+-----------------------+
8 8 rows in set (0.00 sec)
復制代碼
復制代碼
1 不正常的
2 
3 MariaDB [(none)]> select user, plugin from mysql.user;
4 +------+-------------+
5 | user | plugin      |
6 +------+-------------+
7 | root | unix_socket |
8 +------+-------------+
9 1 row in set (0.00 sec)
復制代碼

看到這里應該發現問題了,按照正常的修改就行了

如下:

復制代碼
 1 sudo service mysql stop
 2 sudo mysqld_safe --skip-grant-tables
 3 進去mysql執行如下命令:
 4 MariaDB [(none)]> UPDATE mysql.user SET authentication_string = PASSWORD('mypassword'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
 5 MariaDB [(none)]> FLUSH PRIVILEGES;
 6 驗證:
 7 MariaDB [(none)]> select user, plugin from mysql.user
 8     -> ;
 9 +------+-----------------------+
10 | user | plugin                |
11 +------+-----------------------+
12 | root | mysql_native_password |
13 +------+-----------------------+
14 1 row in set (0.01 sec)
15 
16 先殺死mysql  kill -9 pid
17 啟動:
18 sudo service mysql start
復制代碼

最后驗證下:需要密碼了

root@ubuntu:~# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
root@ubuntu:~# 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM