有没有办法使用JBoss和Oracle定义真正的只读数据源?
我想坚持单个默认架构用户,但将应用程序的某些部分限制为只读,以避免SQL注入问题。如果在JBoss中没有这种方法,我将不得不在Oracle中创建另一个具有有限权限的用户。
答案 0 :(得分:4)
无论你是否可以在JBoss中完成,你都应该创建第二个用户。
应在数据库层中设置数据库权限;不要试图在代码中应用它们。数据库的设计旨在确保无法写入您没有写入权限的表。如果你在应用程序中实现它,只需要一个小的改动或一个小的bug来打破这个限制。
如果您不想引用另一个模式中的表,您可以随时创建一个指向它的同义词。
有一个related programmers question您可能会感兴趣。简单地说“永远不要在代码中做什么,你可以让SQL服务器为你做好”。没有提到这个具体情况,但我认为它适用。
答案 1 :(得分: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;
这允许我们查询该另一个用户的表,就好像它是同一个用户一样。
就是这样。