程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> WebSphere Federation Server V9.5 中的端到端聯合可信上下文

WebSphere Federation Server V9.5 中的端到端聯合可信上下文

編輯:DB2教程

簡介

當代企業應用程序逐漸轉向多層應用程序模型,該模型中用戶請求將通過多個中間層從數據庫客戶端傳送到數據庫服務器。通用中間層的一些示例有:應用服務器(用於包含應用程序)、聯合服務器(用於透明地訪問異構數據源)。以前,聯合多層企業應用程序必須在安全和性能之間做出選擇。但是 WebSphere Federation Server V9.5 在納入 聯合可信上下文 之後改變了這種狀況,它可以利用聯合服務器和數據源內置的可信上下文功能。由此,您可以在可信的環境中實現端到端的身份斷言(identity assertion),不一定需要重新驗證。

有兩種方法可以利用該功能:

端到端的聯合可信上下文在涉及 WebSphere Federation Server 的所有多層應用程序模型中提供身份斷言。

出站聯合可信上下文可以減少大部分用戶映射,因此可以減少對 WebSphere Federation Server 和數據源中的密碼進行重復維護的管理工作。

本文描述第一種場景。(即將發布的有關 WebSphere Federation Server 中的用戶身份管理的文章將討論第二種場景。敬請關注!)

問題描述

由於應用服務器(允許以用戶友好的方式通過 Web 訪問數據庫)和聯合服務器(透明地訪問異構數據源)之類的中間層服務器不斷增多,企業現在逐漸開始采用多層應用程序模型。以下是典型場景:

您擁有一個保險應用程序,可以從遠程 IBM DB2® 數據源訪問人壽保險理賠,以及從遠程 Oracle 數據源訪問家庭保險理賠,然後向給定客戶返回綜合報告。您的應用程序運行在應用服務器上,成千上萬個用戶可以登錄到應用程序查看他們的理賠。

通常,所有與數據庫服務器的交互都通過客戶端(例如,IBM WebSphere 應用服務器)建立的數據庫連接發生,WebSphere Federation Server 使用用戶 ID 和標識該客戶端的憑據將交互傳播到數據庫服務器。例如,圖 1 中的所有應用程序請求都通過一個應用程序用戶 APP_USER 建立的連接傳播到數據庫服務器。換句話說,數據庫服務器使用與 APP_USER 關聯的數據庫權限進行所有數據庫訪問的身份驗證和審核。


圖 1. 問題場景:傳統的 4 層模型
WebSphere Federation Server V9.5 中的端到端聯合可信上下文

查看原圖(大圖)

從圖 1 可以看到,在這種多層場景中使用 APP_USER 之類的通用應用程序用戶存在幾個問題:

最終用戶身份丟失:為了進行訪問控制,企業需要了解實際訪問數據庫的用戶的身份。

減少了用戶責任:通過審核確定責任是數據庫安全的基本原則。如果不知道用戶的身份,則很難將應用服務器為自己執行的事務與應用服務器代表某個用戶執行的事務區別開來。

過度授權:應用程序授權 ID 必須具有執行所有用戶請求所需的所有權利。這違背了最小特權原則,這是一個基本的安全設計原則,該原則建議只授予用戶足夠執行其任務的權利。

安全性變弱:當前的方法要求應用程序用來建立連接的授權 ID 必須具有足夠的權限,以允許任何用戶請求訪問所有資源。因此應用程序授權 ID 成為了安全瓶頸,它的洩漏將造成所有企業資源的曝光。

查看原圖(大圖)

要支持端到端聯合可信連接,相應的安全管理員(即具有 SECADM 權限的用戶)必須首先在遠程 DB2 數據源和聯合服務器上配置可信上下文對象。WebSphere Federation Server 上的可信上下文對象定義 WebSphere Federation Server 和保險應用程序所在的應用服務器之間的信任關系。遠程 DB2 數據源上的可信上下文對象定義 WebSphere Federation Server 和遠程數據源之間的信任關系。

從圖 2 中的步驟 1 可以看到,當第一次在應用服務器上啟用保險應用程序時,應用服務器將建立 WebSphere Federation Server 到數據源的連接。將在應用程序用戶 APP_USER 的身份下建立顯式的可信連接。應用程序用戶現在可以使用該可信連接執行一些初始配置任務並為最終用戶准備好環境。完成所有初始化任務之後,APP_USER 提交工作單元並為處理最終用戶請求做准備。

從圖 2 中的步驟 2 可以看到,用戶 Bob 現在可以訪問保險應用程序查看他的所有保險理賠。入站與出站可信連接上的當前用戶 ID 現在從 APP_USER 切換為 BOB。實際上,Bob 的身份現在在同一個物理連接中斷言,一直到遠程數據源。Bob 的保險理賠請求由他在數據源上的相應授權進行處理。Bob 的請求也在遠程數據源中自己的身份下進行審核。完成 Bob 的請求後,提交他的工作單元,該可信連接現在可以用於處理其他用戶請求。

