1
我正在使用Grails 1.3.4,它使用Hibernate,违背Oracle 11g数据库。我的应用程序无法在启动,并出现以下错误:使用Oracle 11g休眠(grails) - 权限不足
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)
当我加入甲骨文以下到我的数据库用户角色,它的工作原理。然而,我的数据库管理员在生产环境中声明,他不会授予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;
是的,工作。我知道我不想要dbCreate = create或create-drop,但不知道如果你把它抛出去会发生什么。删除它可以防止Hibernate对数据库模式做任何事情。在Grails in Action中找到了一个很好的解释,第15.3.1节为那些“手动”处理数据库更改的人做了一个很好的解释。 – snowmanjack 2010-11-05 12:50:01