MySQL 8.0.27 增加了多因素身份認證(MFA)功能,可以為壹個用戶指定多重的身份校驗。為此還引入了新的系統變量 authentication_policy ,用於管理多因素身份認證功能。
我們知道在 MySQL 8.0.27 之前,create user 的時候可以指定壹種認證插件,在未明確指定的情況下會取系統變量 default_authentication_plugin的值。default_authentication_plugin 的有效值有3個,分別是 mysql_native_password ,sha256_password ,caching_sha2_password ,這個3個認證插件是內置的、不需要註冊步驟的插件。
在 MySQL 8.0.27 中由 authentication_policy 來管理用戶的身份認證,先啟個 mysql
同時查看下 authentication_policy 和 default_authentication_plugin 的值
我們看到 authentication_policy 的默認值是*,,
第1個元素值是星號( ),表示可以是任意插件,默認值取 default_authentication_plugin 的值。如果該元素值不是星號( ),則必須設置為 mysql_native_password ,sha256_password ,caching_sha2_password 中的壹個。
第2,3個元素值為空,這兩個位置不能設置成內部存儲的插件。如果元素值為空,代表插件是可選的。
建個用戶看壹下,不指定插件名稱時,自動使用默認插件 caching_sha2_password
指定插件名稱時,會使用到對應的插件
嘗試變更壹下 authentication_policy 第壹個元素的值,設置為 sha256_password
再次創建壹個用戶,不指定插件的名稱
可以看到默認使用的插件是 sha256_password ,說明當 authentication_policy 第壹個元素指定插件名稱時,default_authentication_plugin 被棄用了。
首先我們恢復 authentication_policy 至默認值
創建壹個雙重認證的用戶。如下創建失敗了,因為不可以同時用2種內部存儲插件。
那我們來裝壹個可插拔插件 Socket Peer-Credential
再創建壹個雙重認證的用戶
創建成功,之後用戶'wei4'@'localhost'必須提供正確的密碼,且同時本地主機的登錄用戶為 root 時,才會驗證通過。
來試壹下,以主機 root 用戶身份,提供正確的密碼 123 ,登錄成功。
修改壹下,將'wei4'@'localhost'要求的主機登錄用戶修改為wei4
再次以主機 root 用戶身份,提供正確的密碼 123 ,登錄失敗
因此可以認定雙重身份認證機制是生效的。MySQL 8.0.27 最多可以對壹個用戶設置三重的身份認證,這裏不再做展示說明。
簡單總結下,已有的密碼口令身份驗證很適合網站或者應用程序的訪問,但是在特定的情況下 如網絡在線金融交易方面可能還是不夠安全。多因素身份認證(MFA)功能的引入,可以在壹定程度上提升數據庫系統的安全性。
/doc/refman/8.0/en/server-system-variables.html#sysvar_authentication_policy