現在用戶 Alice 可以訪問保險應用程序檢索理賠(如圖 2 的步驟 3 所示),她的身份可以在同一個物理連接上斷言,只需將連接用戶 ID 從 BOB 切換為 ALICE。

從上述場景中可以看到,端到端聯合可信上下文可以基於正確的最終用戶身份准確地檢查授權、完成用戶會計和審計處理。除了顯而易見的安全好處外,與常規非可信連接相比,端到端聯合可信上下文能實現更好的性能:

不同的用戶身份可以在同一個物理入站和出站連接上斷言,無需針對每個新用戶釋放連接並創建新連接。

如果將 WebSphere Federation Server 上的可信上下文對象和遠程數據源上的身份斷言對象配置為無需驗證的連接重用,則可以獲得更多性能提升。

端到端聯合可信上下文逐步指南

以下逐步指南可以幫助您設置端到端聯合可信上下文環境,如圖 3 所示:


圖 3. 端到端聯合可信上下文:完整場景
WebSphere Federation Server V9.5 中的端到端聯合可信上下文

查看原圖(大圖)

遠程數據源設置

這是使用聯合可信上下文的先決條件。DB2 遠程數據源和 Oracle 遠程數據源的設置有所不同。

DB2:安全管理員應該在遠程 DB2 數據源上配置聯合可信上下文,以定義數據源和 WebSphere Federation Server 之間的信任關系。以下語句(清單 1)將建立一個可信連接,其中假設發起方為 APP_USER,客戶端在 WebSphere Federation Server 上的 IP 地址為(9.44.111.222)。連接建立後,任何有效用戶都可以使用該可信連接,無需重新驗證。確保您啟用了可信上下文。

清單 1. 在 DB2 數據源上創建可信上下文對象

