0

有没有办法使用 JBoss 和 Oracle 定义真正的只读数据源?

我想坚持使用单个默认模式用户,但将应用程序的某些部分限制为只读,以避免 SQL 注入问题。如果 JBoss 中没有这种方法,我将不得不在 Oracle 中创建另一个具有有限权限的用户。

4

2 回答 2

4

无论您是否可以在 JBoss 中执行此操作,您都应该创建第二个用户。

数据库权限应在数据库层设置;不要试图在代码中应用它们。该数据库旨在确保无法写入您没有写入权限的表。如果您在应用程序中实现这一点,则只需稍作更改或一个小错误即可打破此限制。

如果您不想引用另一个模式中的表,您始终可以在自己的模式中创建一个指向它的同义词。

您可能会发现一个相关的程序员问题很有趣。简单地说“永远不要在代码中做你可以让 SQL 服务器为你做好的事情”。没有提到这个特定的场景,但我认为它适用。

于 2012-11-08T15:29:17.567 回答
0

要完成此操作...我使用以下 SQL 创建了另一个用户:

-- USER SQL
CREATE USER MYUSER_READONLY IDENTIFIED BY password 
DEFAULT TABLESPACE "USERS"
TEMPORARY TABLESPACE "TEMP";

-- ROLES
GRANT "AUTHENTICATEDUSER" TO MYUSER_READONLY;
GRANT "CONNECT" TO MYUSER_READONLY;
GRANT "EJBCLIENT" TO MYUSER_READONLY;
GRANT SELECT ANY TABLE TO MYUSER_READONLY;
GRANT ALTER SESSION TO MYUSER_READONLY;

为了在我的 Java 代码中简化此用户的使用,我们使用以下语句初始化每个 SQL 会话:

ALTER SESSION SET CURRENT_SCHEMA = MYUSER;

这允许我们查询该其他用户的表,就好像它是同一个用户一样。

而已。

于 2012-11-09T08:53:26.250 回答