MySQL Connector/NET 實作了 MySQL 伺服器可以呼叫以驗證使用者的各種身份驗證外掛程式。可插拔的身份驗證讓伺服器可以根據您的應用程式在建立連線時傳遞給伺服器的使用者名稱與主機名稱,判斷要套用哪個外掛程式。如需身份驗證程序的完整說明,請參閱可插拔的身份驗證。
Connector/NET 提供下列身份驗證外掛程式與方法
如需一般資訊,請參閱Kerberos 可插拔身份驗證。
應用程式與 MySQL 伺服器能夠使用 Kerberos 身份驗證協定來驗證 MySQL Enterprise Edition 使用者帳戶與服務。透過 authentication_kerberos_client
外掛程式,使用者與伺服器都能驗證彼此的身份。密碼永遠不會透過網路傳送,而且 Kerberos 協定訊息會受到保護,不會遭到竊聽與重播攻擊。伺服器端外掛程式僅在 Linux 上支援。
Defaultauthenticationplugin
連接字串選項是支援無使用者與無密碼 Kerberos 身份驗證所必需的(請參閱僅適用於傳統 MySQL 協定的選項)。
啟用 Kerberos 身份驗證的可用性與需求會因主機類型而異。Connector/NET 不會為在 macOS 上執行的 .NET 應用程式提供 Kerberos 身份驗證。在 Windows 上,可以使用 KerberosAuthMode
連接選項來設定 Kerberos 模式(請參閱第 4.5 節「Connector/NET 連線選項參考」)。
在 Linux 與 Windows 上執行的應用程式會根據下列介面參與 Kerberos 身份驗證
通用安全性服務應用程式介面 (GSSAPI)
最低版本
適用於傳統 MySQL 協定連線的 Connector/NET 8.0.26。僅在 Linux 上支援。
適用於透過 MIT Kerberos 程式庫的傳統 MySQL 協定連線的 Connector/NET 8.0.32。僅在 Windows 上支援。
每個用戶端系統都必須安裝 MIT Kerberos,才能讓 MySQL 伺服器驗證 Connector/NET 的請求票證。需要 Linux 的
libgssapi_krb5.so.2
程式庫。在 Windows 上,當透過 MIT Kerberos 程式庫使用 GSSAPI 時,請使用KRB5_CONFIG
和KRB5CCNAME
環境變數來指定設定與快取位置。如需連線程序概觀,請參閱Linux 用戶端的連線命令。
Windows 的安全性支援提供者介面 (SSPI)
最低版本:適用於傳統 MySQL 協定連線的 Connector/NET 8.0.27。僅在 Windows 上支援。
Connector/NET 使用 SSPI/Kerberos 進行身份驗證。在 Windows 上,SSPI 會實作 GSSAPI。SSPI 與 GSSAPI 之間的行為差異包括
設定。 Windows 用戶端不使用任何外部程式庫或 Kerberos 設定。例如,使用 GSSAPI,您可以設定票證授權票證 (TGT) 的到期時間、金鑰散發中心 (KDC) 連接埠等等。使用 SSPI,您無法設定任何這些選項。
TGT 票證快取。 如果您在
SSPI
模式中提供使用者名稱與密碼以進行身份驗證,則這些認證可以從 Windows 記憶體快取中取得,但取得的票證不會儲存在 Kerberos 快取中。每次都會取得新票證。無使用者與無密碼身份驗證。 在
SSPI
模式中,會使用 Windows 登入使用者名稱與認證。Windows 用戶端必須是伺服器的 Active Directory 網域的一部分,才能成功登入。
如需連線程序概觀,請參閱SPPI 模式中 Windows 用戶端的連線命令。
如需一般資訊,請參閱LDAP 可插拔身份驗證。
以 SASL 為基礎的 LDAP 身份驗證需要 MySQL Enterprise Edition,而且只能用於建立傳統 MySQL 協定連線。此身份驗證協定適用於在 Linux、Windows(部分支援)上執行的應用程式,但不適用於 macOS。
最低版本
Linux 與 Windows 上的 Connector/NET 8.0.22 (
SCRAM-SHA-1
)。Linux 與 Windows 上的 Connector/NET 8.0.23 (
SCRAM-SHA-256
)。僅在 Linux 上的 Connector/NET 8.0.24 (
GSSAPI
)。每個用戶端系統都必須安裝 MIT Kerberos,才能讓 MySQL 伺服器驗證 Connector/NET 的請求票證。必須將
authentication_ldap_sasl
外掛程式設定為使用GSSAPI
機制,而且必須以下列方式識別應用程式使用者IDENTIFIED WITH 'authentication_ldap_sasl'
需要 Linux 的
libgssapi_krb5.so.2
程式庫。
最低版本:僅適用於傳統 MySQL 協定連線的 Connector/NET 8.0.27。
Connector/NET 支援 Oracle Cloud Infrastructure 可插拔身份驗證,這讓 .NET 應用程式能夠以安全的方式存取 HeatWave Service,而不需要使用密碼。此可插拔身份驗證不支援 .NET Framework 4.5。x
實作。
此類型連線的先決條件包括存取租用戶、運算執行個體、連接到私人網路的 DB 系統,以及正確設定的群組、區隔和原則。Oracle Cloud Infrastructure 管理員可以為 MySQL 使用者帳戶提供基本設定。
此外,在嘗試連線之前,DB 系統必須安裝並載入伺服器端身份驗證外掛程式。Connector/NET 會實作用戶端身份驗證外掛程式。
在身份驗證期間,用戶端外掛程式會從中取得簽署金鑰檔案的用戶端使用者的 Oracle Cloud Infrastructure 設定檔。可以使用 ociConfigFile
連線選項來指定設定檔的位置;否則,會使用預設位置。在 Connector/NET 8.0.33 中,OciConfigProfile
連線選項允許在設定檔中選取用於身份驗證的設定檔。然後,Connector/NET 會簽署從伺服器收到的權杖,使用權杖來建立傳回給伺服器的 SHA256 RSA 簽章,並等待身份驗證程序的成功或失敗。
為了支援 Oracle Cloud Infrastructure 暫時金鑰型身份驗證,Connector/NET 8.0.33(以及更新版本)會從 security_token_file
項目中取得權杖檔案的位置。例如
[DEFAULT]
fingerprint=59:8a:0b[...]
key_file=~/.oci/sessions/DEFAULT/oci_api_key.pem
tenancy=ocid1.tenancy.oc1.[...]
region=us-ashburn-1
security_token_file=~/.oci/sessions/DEFAULT/token
Connector/NET 會將一個 JSON 屬性(名稱為 "token"
)連同從 security_token_file
欄位提取的值傳送至伺服器。如果設定檔中參考的目標檔案不存在,或檔案超過指定的最大值,則 Connector/NET 會終止動作並傳回一個包含原因的例外狀況。
如果發生以下情況,Connector/NET 會在 JSON 酬載中傳送一個空的權杖值:
安全性權杖檔案為空。
找到
security_token_file
組態選項,但組態檔案中的值為空。
在所有其他情況下,Connector/NET 會將安全性權杖檔案的內容完整地新增至 JSON 文件。
潛在的錯誤情況包括:
在 OCI 組態條目 'key_file' 給定的位置找不到私鑰。
Connector/NET 在指定的位置找不到私鑰。
OCI 組態條目 'key_file' 並未參考有效的金鑰檔案。
Connector/NET 無法載入或使用指定的私鑰。
OCI 組態檔案未包含 'fingerprint' 或 'key_file' 條目。
組態檔案缺少
fingerprint
條目、key_file
條目或兩者皆缺。無法讀取 OCI 組態檔案。
Connector/NET 無法找到或載入組態檔案。請確認
ociConfigFile
值與檔案的位置相符。找不到或未安裝 OCI SDK。
Connector/NET 無法在執行階段載入 Oracle Cloud Infrastructure SDK 程式庫。
Connector/NET 會參考 Oracle Cloud Infrastructure SDK 程式庫中的 OCI.DotNetSDK.Common
NuGet 套件來讀取組態檔案條目值,並且此套件必須可用。
若要管理 .NET 專案的大小,請僅包含驗證所需的套件,而非程式庫中的完整套件集。
有關使用方式和支援的具體詳細資訊,請參閱 SDK 和 CLI 組態檔案。
如需一般資訊,請參閱WebAuthn 可插拔驗證。
MySQL Enterprise Edition 支援使用智慧卡、安全金鑰和生物識別讀取器等裝置對 MySQL Server 8.2.0 (及更高版本) 進行驗證。此驗證方法基於 FIDO 和 FIDO2 標準,並使用一對外掛程式,伺服器端的 authentication_webauthn
和用戶端端的 authentication_webauthn_client
。Connector/NET 8.2.0 支援用戶端 WebAuthn 驗證外掛程式。
WebAuthn 驗證方法可以直接用於單因素驗證 (1FA),也可以與現有的 MySQL 驗證方法結合使用,以支援使用 2FA 或 3FA 的帳戶。Connector/NET 提供回呼機制,通知應用程式使用者預期會透過其驗證器與 FIDO/FIDO2 裝置互動。例如:
public void OpenConnection()
{
using(var connection = new MySQLConnection("host=foo; .. "))
connection.WebAuthnActionRequested += WebAuthnActionRequested;
connection.Open();
// ...
}
public void WebAuthnActionRequested()
{
Console.WriteLine("Please insert WebAuthn device and perform gesture action for authentication to complete.");
}
如果滿足以下要求,Connector/NET 會通知應用程式,預期使用者會與 FIDO/FIDO2 裝置互動:
FIDO/FIDO2 裝置必須針對與每個使用者帳戶相關聯的特定驗證因素進行註冊。
應用程式、Connector/NET 和 FIDO/FIDO2 裝置必須在同一主機或信任的網路內可用。
在 Windows 上,應用程式必須以管理員身分執行,才能存取所需的
libfido2
程式庫,該程式庫必須位於用戶端上。
如果使用者裝置在合理的時間間隔後沒有互動,驗證程序將終止。
相關的 authentication_fido_client
外掛程式和 FidoActionCallback
回呼 (兩者均在 Connector/NET 8.0.29 中新增) 已在 Connector/NET 8.4.0 中移除,以支援使用 WebAuthn 驗證。
所有版本的 Connector/NET 都支援。如需一般資訊,請參閱Windows 可插拔驗證。
MySQL Connector/NET 應用程式可以使用 Windows 原生驗證外掛程式驗證到 MySQL 伺服器。已登入 Windows 的使用者可以根據其環境中的資訊,從 MySQL 用戶端程式連線至伺服器,而無需指定額外的密碼。介面與 MySql.Data.MySqlClient 物件相符。若要啟用,請將 Integrated Security
傳遞到連線字串,值為 yes
或 sspi
。
傳遞使用者 ID 是可選的。設定 Windows 驗證時,會建立一個 MySQL 使用者,並將其設定為由 Windows 驗證使用。依預設,此使用者 ID 名為 auth_windows
,但可以使用不同的名稱定義。如果使用預設名稱,則從 Connector/NET 將使用者 ID 傳遞到連線字串是可選的,因為它將使用 auth_windows
使用者。否則,必須使用標準使用者 ID 元素將名稱傳遞到連線字串。
最低版本:僅適用於傳統 MySQL 通訊協定連線的 Connector/NET 8.0.11。如需一般資訊,請參閱快取 SHA-2 可插拔驗證。
最低版本:僅適用於傳統 MySQL 通訊協定連線的 Connector/NET 8.0.22。如需一般資訊,請參閱用戶端明文可插拔驗證。
mysql_clear_password
需要與伺服器的安全連線,該連線由用戶端的任一條件滿足:
SslMode 連線選項的值不是
Disabled
或None
(在 Connector/NET 8.0.29 中已棄用)。值依預設設定為Preferred
。對於 Unix 網域通訊端,ConnectionProtocol 連線選項設定為
unix
。
所有版本的 Connector/NET 都支援建立傳統 MySQL 通訊協定和 X 通訊協定連線。如需一般資訊,請參閱原生可插拔驗證。
自 MySQL Server 8.4.0 起,預設會停用 mysql_native_password
外掛程式,自 MySQL Server 9.0.0 起會移除。
最低版本:適用於傳統 MySQL 通訊協定連線的 Connector/NET 8.0.11 或採用 MYSQL41
機制的 X 通訊協定連線 (請參閱 Auth 連線選項)。如需一般資訊,請參閱SHA-256 可插拔驗證。
自 MySQL Server 8.0.16 起,已棄用 sha256_password
外掛程式,並將在未來版本中移除。