CREATE TRUSTED CONTEXT MY_DB2_TCX 
 BASED UPON CONNECTION USING SYSTEM AUTHID APP_USER 
 ATTRIBUTES (ADDRESS ‘9.44.111.222') 
 WITH USE FOR PUBLIC WITHOUT AUTHENTICATION 
 ENABLE 

Oracle:在遠程 Oracle 服務器配置代理驗證。指定 MARY、ALICE 和 BOB 都可以使用代理 APP_USER 進行連接,無需重新驗證。

清單 2. 在 Oracle 數據源上配置代理驗證

ALTER USER MARY GRANT CONNECT THROUGH APP_USER; 
ALTER USER ALICE GRANT CONNECT THROUGH APP_USER; 
ALTER USER BOB GRANT CONNECT THROUGH APP_USER; 

有關特定於數據源的更多信息,請參考 附錄。

聯合服務器可信上下文定義

安全管理員必須在 WebSphere Federation Server 上設置可信上下文對象,以允許建立可信連接。以下語句(清單 3)指定 APP_USER 可以建立可信連接,其中假設請求來自客戶端 IP 地址(9.44.111.111)。連接建立後,任何有效用戶都可以重用該可信連接,無需重新驗證。確保您啟用了可信上下文。

清單 3. 在聯合服務器上創建可信上下文對象
CREATE TRUSTED CONTEXT MY_WFS_TCX 
 BASED UPON CONNECTION USING SYSTEM AUTHID APP_USER 
 ATTRIBUTES (ADDRESS ‘9.44.111.111') 
 WITH USE FOR PUBLIC WITHOUT AUTHENTICATION 
 ENABLE 

聯合服務器數據源配置

在 WebSphere Federation Server 上,可以使用 清單 4 中的語句配置對此場景的遠程 DB2 數據源的訪問。注意,該步驟不需要其他選項。

清單 4. 配置對遠程 DB2 數據源的訪問
CREATE WRAPPER drda; 
    
CREATE SERVER udb1 TYPE db2/udb VERSION 9.5 WRAPPER drda 
 AUTHORIZATION "APP_USER" PASSWord "secret" OPTIONS (DBNAME 'remotedb'); 

考慮是否需要在聯合服務器上設置用戶映射。

如果 APP_USER 在 WebSphere Federation Server 上的用戶 ID 和密碼與遠程用戶源上使用的相同,則不需要用戶映射。

注意:如果 APP_USER 在 WebSphere Federation Server 和數據源上的用戶 ID 和密碼不同,則需要用戶映射。

所有有效的數據庫用戶都可以重用 APP_USER 建立的可信連接,無需重新驗證。因此,在 WebSphere Federation Server 和遠程數據源上擁有相同 ID 的用戶(比如 MARY 和 ALICE 等)不需要任何用戶映射。

WebSphere Federation Server 上的用戶 JOE 映射到遠程數據源上的用戶 JOESMITH。那麼,安全管理員必須使用 清單 5 中的語句為 JOE 創建一個可信用戶映射。選項 USE_TRUSTED_CONTEXT 設置為 ‘Y’ 的映射被視為可信用戶映射。只有具有 SECADM 權限的用戶才能創建可信用戶映射,以防止用戶將自己映射到遠程數據源上具有更多權限的用戶。JOE 的用戶映射僅需要在入站和出站授權 ID 之間進行映射。不需要指定 REMOTE_PASSWord 選項,因為 JOE 可以重用 APP_USER 建立的可信連接,無需重新驗證。

清單 5. 創建可信用戶映射
CREATE USER MAPPING FOR JOE SERVER udb1 
OPTIONS ( REMOTE_AUTHID 'JOESMITH', USE_TRUSTED_CONTEXT 'Y'); 

注意:由於指定該用戶映射時沒有使用 REMOTE_PASSWord 子句,因為不需要進行痛苦的密碼維護管理。

WebSphere Federation Server 和數據源上使用不同用戶 ID 和密碼的用戶定義可信映射時必須定義 REMOTE_AUTHID 和 REMOTE_PASSWord 選項。

用戶應用程序

完成初始設置後,應用程序用戶就可以使用聯合可信上下文了:

建立端到端聯合可信連接

啟用應用程序後,應用程序用戶 APP_USER 需要可信入站連接。第一個訪問遠程 DB2 數據源的聯合請求將為 APP_USER 建立可信出站連接。如 圖 3 中的步驟 4d 所示,APP_USER 可以使用此顯式的端到端聯合可信連接執行數據源上的一些日常任務,並為企業最終用戶的使用做好准備。

切換端到端的聯合可信連接上的用戶

最終用戶(比如 Bob)開始使用應用程序時,入站用戶 ID 將從 APP_USER 切換為 BOB。BOB 發出第一個聯合請求(即訪問遠程 DB2 數據源)時,出站可信連接用戶 ID 也切換為 BOB。從 圖 3 中的步驟 5d 可以看到,BOB 的身份現在一直斷言到 DB2 數據源,他的身份將用於准確地授權、審計等。



清單 6. 建立和使用端到端聯合可信連接

int main(int argc, char *argv[]) 
{ 
 SQLHANDLE henv;        /* environment handle */ 
 SQLHANDLE hdbc1;        /* connection handle */ 
 SQLHANDLE hstmt;        /* statement handle */ 
 char origUserid[10] = "APP_USER"; 
 char origPassWord[10] = "secret"; 
 char reuseUserid[10] = "BOB"; 
 char dbName[10] = "testdb"; 
 
 /* Allocate the handles */ 
 SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv ); 
 SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc1 ); 
 
 /* Set the trusted connection attribute */ 
 SQLSetConnectAttr( hdbc1, SQL_ATTR_USE_TRUSTED_CONTEXT, (SQLPOINTER)SQL_TRUE, 
   SQL_IS_INTEGER ); 
 
 /* Establish a trusted inbound connection for user APP_USER from WAS 
   to WFS. This requires a passWord to be specifIEd. */ 
 SQLConnect( hdbc1, (SQLCHAR *)dbName, SQL_NTS, origUserid, SQL_NTS, 
   origPassWord, SQL_NTS ); 
 
 /* Allocate statement handle */ 
 SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt); 
 
 /* The first call to remote DB2 data source will setup trusted outbound 
   connection for user APP_USER from WFS to remote DB2 data source. */ 
 SQLExecDirect (hstmt, (SQLCHAR *) "SELECT * FROM patents_nn", SQL_NTS); 
 
 /* Perform some work under user ID "APP_USER" */ 
 . . . . . . . . . . . 
 
 /* Commit the work. End the transaction. */ 
 SQLEndTran(SQL_HANDLE_DBC, hdbc1, SQL_COMMIT); 
 
 /* Free statement handle */ 
 SQLFreeHandle(SQL_HANDLE_DBC, hstmt); 
 
 /* At the transaction boundary, switch the inbound user ID on the trusted 
   connection from APP_USER to BOB. Note: PassWord is not required 
   since PUBLIC appears in the "with use for" clause "without authentication" 
   in the MY_WFS_TCX trusted context object. */ 
 SQLSetConnectAttr (hdbc1, SQL_ATTR_TRUSTED_CONTEXT_USERID, 
   reuseUserid, SQL_IS_POINTER ); 
 
 /* Allocate statement handle */ 
 SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt); 
 
 /* The first call to the remote data source after switching inbound user will 
   switch the outbound user ID as well (from APP_USER to BOB). 
   Since no user mapping was specifIEd for user BOB, the same user ID 
   will be passed on to the outbound connection. 
   PassWord is not required since PUBLIC appears in the "with use for" clause 
   "without authentication" in the MY_DB2_TCX trusted context object. */ 
 SQLExecDirect (hstmt, (SQLCHAR *) "SELECT * FROM patents_nn", SQL_NTS); 
 
 /* Perform new work using user ID "BOB" */ 
 . . . . . . . . . 
 
 /* Commit the work. End the transaction. */ 
 SQLEndTran(SQL_HANDLE_DBC, hdbc1, SQL_COMMIT); 
 
 . . . . . . . . . 
 
 /* Disconnect from the database */ 
 SQLDisconnect( hdbc1 ); 
 
 /* Cleanup, free handles, etc */ 
 . . . . . . . . . 
 
 return 0; 
} /* end of main */ 

