Mysql
如何驗證 MySQL 8.0+ 中是否存在具有“密碼”的使用者@主機?
我為應用程序編寫健全性檢查腳本。其中一項測試應該驗證 MySQL 中是否存在具有“密碼”的給定使用者@主機。我正在使用簡單的本機雜湊密碼。在 MySQL5.7- 中有一個
PASSWORD()
功能可以讓我查詢mysql.user
和驗證使用者是否存在並且密碼是否匹配。有沒有辦法在 MySQL8.0+ 中完成這個?MySQL 5.7 中的文件頁面PASSWORD()
不提供任何替代方案,並且該功能在 MySQL 8.0 中被刪除。我可以簡單地嘗試再次添加使用者,但我覺得我的腳本應該知道並使用預期的憑據註冊一個缺少使用者的事件。
請注意,我不一定需要生成密碼雜湊,我只是想驗證給定的使用者/密碼是否存在。這需要自動化,因此諸如“嘗試使用主機上的使用者/密碼登錄”之類的解決方案不計在內**,因為我可能無法訪問主機**
實際上,有一個 MySQL(真正的 Oracle)沒有提到的替代方案。
- 回來
Apr 22, 2015
,我發布了密碼函式的算法- 如果您使用 mysql_native_password 外掛創建使用者,MySQL 8.0 仍會將 PASSWORD 函式輸出儲存在 authentication_string 列中。
這是算法
SET @plaintextpassword = 'whatever password you want'; SELECT CONCAT('*',UPPER(SHA1(UNHEX(SHA1(@plaintextpassword)))));
給予信貸
我首先從一家名為 PalominoDB 的公司的部落格中了解到這一點。他們把名字改成了黑鳥。Pythian 購買了黑鳥。Pythian 現在將其作為具有此算法的部落格文章:MySQL PASSWORD() 中的雜湊算法