Php

mysql在會話中更改密碼

  • April 25, 2012

我使用以下查詢將密碼從舊雜湊更改為新雜湊

SET SESSION old_passwords=FALSE;
SET PASSWORD = PASSWORD('[your password]');

我在https://stackoverflow.com/questions/1892607/mysql-password-hashing-method-old-vs-new上找到了這個查詢。我換了

$$ your password $$到我自己的密碼。 現在我無法使用我設置的密碼再次登錄我的數據庫。我想知道這個密碼是永遠更改還是會話會過期以及它會過期多長時間。

根據 SET PASSWORD 上的 MySQL 文件

SET PASSWORD 語句為現有的 MySQL 使用者帳戶分配密碼。如果使用 PASSWORD() 或 OLD_PASSWORD() 函式指定密碼,則應給出密碼的文字文本。如果在不使用任一函式的情況下指定密碼,則密碼應為 PASSWORD() 返回的已加密密碼值。

沒有 FOR 子句,此語句設置目前使用者的密碼。任何使用非匿名帳戶連接到伺服器的客戶端都可以更改該帳戶的密碼

但是,您剛剛被閃電擊中,因為同一個網頁上說

重要的

SET PASSWORD 可以記錄在伺服器日誌或歷史文件中,例如 ~/.mysql_history,這意味著任何有權讀取該資訊的人都可以讀取明文密碼。請參閱第 6.1.2 節,“MySQL 中的密碼安全”。

筆記

如果您使用 4.1 之前的客戶端程序連接到 MySQL 4.1 或更高版本的伺服器,請先閱讀第 6.1.2.3 節“MySQL 中的密碼散列”,然後不要使用前面的 SET PASSWORD 或 UPDATE 語句。MySQL 4.1 更改了密碼格式,在某些情況下,如果您更改密碼,之後可能無法連接到伺服器。

可以這麼說,您的密碼更改是永遠的。

如何修復它

假設你的使用者是 myuser@localhost,你可以讓擁有 ALL PRIVILEGES 的人執行它

UPDATE mysql.user SET password=OLD_PASSWORD('[your password]')
WHERE user='myuser' AND host='localhost';
FLUSH PRIVILEGES;

如果你沒有 DBA 但可以重啟 mysql,那麼這樣做

service mysql restart --skip-networking --skip-grant-tables
mysql -e"UPDATE mysql.user SET password=OLD_PASSWORD('[your password]') WHERE user='myuser' AND host='localhost'"
service mysql restart

引用自:https://dba.stackexchange.com/questions/17052