本文共 10921 字,大约阅读时间需要 36 分钟。
端到端联合可信上下文是在 IBM® WebSphere® Federation Server V9.5 中首次出现的功能集。该功能加强了与多层模型相关的安全性,可以将最终用户身份传播到整个应用程序模型层,而不会影响整体性能。本文描述了端到端联合可信上下文,并介绍了详细的配置步骤和一些技巧。
当代企业应用程序逐渐转向多层应用程序模型,该模型中用户请求将通过多个中间层从数据库客户端传送到数据库服务器。通用中间层的一些示例有:应用服务器(用于包含应用程序)、联合服务器(用于透明地访问异构数据源)。以前,联合多层企业应用程序必须在安全和性能之间做出选择。但是 WebSphere Federation Server V9.5 在纳入 之后改变了这种状况,它可以利用联合服务器和数据源内置的可信上下文功能。由此,您可以在可信的环境中实现端到端的身份断言(identity assertion),不一定需要重新验证。
有两种方法可以利用该功能:
本文描述第一种场景。(即将发布的有关 WebSphere Federation Server 中的用户身份管理的文章将讨论第二种场景。敬请关注!)
由于应用服务器(允许以用户友好的方式通过 Web 访问数据库)和联合服务器(透明地访问异构数据源)之类的中间层服务器不断增多,企业现在逐渐开始采用多层应用程序模型。以下是典型场景:
您拥有一个保险应用程序,可以从远程 IBM DB2® 数据源访问人寿保险理赔,以及从远程 Oracle 数据源访问家庭保险理赔,然后向给定客户返回综合报告。您的应用程序运行在应用服务器上,成千上万个用户可以登录到应用程序查看他们的理赔。
通常,所有与数据库服务器的交互都通过客户端(例如,IBM WebSphere 应用服务器)建立的数据库连接发生,WebSphere Federation Server 使用用户 ID 和标识该客户端的凭据将交互传播到数据库服务器。例如, 中的所有应用程序请求都通过一个应用程序用户 APP_USER 建立的连接传播到数据库服务器。换句话说,数据库服务器使用与 APP_USER 关联的数据库权限进行所有数据库访问的身份验证和审核。
从图 1 可以看到,在这种多层场景中使用 APP_USER 之类的通用应用程序用户存在几个问题:
出于这些问题,我们需要一种更好方法将实际用户的身份传播到各层乃至数据库服务器,同时又不会导致过高的开销,也不需要对每个新的最终用户重新建立物理连接。
端到端的联合可信上下文是 WebSphere Federation Server 的解决方案,可以有效地解决多层身份断言问题。
端到端的联合可信上下文解决了 WebSphere Federation Server V9.5 涉及的多层场景中的身份断言问题。要配置该功能,可以在联合服务器上创建一个可信上下文对象,在远程数据源上创建一个身份断言对象(DB2 可信上下文或 Oracle 代理用户)。 WebSphere Federation Server 上的可信上下文对象为可信的入站连接封装信任属性。远程数据源上的身份断言对象为建立可信出站连接定义信任属性。
配置好该属性后,它的工作方式如下:
下面的 说明了如何使用端到端的联合可信上下文解决与图 1 中介绍的多层保险应用程序有关的各种安全问题。
要支持端到端联合可信连接,相应的安全管理员(即具有 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。
从上述场景中可以看到,端到端联合可信上下文可以基于正确的最终用户身份准确地检查授权、完成用户会计和审计处理。除了显而易见的安全好处外,与常规非可信连接相比,端到端联合可信上下文能实现更好的性能:
以下逐步指南可以帮助您设置端到端联合可信上下文环境,如图 3 所示:
DB2:安全管理员应该在远程 DB2 数据源上配置联合可信上下文,以定义数据源和 WebSphere Federation Server 之间的信任关系。以下语句()将建立一个可信连接,其中假设发起方为 APP_USER,客户端在 WebSphere Federation Server 上的 IP 地址为(9.44.111.222)。连接建立后,任何有效用户都可以使用该可信连接,无需重新验证。确保您启用了可信上下文。
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 进行连接,无需重新验证。
ALTER USER MARY GRANT CONNECT THROUGH APP_USER;ALTER USER ALICE GRANT CONNECT THROUGH APP_USER;ALTER USER BOB GRANT CONNECT THROUGH APP_USER; |
有关特定于数据源的更多信息,请参考 。
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 |
CREATE WRAPPER drda; CREATE SERVER udb1 TYPE db2/udb VERSION 9.5 WRAPPER drda AUTHORIZATION "APP_USER" PASSWORD "secret" OPTIONS (DBNAME 'remotedb'); |
考虑是否需要在联合服务器上设置用户映射。
CREATE USER MAPPING FOR JOE SERVER udb1 OPTIONS ( REMOTE_AUTHID 'JOESMITH', USE_TRUSTED_CONTEXT 'Y'); |
注意:由于指定该用户映射时没有使用 REMOTE_PASSWORD 子句,因为不需要进行痛苦的密码维护管理。
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 */ |
WebSphere Federation Server V9.5 中的端到端联合可信上下文是一个新功能,可以提供以下好处:
联合可信上下文功能为用户提供了改进的安全性、增强的性能和易管理性。联合可信上下文和其他新的安全功能(比如联合数据库角色和 C 用户映射插件)一起,使 WebSphere Federation Server V9.5 成为安全信息集成解决方案的理想选择。
DB2(针对 Linux、UNIX 和 Windows,以及 z/OS)引入了一个新的数据库安全对象,名为可信上下文。可信上下文解决了在 DB2 和外部实体之间建立信任关系的问题,外部实体包括中间件服务器(例如 WebSphere Applicaiton Server)或联合服务器(例如 WebSphere Federation Server)等。将评估一系列信任属性以确定某个特定上下文是否可信。当连接属性匹配 DB2 服务器中定义的惟一可信上下文的属性时,可以将数据库连接当作可信连接。可信连接以以下内容为基础:
第一次连接到服务器时,将在数据库连接和可信上下文之间建立关系,这种关系将在连接期间一直维持。建立关系后,即允许连接发起方获取其他功能。这些额外功能的内容取决于可信连接是显式的还是隐式的。
显式可信连接 是用户显式请求的可信连接。显式可信连接具有某些增强功能:
隐式可信连接是用户隐式请求的连接。当传入连接请求的所有属性匹配 DB2 服务器上任何可信上下文对象的所有信任属性时,DB2 服务器隐式地授予一个可信连接。这样的连接就称为隐式可信连接。对于连接请求它不需要任何特殊的 API。隐式可信连接允许连接发起人获得其他情况下无法获得的其他权限。但是,隐式可信连接不能供切换用户重用。
DB2 使用 语句创建可信上下文对象。相应的 ALTER、DROP 和 COMMENT DDL 语句也可用。
Oracle 允许中间层在单个数据库连接中设置许多轻量级用户会话,每个会话都惟一地对应于一个连接用户。这些轻量级会话减少了创建中间层与数据库的连接所带来的开销。应用程序可以根据处理用户事务的需要在这些会话之间切换。
Oracle 使用 alter user DDL 语句注册代理用户。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14789789/viewspace-406662/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14789789/viewspace-406662/