當(dāng)需要定期修改密碼,又不想影響現(xiàn)有連接的情況下,怎么才能做到無縫切換呢
添加新密碼
ALTER USER 'appuser1'@'host1.example.com' IDENTIFIED BY 'password_b' RETAIN CURRENT PASSWORD;
廢棄舊密碼
ALTER USER 'appuser1'@'host1.example.com' DISCARD OLD PASSWORD;
官網(wǎng)介紹
從 MySQL 8.0.14 開始,用戶帳戶允許擁有雙重密碼,指定為主密碼和輔助密碼。雙密碼功能使得在以下場景中無縫執(zhí)行憑證更改成為可能:
-
一個系統(tǒng)有大量MySQL服務(wù)器,可能涉及到復(fù)制。
-
多個應(yīng)用程序連接到不同的 MySQL 服務(wù)器。
-
必須定期對應(yīng)用程序用于連接服務(wù)器的一個或多個帳戶進(jìn)行憑據(jù)更改。
考慮在上述類型的場景中,當(dāng)一個帳戶只允許使用一個密碼時,必須如何執(zhí)行憑據(jù)更改。在這種情況下,必須在何時進(jìn)行帳戶密碼更改并在所有服務(wù)器中傳播以及何時將所有使用該帳戶的應(yīng)用程序更新為使用新密碼的時間進(jìn)行密切合作。此過程可能會涉及服務(wù)器或應(yīng)用程序不可用的停機(jī)時間。
使用雙密碼,可以更輕松地分階段進(jìn)行憑證更改,無需密切合作,也無需停機(jī):
-
對于每個受影響的帳戶,在服務(wù)器上建立新的主密碼,保留當(dāng)前密碼作為輔助密碼。這使服務(wù)器能夠識別每個帳戶的主密碼或輔助密碼,而應(yīng)用程序可以繼續(xù)使用與以前相同的密碼(現(xiàn)在是輔助密碼)連接到服務(wù)器。
-
密碼更改傳播到所有服務(wù)器后,修改使用任何受影響帳戶以使用帳戶主密碼進(jìn)行連接的應(yīng)用程序。
-
當(dāng)所有應(yīng)用程序從輔助密碼遷移到主密碼后,不再需要輔助密碼,可以將其丟棄。此更改傳播到所有服務(wù)器后,只能使用每個帳戶的主密碼進(jìn)行連接。憑證更改現(xiàn)已完成。
MySQL 通過保存和丟棄輔助密碼的語法實(shí)現(xiàn)雙密碼功能:
-
當(dāng)您分配新的主密碼時, and 語句
RETAIN CURRENT PASSWORD
的子句 會將帳戶當(dāng)前密碼保存為其輔助密碼。 ALTER USERSET PASSWORD -
DISCARD OLD PASSWORD
for 子句 丟棄ALTER USER帳戶輔助密碼,僅保留主密碼。
假設(shè),對于前面描述的憑據(jù)更改場景, 'appuser1'@'host1.example.com'
應(yīng)用程序使用名為 的帳戶連接到服務(wù)器,并且?guī)裘艽a將從 更改 為 。 '*
password_a*'``'*
password_b*'
要執(zhí)行此憑據(jù)更改,請使用ALTER USER
以下命令:
-
在不是副本的每臺服務(wù)器上,建立 新的主密碼,保留當(dāng)前密碼作為輔助密碼:
'*
password_b*'``appuser1
ALTER USER 'appuser1'@'host1.example.com' IDENTIFIED BY 'password_b' RETAIN CURRENT PASSWORD;
-
等待密碼更改在整個系統(tǒng)中復(fù)制到所有副本。
-
修改使用該帳戶的每個應(yīng)用程序 ,以便它使用密碼而 不是 來
appuser1
連接到服務(wù)器 。'*
password_b*'``'*
password_a*'
-
此時,不再需要二級密碼。在每臺不是副本的服務(wù)器上,丟棄輔助密碼:
ALTER USER 'appuser1'@'host1.example.com' ?DISCARD OLD PASSWORD;
-
將丟棄密碼更改復(fù)制到所有副本后,憑證更改即完成。
和RETAIN CURRENT PASSWORD
子句 DISCARD OLD PASSWORD
具有以下作用:
-
RETAIN CURRENT PASSWORD
保留帳戶當(dāng)前密碼作為其輔助密碼,替換任何現(xiàn)有的輔助密碼。新密碼將成為主密碼,但客戶端可以使用該帳戶使用主密碼或輔助密碼連接到服務(wù)器。ALTER USER (例外:如果or語句指定的新密碼SET PASSWORD為空,則即使RETAIN CURRENT PASSWORD
給出了輔助密碼,輔助密碼也將變?yōu)榭?。?/p> -
如果您指定
RETAIN CURRENT PASSWORD
的帳戶的主密碼為空,則該語句將失敗。 -
如果帳戶有輔助密碼,并且您更改其主密碼而不指定
RETAIN CURRENT PASSWORD
,則輔助密碼保持不變。 -
對于ALTER USER,如果您更改分配給該帳戶的身份驗(yàn)證插件,則輔助密碼將被丟棄。如果您更改身份驗(yàn)證插件并指定
RETAIN CURRENT PASSWORD
,則該語句將失敗。 -
對于ALTER USER,
DISCARD OLD PASSWORD
丟棄輔助密碼(如果存在)。該帳戶僅保留其主密碼,客戶端只能使用該帳戶通過主密碼連接到服務(wù)器。
修改輔助密碼的語句需要以下權(quán)限:
-
需要有權(quán)限 APPLICATION_PASSWORD_ADMIN 才能將
RETAIN CURRENT PASSWORD
orDISCARD OLD PASSWORD
子句用于適用于您自己的帳戶的ALTER USER和語句。SET PASSWORD操作您自己的二級密碼需要該權(quán)限,因?yàn)榇蠖鄶?shù)用戶只需要一個密碼。文章來源:http://www.zghlxwxcb.cn/news/detail-803235.html -
如果要允許某個帳戶操縱所有帳戶的輔助密碼,則應(yīng)授予該帳戶該 CREATE USER權(quán)限而不是 APPLICATION_PASSWORD_ADMIN.文章來源地址http://www.zghlxwxcb.cn/news/detail-803235.html
到了這里,關(guān)于mysql 8.0 雙密碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!