Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中为Oracle数据库创建只读连接_Java_Sql_Oracle - Fatal编程技术网

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

如何在Java中为Oracle数据库创建只读连接,java,sql,oracle,Java,Sql,Oracle,我必须设计一个工具,其中有文本区域,用户可以输入他们的查询,并通过提交结果将显示。我的要求是,它应该只接受select查询,而不接受update、insert、delete。如果是,则应显示select结果,否则应抛出错误。我已尝试如下,使数据库连接只读 Connection.setReadOnly(true),这是不推荐的,它会引发错误 WebSphere java.sql.Connection实现不支持“setReadOnly” 有人能帮我获得数据库的只读连接吗?或者如果需要任何设计更改一个

我必须设计一个工具,其中有文本区域,用户可以输入他们的查询,并通过提交结果将显示。我的要求是,它应该只接受select查询,而不接受update、insert、delete。如果是,则应显示select结果,否则应抛出错误。我已尝试如下,使数据库连接只读

Connection.setReadOnly(true),这是不推荐的,它会引发错误

WebSphere java.sql.Connection实现不支持“setReadOnly”


有人能帮我获得数据库的只读连接吗?或者如果需要任何设计更改

一个常见的概念是只给数据库用户所需的授权。 在您的情况下,应用程序可以使用特定于应用程序的用户,并在允许的表/视图上授予select权限


澄清一些误解:我说的是您的JDBC连接使用的用户。

如果您必须让用户键入查询,而不是给他们一个gui查询生成器,您可以获取查询字符串,在通过实体管理器实际执行之前,您可以对关键字进行简单检查,如

if (QueryString.toLowerCase().contains("update"))// to be case insensitive
{//handle as you wish}
else if (QueryString.toLowerCase().contains("delete"))// to be case insensitive
{//handle as you wish} // Keep doing that as many times as you with till finally
else
{// Execute your query}

这是一个非常快速和肮脏的解决方案,如果您的用户真的卡住了,您可以通过以下方式创建只读用户:

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>

相关问题这绝对是比以编程方式处理查询更好的方法。。。我们正在与java和DBs合作,任何其他想法都相当可怕!另一种广泛使用的方法是创建特定角色。例如,在测试环境中,我们将超级用户角色授予所有应用程序开发人员。但是,在生产中,我们只提供只读角色。最重要的部分是建立机制,将所需的角色授予应用程序用户。。。您可以为用户授予权限或为用户指定某些角色(具有不同权限的角色)…当然可以。作为一名数据库人员,我是以我看待方法的方式说的。这里也一样-我认为在DBs上提及用户管理的不同方面很好-感谢您提交这样的帮助!!!谢谢Lalit让我试试这个快速,肮脏和危险的方法
SELECT t.lastUpdated from DELETES_TABLE
虽然是SELECT,但不起作用。哦,好吧,那也是。。。没关系,别提那个主意。有时我看着自己的答案,想我写这篇文章时到底在想什么。现在什么样的用户会同意写sql?(就此而言,我很难向客户解释,我们的应用程序有SSO,不需要从windows登录。当某个顶级管理白痴在他的客户面前打开ipad上的应用程序,第一次看到登录屏幕时,我们几乎失去了他们的帐户。他尝试了一切,除了他的windows凭据,包括童年时的hotmail帐户