5.8 身份验证选项

连接器/ODBC 支持不同的身份验证方法,包括:

  • 使用 MySQL 用户名和密码的标准身份验证,例如 caching_sha2_password

  • 用于无密码身份验证的 Kerberos 身份验证协议。有关 Kerberos 身份验证的更多信息,请参阅 Kerberos 可插入身份验证

    在 Connector/ODBC 8.0.26 中为 Linux 客户端和 8.0.27 添加了对 Windows 客户端的支持。

  • PASSWORD1通过使用(别名 PASSWORDPASSWORD2、和 PASSWORD3连接选项 进行多重身份验证 (MFA) 。此外还有PWD1PWD2PWD3别名。

    在连接器/ODBC 8.0.28 中添加了支持。

  • FIDO 可插拔认证;MySQL企业版8.0.27新增的认证机制。

    条件:有关安装要求和实施细节,请参阅一般 FIDO 文档。

    回调支持

    // SQL_DRIVER_CONNECT_ATTR_BASE is not defined in all driver managers.
    // Therefore use a custom constant until it becomes a standard.
    #define MYSQL_DRIVER_CONNECT_ATTR_BASE 0x00004000
    
    // Custom constants used for callback
    #define CB_FIDO_GLOBAL MYSQL_DRIVER_CONNECT_ATTR_BASE + 0x00001000
    #define CB_FIDO_CONNECTION MYSQL_DRIVER_CONNECT_ATTR_BASE + 0x00001001
    
    // Usage example
    // Callback function inside code:
    void user_callback(const char* msg)
    {
       // Do something ...
    }
    SQLHENV henv = nullptr;
    SQLAllocHandle(SQL_HANDLE_ENV, nullptr, &henv);
    
    // Set the ODBC version to 3.80 otherwise the custom constants don't work
    SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,                               
    (SQLPOINTER)SQL_OV_ODBC3_80, 0);
    
    SQLHDBC hdbc = nullptr;
    SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
    
    // CB_FIDO_X is either CB_FIDO_GLOBAL or CB_FIDO_CONNECTION
    SQLSetConnectAttr(hdbc, CB_FIDO_X, &user_callback, SQL_IS_POINTER);
    
    SQLDriverConnect(hdbc, hwnd, conn_str, ....);

    连接器/ODBC 8.0.29 中添加了 FIDO 支持;8.0.30 中添加了回调支持。