Hibernate (Grails) с Oracle 11g - недостаточные привилегии - PullRequest
1 голос
/ 04 ноября 2010

Я использую Grails 1.3.4, который использует Hibernate, против базы данных Oracle 11g.Мое приложение не запускается при запуске со следующей ошибкой:

2010-11-04 09:45:34,671 INFO  [grails.spring.BeanBuilder] [RuntimeConfiguration] Configuring data source for environment: TEST 
2010-11-04 09:45:36,812 ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-01031: insufficient privileges

2010-11-04 09:45:36,812 ERROR [org.hibernate.tool.hbm2ddl.SchemaUpdate] could not complete schema update 
org.hibernate.exception.SQLGrammarException: could not get table metadata: MY_TABLE
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)

Когда я добавляю следующее в Oracle в свою роль пользователя базы данных, оно работает.Тем не менее, мой администратор базы данных в производственном отделе, он не предоставит ANALYZE ALL, потому что он больше не нужен в 11G, и это портит его статистику.Какое разрешение?

GRANT ANALYZE ANY to APP_USER_ROLE;

Более подробная информация о настройках ниже:

Grails DataSource.groovy

    dataSource {
        driverClassName = "oracle.jdbc.driver.OracleDriver"
        username = "APP_USER"
        password = "APP_USER_PASS"
        dbCreate = "update"
        url = "jdbc:oracle:thin:@MY_servername:1521:MY_SCHEMANAME"
        dialect="org.hibernate.dialect.Oracle10gDialect"
    }    
    hibernate {
        default_schema="WEBSYS"
    }

Объект домена Grails с использованием таблицы:

static mapping = {
    table 'MY_TABLE'
    id generator:'sequence',params:[sequence:'MY_SEQ']
}

Настройка пользователя и роли Oracle:

CREATE ROLE APP_USER_ROLE NOT IDENTIFIED;
GRANT QUERY REWRITE TO APP_USER_ROLE;
GRANT CREATE SESSION TO APP_USER_ROLE;
GRANT GLOBAL QUERY REWRITE TO APP_USER_ROLE;
GRANT APP_USER_ROLE TO APP_USER;
CREATE USER APP_USER
  IDENTIFIED BY APP_USER_PASS
  DEFAULT TABLESPACE APPL_DATA
  TEMPORARY TABLESPACE TEMP
  PROFILE DEFAULT
  ACCOUNT UNLOCK;
  GRANT APP_USER_ROLE TO APP_USER;
  ALTER USER APP_USER DEFAULT ROLE ALL;
  ALTER USER APP_USER QUOTA UNLIMITED ON APPL_DATA;

  GRANT SELECT,UPDATE,DELETE,INSERT ON MYSCHEMA.MY_TABLE to APP_USER_ROLE;
  GRANT SELECT ON MYSCHEMA.MY_SEQ to APP_USER_ROLE;

1 Ответ

1 голос
/ 04 ноября 2010

Grails, вероятно, требуется это разрешение, чтобы определить, были ли внесены изменения в объекты домена, которые не отражены в схеме.

Нужны ли Grails для автоматического обновления производственной схемы? Если нет, попробуйте удалить dbCreate = "update" для производственной среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...