如何在Java for Oracle数据库中创建只读连接

Ran*_*mar 5 java sql oracle

我必须设计一个工具,该工具具有文本区域,用户可以在其中输入查询并显示提交结果.我的要求是这样一种方式,它应该只接受选择查询,但不接受更新,插入,删除.如果是选择结果应该显示,否则应该抛出错误.我已尝试如下将数据库连接设为只读.

Connection.setReadOnly(true),这是不推荐的,它抛出一个错误.

WebSphere java.sql.Connection实现不支持'setReadOnly'.

有人可以帮我获取数据库的只读连接,或者是否需要进行任何设计更改

Dan*_*Ell 6

一个常见的概念是仅向DB-User提供所需的授权.在您的情况下,应用程序可以使用特定于应用程序的用户在允许的表/视图上使用select-grants.

澄清一些误解:我在谈论你的JDBC-Connection使用的用户.

  • 这绝对是**更好的方法**然后以编程方式处理查询......我们正在使用java和DB,任何其他想法都相当惊吓! (4认同)

Lal*_*r B 5

您可以通过以下方式创建只读用户:

SQL> create user read_only identified by read_only;

User created.

SQL> grant create session, select any table, select any dictionary to read_only;

Grant succeeded.

SQL> conn read_only@pdborcl/read_only;
Connected.
SQL> create table t(col number);
create table t(col number)
*
ERROR at line 1:
ORA-01031: insufficient privileges


SQL> desc scott.emp;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMPNO                                     NOT NULL NUMBER(4)
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                           DATE
 SAL                                                NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                             NUMBER(2)

SQL> select count(*) from scott.emp;

  COUNT(*)
----------
        14

SQL> update scott.emp set ename='LALIT';
update scott.emp set ename='LALIT'
             *
ERROR at line 1:
ORA-01031: insufficient privileges


SQL> insert into scott.emp(ename) values('LALIT');
insert into scott.emp(ename) values('LALIT')
                  *
ERROR at line 1:
ORA-01031: insufficient privileges


SQL>
Run Code Online (Sandbox Code Playgroud)