為數據源使用連接池可能會導致基于角色的安全性破壞。IBM Informix 服務器中對可信連接和可信上下文的支持能夠靈活地重用連接,向中間層授予受控的權限,以及在三層應用程序中加強用戶責任性而不損害其數據庫安全性,所有這些都改善了系統性能。
本文將討論可信連接和可信上下文,展示如何使用 jdbc、esql/c 和 odbc 驅動程序管理可信上下文。
在傳統的三層應用程序模型中,您只有在成功授權之后才能與交互,檢查和審計由中間層執行。即使有多個用戶登錄到中間層,中間層也僅使用單個用戶 ID 來訪問,而且會在所有資源上授予權限。此模型無法獲取嘗試訪問數據庫的實際用戶身份,以進行訪問控制。另外,如果中間層用戶 ID 被盜用,可能導致嚴重的安全威脅。
為了在中間層服務器與數據庫服務器之間實現惟一的交互組,Informix 中引入了可信數據庫連接 的概念。可信上下文 是在數據庫服務器上創建的一種數據庫安全對象,它定義了一個可信數據庫連接的屬性。在連接屬性與 Informix 服務器上定義的惟一可信上下文屬性匹配時,就會建立可信連接。中間層服務器建立可信連接后,可重用同一個物理連接,而無需在數據庫服務器上對最終用戶重新進行身份驗證。
從應用程序開發人員的角度講,可信連接的重要性離不開這樣一個事實:單個數據庫連接可與其他用戶共享,同時維護每一個嘗試訪問數據庫的應用程序或用戶的 ID。對用戶權限的控制有助于適當地授予或限制用戶對敏感資源的訪問,進而提高系統安全性和用戶責任性。
使用 Informix 客戶端驅動程序管理可信上下文
在本節中,您將學習如何創建、修改和丟棄一個可信上下文。要創建和管理可信上下文,您的應用程序必須通過 TCP/IP 連接 Informix 服務器。以下 Informix 客戶端驅動程序通過公開后面幾節中將探討的相關 API 來支持可信連接。
- IBM Informix JDBC 驅動程序
- IBM Informix ODBC 驅動程序
- IBM Informix ESQL/C 驅動程序
建立可信連接
使用 JDBC 驅動程序
要在 JDBC 應用程序中請求一個可信連接,可將 TRUSTED_CONTEXT = TRUE; 屬性包含在數據庫 URL 中,如清單 1 中所示。
清單 1. 使用 JDBC 驅動程序連接
jdbc:informix-sqli://hostname:portnumber/database_name:INFORMIXSERVER = server_name; TRUSTED_CONTEXT = TRUE;
使用 ODBC 驅動程序
以下是通過 ODBC 建立可信連接的兩種方式,一個示例如清單 2 中所示。
使用 SQLSetConnectAttr() API:
SQLSetConnectAttr(hdbc1,SQL_ATTR_USE_TRUSTED_CONTEXT,SQL_TRUE,SQL_IS_INTEGER));
使用連接字符串參數:
TRUSTEDCONTEXT=1; 或 TCTX=1;
清單 2. ODBC 驅動程序的樣例連接字符串
“Server=ol_informix_1170;Host=9.124.123.54;Service=ol_informix_1170;Protocol=onsoctcp; Database=stores7;TRUSTEDCONTEXT=1;”
使用 ESQL/C 驅動程序
在 ESQL/C 中,可信連接使用 TRUSTED 關鍵字和連接語句,以及用戶名和密碼來建立,如清單 3 中所示。
清單 3. 使用 ESQL/C 驅動程序連接
EXEC SQL CONNECT TO 'database_name' USER 'informix' USING :infx_passwd TRUSTED;