如何针对 OC4J 10g (10.1.3) 数据源配置和使用代理验证
最初发布时间:2005 年 7 月 20 日
最后更新时间:2006 年 1 月 16 日
作者:Frances Zhao
简介
Oracle 数据库支持代理验证,从而允许客户端用户通过应用服务器连接到数据库(作为代理用户)。客户端用户通过应用服务器验证自身,而应用服务器作为代理用户通过 Oracle 数据库验证自身。客户端用户的名称在以此方式打开的任何代理连接的数据库中始终有效。
OC4J 10g (10.1.3) 在 Oracle JDBC 原生数据源中支持这一点。该演示展示了针对 Oracle JDBC 原生数据源配置和使用代理验证的一些关键步骤,并用 JSP 代码测试了与已配置 Oracle 数据库的代理连接。
前提条件
知识准备
软件要求
本演示要求安装并正确配置以下软件组件:
符号
- %ORACLE_HOME% — 安装 OC4J 的目录。
- %JAVA_HOME% — 安装 JDK 的目录
- %HOWTO_HOME% — 将此演示解压缩到的目录
构建应用程序
定义原生数据源
首先,我们需要定义一个使用 Oracle JDBC 数据源实现的原生数据源。与以前的 OC4J 版本一样,OC4J 10.1.3 数据源仍然在应用程序的 data-sources.xml 文件中定义。所有应用程序的默认数据源配置文件仍然位于 %ORACLE_HOME%/j2ee/home/config/data-sources.xml 中。
要定义数据源,您可以直接编辑数据源配置文件,也可以使用企业管理器创建、删除和修改数据源。此方法文档仅使用第一种方法。
下面是原生数据源定义,位于 %HOWTO_HOME%/etc 下应用程序嵌入的 data-sources.xml 中。
<native-data-source
name="OracleNativeDSForProxyDemo"
jndi-name="jdbc/OracleNativeDSForProxyDemo"
description="Native DataSource For Proxy Demo"
data-source-class="oracle.jdbc.pool.OracleDataSource"
user="scott"
password="tiger"
url="jdbc:oracle:thin:@//dbhost:1521/dbservicename">
</native-data-source>
注意,data-source-class 是 javax.sql.DataSource 的 Oracle JDBC 实现。user 和 password 属性定义了默认用户和口令,但本演示中没有使用这些属性。
配置 Oracle 数据库
下一步是配置 Oracle 数据库,以设置用户、数据库角色和代理映射。您需要使用 Oracle DBA 帐户在 SQLPlus 中运行所提供的 SQL 脚本 %HOWTO_HOME%/etc/setup.sql。
在 SQLPlus 中执行以下命令:
SQL> @%HOWTO_HOME%/etc/setup.sql systempassword
脚本中有以下几组操作:
- 创建两个用户:testusr 和 proxyusr。用户 testusr 具有 testusr_account 表。
- 创建三个 DB 角色:role1、role2 和 role3。这三个角色都用于访问 system.account 表。
- 默认情况下,授予用户 testusr 以上三个角色。
- 允许 testusr 通过代理用户 proxyusr 连接。
代理验证
单击关联的测试按钮将调用一个 JSP,以测试从配置好的原生数据源获得的代理连接。将出现一个新页面显示测试日志,或者发生异常。新页面上应该有一个返回链接,可以将您转回到起始页。
以下是 JSP 代码中与代理验证相关的几个重要操作:
- 使用代理用户 proxyusr 打开一个到数据库的连接。
- 通过 oracle.jdbc.OracleConnection 中的 Oracle JDBC API isProxySession() 检查该连接是否是代理连接。
- 同样,使用 oracle.jdbc.OracleConnection 中的 Oracle JDBC API openProxySession(...) 打开一个代理连接,以允许 testusr 通过 proxyusr 连接。在该代理连接上,我们指定只允许两个 DB 角色:role1 和 role2(在这三个 DB 角色中,testusr 已经在默认情况下授予)。
- 再次检查该连接是否是代理连接和用户名。
- 测试与这三个 DB 角色相关的 DB 操作,并检查是否观察到指定的代理角色 — 应该只有与 role3 相关联的删除操作失败。
- 使用 Oracle JDBC API close(OracleConnection.PROXY_SESSION) 关闭代理连接,这不会关闭通过 proxyusr 打开的原始连接。
- 再次检查该连接是否是代理连接和用户名。
- 通过 proxyusr 关闭原始连接。
更多有关该应用程序和相关文档的信息
注意,本演示的主要目的是演示配置和使用代理验证时所涉及的某些关键步骤和 API,如数据库用户设置、连接方式和角色授予、openProxySession() 等。本文并未包含 Oracle 数据库和 Oracle JDBC 支持的所有可能的代理验证配置案例。有关该主题的更多详细说明,请参阅 Oracle 数据库安全指南 10g 和 Oracle JDBC 开发人员指南与参考 10g。
运行应用程序
以下说明适用于在 Oracle Containers for J2EE 10g (10.1.3) 的独立实例上运行本演示。
检查方法文档分发
- build — 编译过程中创建的临时目录
- log — 保存构建/部署日志的临时目录
- etc — 封装此应用程序的所有必要文件
- lib — 保存可以部署的应用程序存档(如 ear、war、rar 或 jar 文件)
- doc — 方法文档和 Javadoc
- javadoc — 不同源文件的 javadoc
- how-to-ds-proxy.html — 此方法文档页面
- src — 演示程序的源代码
设置应用程序
环境配置
请检查以确保 ant-oracle.properties 文件(位于该示例分发的根目录下)中的以下属性配置正确(注意:其中某些属性将是下述环境变量的默认值。如果您在环境中设置这些变量,可能不必改变文件中的值)。如果必要,则针对您的环境将这些变量修改为适当的值:
- oracle.home — Oracle 安装的根目录。默认值为 ORACLE_HOME 环境变量。
- java.home — JDK 安装的根目录。默认值为 JAVA_HOME 环境变量。
- oracleas.host — 运行 OC4J 实例的平台的主机名。默认值为 localhost。
- oracleas.http.port — OC4J HTTP 监听程序进行监听时所使用的端口。默认值为 8888。
- oracleas.admin.port — OC4J 管理处理器进行监听时所使用的端口。默认值为 23791。
- oracleas.admin.user — OC4J 管理员的名称。默认值为“oc4jadmin”。
- oracleas.admin.password — OC4J 管理员的口令。默认值为“welcome”。
- oracleas.binding.module — 已部署应用程序绑定到的 HTTP Web 站点的名称。默认值为“default-web-site”。
此外,请确保与 OC4J ant 分发关联的 ant 命令位于您的执行路径 (
%ORACLE_HOME%/ant/bin) 中。
为被管理的 OracleAS 实例配置环境
如果您运行的是 Oracle 应用服务器 10
g 的一个被管理的版本,使用的是 OPMN,则必须更改以下值以匹配您的配置:
- oracleas.http.port — Oracle HTTP Server (OHS) 监听时所使用的端口。
- oracleas.admin.port — OPMN 请求端口(在 opmn.xml 中指定),其默认值为 6003。您还可以使用以下命令检查 OPMN 请求端口:%ORACLE_HOME%/opmn/bin/opmnctl status -port
- oracleas.admin.user — OC4J 管理员的名称。默认值为“oc4jadmin”。
- oracleas.deployer.uri — 用于执行不同管理操作的 URI(部署,取消部署)。该文件包含不同的 URI,这取决于应用程序的拓扑:独立的 OC4J、被管理的单个节点或被管理的集群。您只需取消与您的拓扑匹配的 URI 的注释即可。
- oracleas.oc4j.instance — 这是被管理的 OC4J 实例,其中将部署或取消部署应用程序。
数据库配置
该演示要求 Oracle 数据库和监听程序处于运行状态。记下所使用的主机名、端口号和服务名称 — 您需要使用这些信息修改 %HOWTO_HOME%/etc/data-sources.xml。
启动 OC4J 实例
按如下方式启动 OracleAS 10
g (10.1.3) 实例:
生成、编译和部署应用程序
构建应用程序
请确保与 OC4J ant 分发关联的 ant 命令位于您的执行路径 (
%ORACLE_HOME%/ant/bin) 中。
在顶层 %HOWTO_HOME% 目录中,键入命令:
%HOWTO_HOME%/dist 目录中现在应包含新创建的 ds_proxy_demo.ear。
如果构建成功,此命令还将尝试部署此应用程序。它将首先测试 OC4J 是否正在运行。
部署应用程序
还可以使用以下命令分别部署应用程序。确保定义了 %ORACLE_HOME% 环境变量。在顶层 %HOWTO_HOME% 目录中,键入命令:
运行应用程序
在浏览器窗口中,浏览到:
如果网站的主机名或端口号不同,则用实际值替换。
单击关联的测试按钮将调用一个 JSP,以测试从配置好的原生数据源获得的代理连接。将出现一个新页面显示测试日志,或者发生异常。新页面上应该有一个返回链接,可以将您转回到起始页。
总结
学习完本文档后,您应可以:
- 了解如何结合使用原生数据源与 Oracle JDBC API 进行代理验证