对于使用遗留 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 Enterprise Edition 发行版的服务器。有关 LDAP 身份验证插件的更多信息,请参阅 LDAP 可插入身份验证。
连接器/C++ 二进制发行版包括提供客户端 LDAP 身份验证插件的库,以及插件所需的任何依赖库。
mysql-client-plugins
在 Connector/C++ 8.0.23 中,删除了对包
的依赖
。现在仅在连接器/C++ 应用程序使用具有 LDAP 身份验证的商业 MySQL 服务器帐户建立连接的主机上才需要此软件包。在这种情况下,还必须安装额外的库:
cyrus-sasl-scram
用于使用 RPM 包
libsasl2-modules-gssapi-mit
的安装和用于使用 Debian 包的安装。这些 SASL 包提供了对 LDAP 使用 SCRAM-SHA-256 和 GSSAPI/Kerberos 身份验证方法所需的支持。
如果 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 身份验证使连接器/C++ 应用程序能够为使用服务器端身份验证插件的帐户建立连接
authentication_kerberos
,前提是正确的 Kerberos 票证可用或可以从 Kerberos 获得。此功能在运行 Linux(从 8.0.26 开始)和 Windows(从 8.0.27 开始)的客户端主机上可用。
在这些情况下,无需提供用户名即可连接到 Kerberos 身份验证的帐户:
用户已分配 Kerberos 主体名称,存在该主体名称的 MySQL Kerberos 帐户,并且用户具有所需的票证。
必须 使用连接选项 将默认身份验证方法设置为
authentication_kerberos_client
客户端身份验证插件 。OPT_DEFAULT_AUTH
如果用户在 Kerberos 缓存中有所需的票据(例如,由kinit或类似命令创建),则无需提供密码即可连接。
如果 Kerberos 缓存中不存在所需的票证并且提供了密码,Connector/C++ 会使用该密码从 Kerberos 获取票证。如果在缓存中找到所需的票证,则忽略任何给定的密码,即使密码不正确,连接也可能成功。
有关 Kerberos 身份验证的更多信息,请参阅 Kerberos 可插入身份验证。
OCI 身份验证使连接器/C++ 应用程序能够在没有密码的情况下为使用
authentication_oci
服务器端身份验证插件的帐户建立连接,前提是正确的配置条目可用于映射到特定 Oracle Cloud Infrastructure 租户中的一个唯一用户。此支持是在 Connector/C++ 8.0.27 版本中添加的。
为确保正确的帐户映射,客户端 Oracle Cloud Infrastructure 配置必须包含用于身份验证的 API 密钥指纹(fingerprint
条目)和具有 API 密钥私有部分的 PEM 文件的位置(key_file
条目)。这两个条目都应在[DEFAULT]
配置文件的配置文件中指定。
除非使用连接选项指定了配置文件的替代路径,否则将OPT_OCI_CONFIG_FILE
使用以下默认位置:
~/.oci/config
在 Linux 或 Posix 主机类型上%HOMEDRIVE%%HOMEPATH%/.oci/config
在 Windows 主机类型上
如果未提供 MySQL 用户名作为连接选项,则将替换为操作系统用户名。具体来说,如果客户端存在私钥和正确的 Oracle Cloud Infrastructure 配置,则无需提供任何选项即可建立连接。
从 Connector/C++ 8.0.28 开始,应用程序可以使用多因素身份验证建立连接,这样在连接时最多可以指定三个密码。、
OPT_PASSWORD1
和
连接选项可用于分别指定第一个、第二个和第三个多重身份验证密码
OPT_PASSWORD2
。
OPT_PASSWORD3
OPT_PASSWORD1
是现有
OPT_PASSWORD
选项的别名;如果两者都提供,
OPT_PASSWORD
则被忽略。有关此身份验证选项的更多信息,请参阅
多因素身份验证。
使用智能卡、安全密钥和生物识别读取器等设备对 MySQL 服务器进行 FIDO 身份验证。此身份验证方法基于快速身份在线 (FIDO) 标准。为确保使用遗留 JBDC API 的客户端应用程序在用户预期与 FIDO 设备交互时得到通知,Connector/C++ 8.0.29(及更高版本)
setCallback()
在类中实现了一个新方法,该方法
MySQL_Driver
接受名为Fido_Callback
.
class Fido_Callback
{
public:
Fido_Callback(std::function<void(SQLString)>);
/**
* Override this message to receive Fido Action Requests
*/
virtual void FidoActionRequested(sql::SQLString msg);
};
如果需要,驱动程序创建的任何连接都可以使用回调。但是,如果应用程序未明确设置回调,libmysqlclient
则默认确定行为,这涉及将消息打印到标准输出。
在 Windows 上,客户端应用程序必须以管理员身份运行。这是插件
fido2.dll
使用的库
的要求。authentication_fido
客户端应用程序有两个选项可用于从连接器获取回调:
通过将函数或 lambda 传递给
Fido_Callback
.driver->setCallBack(Fido_Callback([](SQLString msg) {...}));
通过实现虚拟方法
FidoActionRequested
。class MyWindow : public Fido_Callback { void FidoActionRequested(sql::SQLString msg) override; }; MyWindow window; driver->setCallBack(window);
设置新的回调总是会删除以前的回调。要禁用活动回调并恢复默认行为,请nullptr
作为函数回调传递。例子:
driver->setCallBack(Fido_Callback(nullptr));
有关 FIDO 身份验证的更多信息,请参阅 FIDO 可插入身份验证。