對於使用舊版 JDBC API(即,未使用 X DevAPI 或 X DevAPI for C)連線到伺服器的連線,Connector/C++ 支援不同的用戶端驗證外掛程式和驗證方法,適用於
LDAP 驗證使 Connector/C++(8.0.22 及更高版本)應用程式可以使用簡單 LDAP 驗證,或使用 SCRAM-SHA-1 驗證方法的 SASL LDAP 驗證來連線到 MySQL 伺服器。LDAP 驗證需要使用來自 MySQL 企業版的伺服器。有關 LDAP 驗證外掛程式的更多資訊,請參閱LDAP 可插拔驗證。
Connector/C++ 二進位發行版本包含提供用戶端 LDAP 驗證外掛程式的程式庫,以及外掛程式所需的任何相依程式庫。
在 Connector/C++ 8.0.23 中,已移除對 mysql-client-plugins
套件的相依性。此套件現在僅在 Connector/C++ 應用程式使用具有 LDAP 驗證的商業 MySQL 伺服器帳戶進行連線的主機上才需要。在這種情況下,還必須安裝其他程式庫:使用 RPM 套件安裝的cyrus-sasl-scram
和使用 Debian 套件安裝的libsasl2-modules-gssapi-mit
。這些 SASL 套件提供使用 SCRAM-SHA-256 和 GSSAPI/Kerberos LDAP 驗證方法所需之支援。
如果 Connector/C++ 是從壓縮的 tar 檔案或 Zip 封存檔安裝的,則應用程式需要將 OPT_PLUGIN_DIR
連線選項設定為適當的目錄,以便可以找到捆綁的外掛程式程式庫。(或者,將所需的外掛程式程式庫複製到用戶端程式庫預期的預設目錄。)
例如
sql::ConnectOptionsMap connection_properties;
// To use simple LDAP authentication ...
connection_properties["userName"] = "simple_ldap_user_name";
connection_properties["password"] = "simple_ldap_password";
connection_properties[OPT_ENABLE_CLEARTEXT_PLUGIN]=true;
// To use SASL LDAP authentication using SCRAM-SHA-1 ...
connection_properties["userName"] = "sasl_ldap_user_name";
connection_properties["password"] = "sasl_ldap_scram_password";
// Needed if Connector/C++ was installed from tar file or Zip archive ...
connection_properties[OPT_PLUGIN_DIR] = "${INSTALL_DIR}/lib{64}/plugin";
auto *driver = get_driver_instance();
auto *con = driver->connect(connection_properties);
// Execute statements ...
con->close();
Kerberos 驗證使 Connector/C++ 應用程式能夠為使用 authentication_kerberos
伺服器端驗證外掛程式的帳戶建立連線,前提是正確的 Kerberos 票證可用或可以從 Kerberos 取得。此功能在執行 Linux 的用戶端主機上可用(從 8.0.26 開始)。
在 Windows 上(從 8.0.32 開始),OPT_AUTHENTICATION_KERBEROS_CLIENT_MODE
連線選項可以設定為 SSPI
(預設)或 GSSAPI
。此選項允許在 Windows 上為 authentication_kerberos_client
驗證外掛程式在執行時間選擇 SSPI 和 GSSAPI 之間。Connector/C++ 通過 MIT kerberos 程式庫實作 GSSAPI
模式,並且此模式與 Windows 上的 Java SE 安全性工具(例如,klist 和 kinit 命令)相容。在此模式下,Windows 主機上的票證搜尋僅限於 MIT Kerberos 快取。如果快取中沒有票證,即使 Windows 票證有效,連線也會失敗
以前,Connector/C++ 僅通過 Windows SSPI Kerberos 程式庫支援 Kerberos 驗證(從 8.0.27 開始)。SSPI 無法取得使用 kinit 命令產生的快取憑證。在 SSPI
模式下,如果用戶端使用者未提供密碼,且驗證方法僅考慮 Windows 票證,則 Windows 單一登入票證將用於驗證。如果票證遺失或無效,即使 Kerberos 快取包含有效票證,連線也會失敗。有關更多資訊,請參閱SSPI 模式下 Windows 用戶端的命令。
在下列情況下,可以連線到 Kerberos 驗證的帳戶而無需提供使用者名稱
使用者已指派 Kerberos 主體名稱,存在該主體名稱的 MySQL Kerberos 帳戶,且使用者具有所需的票證。
必須使用
OPT_DEFAULT_AUTH
連線選項將預設驗證方法設定為authentication_kerberos_client
用戶端驗證外掛程式。
只要使用者在 Linux 上的 Kerberos 快取或 Windows 上的 MIT Kerberos 快取中擁有所需的票證(例如,由 kinit 或類似命令建立),就可以在不提供密碼的情況下連線。
SSPI Kerberos 程式庫與 Java SE 安全性工具不相容。若要使用 kinit 命令,用戶端應用程式必須將 OPT_AUTHENTICATION_KERBEROS_CLIENT_MODE
連線選項設定為 GSSAPI
。
如果 Kerberos 快取(或 MIT Kerberos 快取)中不存在所需的票證,且提供了密碼,則 Connector/C++ 會使用該密碼從 Kerberos 取得票證。如果在快取中找到所需的票證,則會忽略提供的任何密碼,並且連線可能會成功即使密碼不正確。
在執行 Windows 的用戶端主機上,您可以通過設定 KRB5_CONFIG
環境變數來覆寫 MIT Kerberos 組態檔案的預設位置,並使用 KRB5CCNAME
環境變數來覆寫預設的 MIT Kerberos 憑證快取名稱(例如,KRB5CCNAME=DIR:/mydir/
)。
有關使用 MIT Kerberos 組態和快取的詳細資訊,請參閱
有關 Kerberos 驗證的更多資訊,請參閱Kerberos 可插拔驗證。
OCI 驗證使 Connector/C++ 應用程式能夠在沒有密碼的情況下為使用 authentication_oci
伺服器端驗證外掛程式的帳戶建立連線,前提是可使用正確的組態項目來對應到特定 Oracle Cloud Infrastructure 租用戶中的一個唯一使用者。此支援已在 Connector/C++ 8.0.27 版本中新增。
為了確保正確的帳戶對應,用戶端 Oracle Cloud Infrastructure 組態必須包含要用於驗證的 API 金鑰的指紋(fingerprint
項目)和具有 API 金鑰私密部分的 PEM 檔案的位置(key_file
項目)。這兩個項目都應在組態檔案的 [DEFAULT]
設定檔中指定。在 Connector/C++ 8.0.33 中,OPT_OCI_CLIENT_CONFIG_PROFILE
連線選項允許在組態檔案中選擇要用於驗證的設定檔。預設情況下,OPT_OCI_CLIENT_CONFIG_PROFILE
的值為 [DEFAULT]
設定檔。
除非使用 OPT_OCI_CONFIG_FILE
連線選項指定組態檔案的替代路徑,否則將使用以下預設位置
Linux 或 Posix 主機類型上的
~/.oci/config
Windows 主機類型上的
%HOMEDRIVE%%HOMEPATH%/.oci/config
如果未將 MySQL 使用者名稱作為連線選項提供,則會替換作業系統使用者名稱。具體來說,如果用戶端存在私密金鑰和正確的 Oracle Cloud Infrastructure 組態,則可以在不提供任何選項的情況下建立連線。
為了支援 Oracle Cloud Infrastructure 臨時金鑰驗證,Connector/C++ 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/C++ 會將一個 JSON 屬性(名稱為 "token"
)傳送到伺服器,其值是從 security_token_file
欄位中提取的。如果設定檔中引用的目標檔案不存在,或者檔案超過指定的最大值,則 Connector/C++ 會終止動作並回傳帶有原因的例外狀況。
如果符合以下情況,Connector/C++ 會在 JSON 酬載中傳送空的 token 值:
安全性 token 檔案為空。
找到組態選項
security_token_file
,但組態檔案中的值為空。
在所有其他情況下,Connector/C++ 會將安全性 token 檔案的內容完整地新增至 JSON 文件中。
從 Connector/C++ 8.0.28 開始,應用程式可以使用多因素驗證來建立連線,因此在連線時最多可以指定三個密碼。 OPT_PASSWORD1
、OPT_PASSWORD2
和 OPT_PASSWORD3
連線選項可用於指定第一個、第二個和第三個多因素驗證密碼。
OPT_PASSWORD1
是現有 OPT_PASSWORD
選項的別名;如果兩者都提供,則會忽略 OPT_PASSWORD
。有關此驗證選項的更多資訊,請參閱多因素驗證。
MySQL Server 的 WebAuthn 驗證支援使用網頁瀏覽器、智慧卡、安全性金鑰和生物識別讀取器等裝置。WebAuthn 驗證同時支援 FIDO 和 FIDO2 標準。為確保使用舊版 JBDC API 的用戶端應用程式在使用者預期與 FIDO/FIDO2 裝置互動時收到通知,Connector/C++ 8.2.0 (和更新版本) 在 MySQL_Driver
類別的 setCallback()
方法中新增了一個名為 WebAuthn_Callback
的回呼引數。WebAuthn_Callback
類別有一個名為 ActionRequested()
的回呼方法。
class WebAuthn_Callback
{
public:
WebAuthn_Callback(std::function<void(SQLString)>);
/**
* Override this message to receive WebAuthn Action Requests
*/
virtual void ActionRequested(sql::SQLString msg);
};
針對使用 WebAuthn 驗證的帳戶,明確設定 WebAuthn_Callback
回呼。
在 Windows 上,用戶端應用程式必須以管理員身分執行。這是 fido2.dll
程式庫的要求,該程式庫由 authentication_webauthn
外掛程式使用。
用戶端應用程式有兩個選項可以從 Connector 取得回呼:
-
將函式或 lambda 傳遞給
WebAuthn_Callback
。driver->setCallBack(WebAuthn_Callback([](SQLString msg) {...}));
-
實作虛擬方法
ActionRequested
。class MyWindow : public WebAuthn_Callback { void ActionRequested(sql::SQLString msg) override; }; MyWindow window; driver->setCallBack(window);
設定新的回呼總是會移除先前的回呼。若要停用作用中的回呼並還原預設行為,請傳遞 nullptr
作為函式回呼。範例
driver->setCallBack(WebAuthn_Callback(nullptr));
有關 WebAuthn 驗證的更多資訊,請參閱WebAuthn 可插拔驗證。