延伸 MySQL 9.0  /  ...  /  編寫用戶端身份驗證外掛程式

4.4.9.2 編寫用戶端身份驗證外掛程式

使用 mysql_declare_client_plugin()mysql_end_client_plugin 巨集宣告用戶端外掛程式描述符(請參閱第 4.4.2.3 節「用戶端外掛程式描述符」)。對於 auth_simple 外掛程式,描述符如下所示

mysql_declare_client_plugin(AUTHENTICATION)
  "auth_simple",                        /* plugin name */
  "Author Name",                        /* author */
  "Any-password authentication plugin", /* description */
  {1,0,0},                              /* version = 1.0.0 */
  "GPL",                                /* license type */
  NULL,                                 /* for internal use */
  NULL,                                 /* no init function */
  NULL,                                 /* no deinit function */
  NULL,                                 /* no option-handling function */
  auth_simple_client                    /* main function */
mysql_end_client_plugin;

從外掛程式名稱到選項處理函數的描述符成員,對所有用戶端外掛程式類型都是通用的。(如需說明,請參閱第 4.4.2.3 節「用戶端外掛程式描述符」。)在通用成員之後,描述符還有一個特定於身份驗證外掛程式的額外成員。這是處理與伺服器通訊的「主要」函數。該函數接受兩個參數,分別代表 I/O 結構和連線處理常式。對於我們簡單的任何密碼外掛程式,主要函數除了將使用者提供的密碼寫入伺服器之外,不執行任何操作

static int auth_simple_client (MYSQL_PLUGIN_VIO *vio, MYSQL *mysql)
{
  int res;

  /* send password as null-terminated string as cleartext */
  res= vio->write_packet(vio, (const unsigned char *) mysql->passwd,
                         strlen(mysql->passwd) + 1);

  return res ? CR_ERROR : CR_OK;
}

主要函數應傳回下表中顯示的其中一個錯誤代碼。

錯誤代碼 含義
CR_OK 成功
CR_OK_HANDSHAKE_COMPLETE 成功,用戶端完成
CR_ERROR 錯誤

CR_OK_HANDSHAKE_COMPLETE 表示用戶端已成功完成其部分工作,並且已讀取最後一個封包。如果身份驗證協定中的往返次數事先未知,並且外掛程式必須讀取另一個封包才能確定身份驗證是否完成,則用戶端外掛程式可能會傳回 CR_OK_HANDSHAKE_COMPLETE