跳至内容

i flym

欢迎来到Flym的程序之家

  • HOME
  • CODE
  • USES
  • LIFE
  • YAN
  • ABOUT
i flym

标签:databaseMetadata

hibernate开发中最小化oracle用户权限避免取得错误数据

    最近在使用oracle进行项目开发时,碰到在hibernate中总是取得错误的表数据。错误的出处在于使用hibernate的update生成模式,hibernate会自动地生成相应的表结构信息,然而在生成数据表的过程当中,hibernate首先会进行数据库表的验证工作,即判断当前domain中的配置信息与数据表是否一致,如果已经有相应的信息之后,则不再生成相应的信息。

    问题就在于此,hibernate是使用databaseMetadata这个java类来进行数据库表的识别工作,它通过

ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)
 throws SQLException

    来读取数据表信息,并进行判断。在一般情况下,均能够读取正确的信息。但当数据库中存在着有相同的数据表(在不同的用户下)时,该操作会返回另一个用户创建的表信息。这样就导致了数据表上的验证不一致情况,而导致有些信息始终不能添加上(比如缺失外键关系,错误的外键关系等)。

    问题原因找到了,即通过此方法不能读取正确的表信息,解决问题的方法就是首先解决为什么这个方法会读取到其它用户的表信息,经过google之后,问题被发现了。是因为当前用户被授权了可以访问其它用户表的权限,导致hibernate在使用此方法时,自然就会返回其它用户的表了。原先给该用户进行授权时使用了以下语句:

grant create any view,drop any view,imp_full_database,exp_full_database,connect,resource,create session to xxx

    这样的授权方式,在角色imp_full_database,以及exp_full_database中,即包含了select any table的权限,从而导致了这样的问题发生。经过google,最终将该用户的权限控制为两个,即授予connect,resource权限,connect和resource实际上是两个角色。此角色所包含的权限如下所示:

CREATE SESSION
UNLIMITED TABLES
CREATE TABLE
CREATE CLUSTER
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE

    这些权限已经足够进行开发了。其中没有create view权限,如果需要,手动加上即可。在这样的权限限制之下,再使用相应的方法即能够取得正确的数据表元信息了。

作者 flym发布于 2011/07/29分类 开源框架、编程开发标签 databaseMetadata、Hibernate、hibernate update、oracle、oracle 权限于hibernate开发中最小化oracle用户权限避免取得错误数据留下评论

分类目录

  • java开发 (135)
  • java网络 (20)
  • linux应用 (18)
  • 开源框架 (87)
  • 数据库 (18)
  • 数据结构 (27)
  • 正妍 (28)
  • 程序生活 (14)
  • 编程开发 (192)
  • 英文翻译 (14)
  • 计算机应用 (34)

近期文章

  • 一种使用多级Hash存储路径字符串并优化访问的方法
  • 一种在json场景针对pojo对象动态添加扁平属性的方法
  • 使用 Servlet3.1 WriteListener进行异步响应输出以及踩过的坑
  • Jboss EnhancedQueueExecutor源码解读
  • 使用自定义FutureTask实现大小不固定的定时线程池
  • 实现优先使用运行线程及调整线程数大小的线程池
  • 一种在线程池中透传或继承ThreadLocal信息的方法
  • 使用FeignClient进行服务调用时的各类错误列表及快速定位

近期评论

  • Ronaldtouff on 一种使用多级Hash存储路径字符串并优化访问的方法
    visit this site Spolecznosc Tor Polska
    2025-06-14
  • Joshuabap on 一种使用多级Hash存储路径字符串并优化访问的方法
    здесь оземпик препарат отзывы цена
    2025-06-01
  • 艾华旭 on 使用guava Striped中的lock导致线程死锁的问题分析
    //线程1 加锁获取资源类型1 加锁获取资源类型2 //线程2 加锁获取资源类型1 加锁获取类型类型2 这一段里,每个线程都在没释放第一个锁之前就去申请第二个锁吗?
    2023-03-22
  • zp on Spring中循环引用的处理-1
    Spring源码浅度解析观光团
    2023-01-13
  • 大白 on spring data 运行时添加JPA Repository
    请问下有源码可以参考下吗
    2022-12-30

标签

  • ajax
  • aspectj
  • async
  • bean
  • bytecode
  • centos
  • classloader
  • context
  • criteria
  • datasource
  • data structure
  • daughter
  • embed
  • fastjson
  • fedora
  • getBean
  • Hibernate
  • http
  • java
  • javascript
  • javassist
  • jboss
  • jni
  • jquery
  • json
  • jvm
  • linux
  • mybatis
  • mysql
  • netty
  • network
  • oracle
  • recycle reference
  • redis
  • session
  • spring
  • sql
  • struts2
  • thread
  • thread pool
  • tomcat
  • xwork
  • 排序
  • 数据结构
  • 源码分析
  • HOME
  • CODE
  • USES
  • LIFE
  • YAN
  • ABOUT
i flym 自豪地采用WordPress