0

我有一个在 websphere 中运行的应用程序。我已经在服务器上配置了数据源并从 jndi 获取数据源。我正在使用 Spring Jdbc,并且一些 select 语句运行良好。

现在我有一个插入语句从“蟾蜍”内部成功运行,但相同的插入语句在应用程序中失败。

java.sql.SQLException: ORA-01400: cannot insert NULL into ("SCHEMA1"."XYZ"."CREATED_BY")

CREATED_BY is a VARCHAR2 (30 Byte) with DEFAULT set to 'SYS_CONTEXT ('USERENV', 'OS_USER')'

注意:我没有在插入语句中指定列。我的陈述如下:

Insert into SCHEMA1.XYZ(some_column, another_column, is_active) values ('sadsf','sdfsdfsdf','Y')  

我正在使用 jdbcTemplate 所以本质上是这样做的:

jdbcTemplate.update(theQuery);

我正在配置我的数据源,如下所示:

<beans:bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <beans:property name="jndiName" value="jdbc/MyDatasource" />
</beans:bean>

现在我期待这来自设置 JAAS - 数据源的 J2C 身份验证数据时使用的用户名。

我不想指定所有可以轻松自动填充每个查询的审计列。任何帮助,将不胜感激。

4

1 回答 1

2

SYS_CONTEXT

命名空间的预定义参数 USERENV
OS_USER 启动数据库会话的客户端进程的操作系统用户名。

还有

CLIENT_IDENTIFIER 返回由应用程序通过 DBMS_SESSION.SET_IDENTIFIER 过程、OCI 属性 OCI_ATTR_CLIENT_IDENTIFIER 或 Java 类 Oracle.jdbc.OracleConnection.setClientIdentifier 设置的标识符。各种数据库组件使用此属性来识别作为同一数据库用户进行身份验证的轻量级应用程序用户。

SESSION_USER 用于验证当前用户的数据库用户名。该值在整个会话期间保持不变。

我不熟悉 Oracle 身份验证,但也许后者之一更适合您的任务。

于 2013-03-15T14:33:51.487 回答