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