聯合可信連接的故障診斷

聯合可信連接請求失敗

當請求顯式的端到端聯合可信連接失敗時,返回警告 SQL20360W。當隱式聯合可信連接嘗試失敗時,不會返回任何消息。在這兩種情況下,都將創建一個常規的非可信連接(如果可能)。如果應用程序請求一個可信連接,但是得到的是常規的非可信連接,請檢查是否存在以下問題:

確保客戶端使用 TCP/IP 與聯合服務器進行通信。切記如果客戶端和聯合服務器位於同一個機器上,則默認情況下 DB2 使用 IPC。確保讓聯合數據庫使用 TCP/IP。

確保在聯合服務器上創建並啟用了可信上下文對象。只有在 CREATE / ALTER TRUSTED CONTEXT DDL 語句中使用 ENABLE 關鍵字時才執行可信上下文對象。

應用程序請求顯式的可信連接時,不能將數據庫服務器驗證類型設置為 CLIENT。

最後,驗證聯合數據庫服務器可信上下文對象中的信任屬性與連接請求中出現的信任屬性相匹配。例如,可信上下文對象中指定的 IP 地址可能不正確,或者可信上下文不能接受您的網絡加密屬性級別。

嘗試切換聯合可信連接上的用戶失敗

如果嘗試切換聯合可信連接上的用戶時遇到錯誤,請檢查是否存在以下問題:

如果返回 SQL1060N,請驗證用戶確實具有連接聯合數據庫的權限。

如果應用程序收到 SQL20361N,請驗證以下內容:

確保在可信上下文中的 WITH USE FOR 子句中定義了用戶 ID 或 PUBLIC。

切換用戶需要驗證,但是應用程序沒有任何憑據或者憑據不正確。

驗證用戶切換請求是否位於事務邊界內。在重新提交請求之前要提交或回滾事務。

最後,驗證聯合服務器上的可信連接對象從建立連接之時起沒有被禁用、放棄或改變。

嘗試添加/修改/刪除聯合可信上下文選項失敗

如果在使用 USE_TRUSTED_CONTEXT 選項創建或改變用戶映射時遇到錯誤,請檢查以下內容:

必須具有 SECADM 權限才能創建或放棄定義了 USE_TRUSTED_CONTEXT 選項的用戶映射。

必須具有 SECADM 權限才能改變用戶映射,以添加、設置或放棄 USE_TRUSTED_CONTEXT 選項。

只能改變可信用戶映射的 REMOTE_PASSWord 選項。確保新值不為空。

限制條件

聯合可信上下文只能為支持身份斷言功能的以下數據源提供連接重用:

DB2 for Linux®、UNIX® 和 Windows® V9.5 或更高版本,以及

DB2 for z/OS® V9 或更高版本

Oracle

對於所有其他數據源,WebSphere Federation Server 僅支持常規的不可信出站連接。當切換入站連接時,WebSphere Federation Server 將斷開此類數據源的連接並重新建立連接。因此,對其他數據源使用聯合可信上下文並沒有性能優勢。注意,對於這些不受支持的數據源,重新連接需要用戶 ID 和密碼。

顯式可信連接只能通過支持可信連接請求的 API(即 CLI、ODBC、JDBC 和 XA )進行請求。

結束語

WebSphere Federation Server V9.5 中的端到端聯合可信上下文是一個新功能,可以提供以下好處:

通過保存訪問遠程數據庫的最終用戶的身份,提高了對訪問的控制力

通過審核區分不同用戶執行的事務,規范了用戶責任

支持最小特權原則,僅向用戶授予完成任務所需的權限

個人化安全管理,確保沒有任何一個授權 ID 會成為企業資源洩漏的安全瓶頸

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved