創建 DB2 UDB 安全性外掛程式的步驟
來源:互聯網
上載者:User
關鍵字
安全
DB2
創建一個 DB2 UDB 安全性外掛程式需要 6 個步驟。 下面的幾個小節將詳細解釋每個步驟:將安全性外掛程式的標頭檔包括到外掛程式中: sqllib/include/db2secPlugin.h sqllib/include/gssapiDB2.h 注意:只有在實現基於 GSS-API 的安全性外掛程式時才需要 gssapiDB2.h。 編寫組成外掛程式的 API。 需要編寫一個適當的初始化 API 和伺服器、客戶機或組外掛程式所需的其他一些 API。 在返回 DB2 之前填充函數指標結構。 指出外掛程式使用的外掛程式 API 版本。 指出外掛程式類型,例如使用者 ID/密碼、GSS-API、Kerberos。 編譯外掛程式原始程式碼,並創建一個共用庫。 根據應用程式/伺服器實例,編譯為 32 位或 64 位。 將這個庫放在適當的目錄中。 通過更新資料庫管理器參數,啟用外掛程式。 步驟 1:將安全性外掛程式標頭檔包括到外掛程式中db2secPlugin.h 和 gssapiDB2.h 是實現定制安全性外掛程式所需的兩個標頭檔。 只有在構建 GSS-API 外掛程式時才需要 gssapiDB2.h 標頭檔。 圖 5 展示了在 Windows 系統上實現安全性外掛程式所需的這兩個標頭檔的位置。 圖 5. Windows 系統上外掛程式標頭檔的位置498)this.width=498;' onmousewheel = 'javascript:return big(this)' height=446 alt="Windows 系統上外掛程式標頭檔的位置" src="/files/uploadimg/20061213/1752000.jpg" width=372> 步驟 2:編寫組成外掛程式的 API根據創建的是伺服器外掛程式、客戶機外掛程式還是組外掛程式, 需要分別編寫以下 API 來初始化外掛程式: db2secServerAuthPluginInit db2secClientAuthPluginInit db2secGroupPluginInit 例如,可以這樣編寫 db2secServerAuthPluginInit API:清單 1. db2secServerAuthPluginInitSQL_API_RC SQL_API_FN db2secServerAuthPluginInit( db2int32 version, void* server_fns, db2secGetConDetails* getConDetails_fn, db2secLogMessage* logMessage_fn, char** errormsg, db2int32* errormsglen){ struct userid_password_server_auth_functions_1 *fns = (struct userid_password_server_auth_functions_1*) server_fns; condetails_fn = getConDetails_fn; logMessage_Fn = logMessage_fn; fns->version = DB2SEC_API_VERSION; fns->plugintype = DB2SEC_PLUGIN_TYPE_USERID_PASSWORD; fns->db2secDoesAuthIDExist = &is_user; fns->db2secFreeErrormsg = &free_error_message; fns->db2secFreeToken = &free_token; fns->db2secGetAuthIDs = &getauthids; fns->db2secServerAuthPluginTerm = &terminate_plugin; fns->db2secValidatePassword = &validatePassword; /* Example on how to use logMessage_fn */ /* Will log the init successful information into db2diag.log at DIAGLEVEL 3 */ ( logMessage_Fn)(DB2SEC_LOG_WARNING, "db2secServerAuthPluginInit successful", strlen("db2secServerAuthPluginInit successful")); return DB2SEC_PLUGIN_OK;} DB2 調用裝載後的 db2secServerAuthPluginInit API 來初始化伺服器外掛程式庫。 前面的代碼來自檔 txtserver.c,該檔在本文後面附帶的 ZIP 檔案中。 除了初始化函數外,還需為伺服器、客戶機和組外掛程式實現一些外掛程式 API。 此外,還有一些用於使用者 ID/密碼身份驗證和用於 GSS-API 身份驗證的特定 API。 圖 6、圖 7 和圖 8 描述了這些函數的功能。 注意:DB2 UDB 手冊有一節詳細描述了如何開發安全性外掛程式,並解釋了安全性外掛程式 API。 那些細節超出了本文的範圍。 本節只簡單地對外掛程式 API 做一個概述。 圖 6. 組成員查找外掛程式498)this.width=498;' onmousewheel = 'javascript:return big(this)' height=404 alt=組成員查找外掛程式 src="/files/uploadimg /20061213/1752001.gif" width=104> 圖 7. 客戶機外掛程式498)this.width=498;' onmousewheel = 'javascript:return big(this)' height=409 alt=客戶機外掛程式 src="/files/uploadimg/ 20061213/1752002.gif" width=413> 圖 8. 伺服器外掛程式498)this.width=498;' onmousewheel = 'javascript:return big(this)' height=409 alt=伺服器外掛程式 src="/files/uploadimg/ 20061213/1752003.gif" width=414> 步驟 3:在返回 DB2 之前填充函數指標結構函數指標返回指向您實現的特定外掛程式庫所需的所有 API 的指標。 例如,對於組外掛程式,它包含指向 db2secDoesGroupExist、db2secFreeErrormsg、db2secFreeGroupListMemory、db2secGetGroupsForUser 和 db2secPluginTerm API 的實現的指標。 本文後面附帶的 ZIP 檔案中的 txtgroup.c 檔提供了一個例子,演示如何填充組外掛程式庫的函數指標。 下面是該代碼的一個片段。 fns->version = DB2SEC_API_VERSION;fns->db2secDoesGroupExist = &is_group;fns->db2secFreeErrormsg = &free_error_message;fns-> db2secFreeGroupListMemory = &free_group_list;fns->db2secGetGroupsForUser = &get_groups;fns-> db2secPluginTerm = &terminate_plugin;步驟 4:編譯外掛程式原始程式碼並創建一個共用庫編寫好安全性外掛程式後,根據 DB2 實例將其編譯成 32 位或 64 位的檔。 庫的名稱必須與外掛程式名稱相同。 並且,庫必須是有適當的特定于平臺的副檔名的共用庫。 例如,如果外掛程式的名稱為 myPlugin,那麼應使用下面的副檔名: myPlugin.dll(Windows) myPlugin.a(AIX) myPlugin.so(Linux、AIX、Sun Solaris、HP-UX) myPlugin.sl(HP-UX) 庫必須是執行緒安全的(可重入的),並且必須使用 C 連結(至少對初始化函數要使用 C 連結)。 步驟 5:將庫放入適當的目錄必須將安全性外掛程式庫放入特定的目錄:Windows: sqllib\security\plugin\<instance name>\client sqllib\security\plugin \<instance name>\server sqllib\security\plugin\<instance name>\group 對於 IBM 提供的缺省外掛程式:sqllib\security\ plugin\IBM\client sqllib\security\plugin\IBM\server sqllib\security\plugin\IBM\group 32 位 Linux 和 UNIX: sqllib/ security32/plugin/client sqllib/security32/plugin/server sqllib/security32/plugin/group 對於 IBM 提供的缺省外掛程式:sqllib/ security32/plugin/IBM/client sqllib/security32/plugin/IBM/server sqllib/security32/plugin/IBM/group 在 Linux 和 UNIX 中,對於 64 位庫,也使用與前面類似的目錄,只是要使用子目錄名 security64,而不是 security32。 在 Windows 64 位實例中,32 位和 64 位外掛程式都在相同的目錄中,但是 64 位外掛程式將加上尾碼 ‘64’,例如 myplugin64.dll。 注意:IBM 子目錄(在外掛程式目錄下)是為 IBM 提供的缺省外掛程式預留的。 放在該目錄中的任何其他定制的外掛程式都將被忽略。 步驟 6:通過更新資料庫管理器參數啟用外掛程式在 8.2 版之前,authentication 資料庫管理器配置參數指定位置和機制,通過它來執行 CONNECT/ATTACH、組查詢和本地授權檢查。 而在 8.2 版中有更多的配置參數,從而為選擇身份驗證選項提供了更大的靈活性。 表 2 提供了應用於外掛程式的資料庫管理器配置參數清單,並解釋了它們如何應用於安全性外掛程式。 表 2. 安全性外掛程式資料庫管理器配置參數描述參數名描述1客戶機使用者 ID/密碼外掛程式(CLNT_PW_PLUGIN)如果這個值是在客戶機上設置的,並且伺服器上的 AUTHENTICATION 參數被設置為 CLIENT, 那麼該參數指定用於在客戶機上執行的身份驗證的使用者 ID/密碼外掛程式。 如果這個值是在伺服器上設置的,那麼該參數指定用於實例操作(例如 db2start)授權檢查的使用者 ID/密碼外掛程式。 在資料庫伺服器上本地發出的資料庫連接(本地連接)期間,也可以在資料庫伺服器上使用用戶端外掛程式2客戶機 Kerberos 外掛程式(CLNT_KRB_PLUGIN)該參數的值指定用於用戶端身份驗證和本地授權的 Kerberos 外掛程式庫的名稱。 當使用 KERBEROS 或 KRB_SERVER_ENCRYPT 身份驗證對客戶機進行身份驗證時,將使用該外掛程式。 在 Windows 上缺省值是 IBMkrb5。 在其他平臺上,缺省值是 Null3組外掛程式(GROUP_PLUGIN)該參數的值指定用於組成員查找的組外掛程式庫4用於本地授權的 GSS-API 外掛程式(LOCAL_GSSPLUGIN)當資料庫管理器配置參數 AUTHENTICATION 的值被設置為 GSSPLUGIN 或 GSS_SERVER_ENCRYPT 時,該參數的值指定用於實例級本地授權的 GSS-API 外掛程式庫的名稱。 GSSPLUGIN 表明伺服器將只使用基於它熟悉的 GSS-API 外掛程式進行身份驗證。 GSSPLUGIN_SERVER_ENCRYPT 表明伺服器將另外接受加密的使用者 ID/密碼請求。 這種類型主要是為向下相容而提供的5伺服器外掛程式模式(SRV_PLUGIN_MODE)該參數指定以 fenced 還是 unfenced 模式運行。 缺省值(惟一受支援的值)是 UNFENCED6伺服器 GSS-API 外掛程式清單(SRVCON_GSSPLUGIN_LIST)該參數指定資料庫伺服器支援的 GSS-API 外掛程式庫的清單,清單中以逗號作為分隔符號。 這個清單只能包含一個 Kerberos 外掛程式。 如果該參數值沒有設置,並且 AUTHENTICATION 被設置為 KERBEROS 或 KRB_SVR_ENCRYPT,那麼將使用缺省的 DB2 Kerberos 外掛程式(IBMkrb5)7伺服器使用者 ID/密碼外掛程式(SRVCON_PW_ PLUGIN)該參數的值指定用於伺服器端身份驗證的使用者 ID/密碼外掛程式庫8伺服器連接身份驗證(SRVCON_AUTH)該參數的值只用于連接。 它覆蓋 AUTHENTICATION 中指定的身份驗證方法。 本地實例操作仍使用 AUTHENTICATION 中指定的操作。 缺省值是 NOT_SPECIFIED9資料庫管理器身份驗證(AUTHENTICATION)該參數的值指定為了檢查本地實例授權,使用者身份驗證如何進行,在哪裡進行。 缺省值是 SERVER表 3 展示了使用前面列出的配置參數啟用使用者 ID/密碼身份驗證外掛程式的步驟。 表 3. 啟用使用者 ID/密碼身份驗證外掛程式的步驟客戶機上的步驟伺服器上的步驟1用客戶機外掛程式的名稱更新 CLNT_PW_PLUGIN。 如果 CLNT_PW_PLUGIN 為空,那麼將使用它的缺省值 IBMOSauthclient,這是 IBM 提供的外掛程式用伺服器外掛程式的名稱更新 SRVCON_PW_PLUGIN2將 SRVCON_AUTH 設置為一種系統身份驗證類型(CLIENT、SERVER、SERVER_ENCRYPT、DATA_ENCRYPT 或 DATA_ENCRYPT_CMP),或將 SRVCON_AUTH 設置為 NOT_SPECIFIED 並將 AUTHENTICATION 設置為一種系統身份驗證類型。 如果 SRVCON_PW_PLUGIN 為空,那麼將使用它的缺省值 IBMOSauthserver,這是 IBM 提供的外掛程式表 4 展示了使用前面列出的配置參數啟用組成員查找外掛程式的步驟。 表 4. 啟用組成員查找外掛程式的步驟客戶機上的步驟伺服器上的步驟1用組外掛程式的名稱更新 GROUP_PLUGIN。 如果 GROUP_PLUGIN 為空,那麼將使用它的缺省值 IBMOSgroups,這是 IBM 提供的外掛程式用組外掛程式的名稱更新 GROUP_PLUGIN。 如果 GROUP_PLUGIN 為空,那麼將使用它的缺省值 IBMOSgroups,這是 IBM 提供的外掛程式表 5 展示了使用前面列出的配置參數啟用 GSS-API 身份驗證外掛程式的步驟。 表 5. 啟用 GSS-API 身份驗證外掛程式的步驟客戶機上的步驟伺服器上的步驟1將外掛程式庫放在客戶機外掛程式目錄中將外掛程式庫放在伺服器外掛程式目錄中2可選:編目(catalog)一個資料庫表明客戶機將只使用一個 GSS-API 外掛程式進行身份驗證。 例如:db2 catalog db testdb at node testnode authentication gssplugin。 一個客戶機上可以同時存在多個外掛程式。 在這種情況下,伺服器將指出使用哪個外掛程式用受支援的外掛程式名稱的有序清單更新 SRVCON_GSSPLUGIN_LIST。 為了啟用 GSS-API 外掛程式,可以: 將 SRVCON_AUTH 設置為 GSSPLUGIN,或者 將 SRVCON_AUTH 設置為 NOT_SPECIFIED,並將 AUTHENTICATION 設置為 GSSPLUGIN。 為了啟用本地授權: 將客戶機外掛程式庫放入客戶機外掛程式目錄。 用外掛程式名稱更新 LOCAL_GSSPLUGIN。 表 6 展示了使用前面列出的配置參數啟用 Kerberos 身份驗證外掛程式的步驟。 表 6. 啟用 Kerberos 外掛程式的步驟客戶機上的步驟伺服器上的步驟1將外掛程式庫放在客戶機外掛程式目錄將外掛程式庫放在伺服器外掛程式目錄2用 Kerberos 外掛程式的名稱更新 CLNT_KRB_PLUGIN。 如果 CLNT_KRB_PLUGIN 為空,那麼 DB2 認為客戶機不能使用 Kerberos。 DB2 提供的缺省 Kerberos 外掛程式被命名為 IBMkrb5。 對於支援 Kerberos 的平臺,IBMkrb5 庫已經在客戶機外掛程式目錄中。 用伺服器 Kerberos 外掛程式名稱更新 SRVCON_GSSPLUGIN_LIST3可選:編目一個資料庫表明客戶機將使用 Kerberos 外掛程式進行身份驗證。 例如:db2 catalog db testdb at node testnode authentication kerberos target principal service/host@REALM將 SRVCON_AUTH 設置為 KER BEROS 或 KRB_SERVER_ENCRYPT,或將 SRVCON_AUTH 設置為 NOT_SPECIFIED 並將 AUTHENTICATION 設置為 KERBEROS 或 KRB_SERVER_ENCRYPT責任編輯 趙毅 zha oyi#51cto.com TEL:(010)68476636-8001 給力(0票)動心(0票)廢話(0票)專業(0票)標題党(0票)路過(0票) 原文:創建 DB2 UDB 安全性外掛程式的步驟 返回網路安全首頁