Mysql

儘管設置了密碼,但無需輸入密碼即可以root身份訪問MySQL是否正常?

  • April 17, 2019

我剛剛在 Ubuntu 18.04 上安裝了 MySQL(Ver 14.14 Distrib 5.7.22),我發現了一些奇怪的東西:

我安裝了 MySQL 並用於mysql_secure_installation為 root 設置密碼,但是一旦我使用任何具有 sudo 權限的使用者登錄 SSH,我就可以簡單地訪問 MySQL,而不會被提示通過mysql -u root或通過mysql -u root -p& 只需點擊 ENTER 輸入密碼(當詢問“輸入密碼:”)。

這是正常的嗎?

我從以前的版本中知道,當我想訪問 MySQL 時,我總是必須輸入密碼,即使使用 sudo。

Ubuntu 的 MySQL 軟體包(基於 Debian 的)預設使用該auth_socket外掛。使用此外掛從本地電腦連接時不需要密碼,但伺服器會辨識作業系統使用者並匹配該使用者。因此,如果您是系統上的 root 並登錄,您將成為 root。這避免了必須首先設置 MySQL root 密碼。

另見https://wiki.debian.org/MySql

你應該跑SHOW GRANTS FOR 'root'@'localhost';

如果它在結果中顯示這一行:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA unix_socket WITH GRANT OPTION

而不是這一行:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' WITH GRANT OPTION

這意味著 root 使用者由 unix 套接字憑據自動進行身份驗證。如果你不想要這個,你可以發出一個手動的 GRANT 命令(不要這樣做),它將覆蓋以前的命令,例如:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'mysecurepassword' WITH GRANT OPTION;

現在 mysql 會詢問密碼,但任何能夠訪問 unix 套接字的使用者都可以使用(所以預設情況下只使用mysql -u root -p而不是 root 但當然知道密碼)。您必須考慮哪個更安全。

我不知道為什麼mysql_secure_installation不解釋這一點。

引用自:https://serverfault.com/questions/912941