Hibernate DB2撤销​​用户的STATEMENT

时间:2012-03-21 11:41:04

标签: hibernate db2

我使用Hibernate持久化了DB2数据库。 我想为具体的“用户”撤销所有数据库中所有TABLES的DROP TABLE权限。因此普通的“用户”不能在任何DB2数据库中使用DROP TABLES。 我也有mySQL数据库,但我并不关心在它们中做DROP STATEMENT。

是否有可能通过components.xml(hibernate)中的标记来完成它,还是必须直接在DB2上完成? (以及如何? - 在所有DB2的所有方案中,什么样的sql脚本会为具体用户撤销DROP STATEMENT? 要撤消CREATE STAT,我发现了这个:

REVOKE CREATETAB ON DATABASE DB1 FROM USER1 BY ALL;

http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=%2Fcom.ibm.db2.udb.admin.doc%2Fdoc%2Fr0000981.htm

...但什么样的STAT会撤销DROP TABLE?)

=> components.xml中:

...

<!-- 1st databse -->
<key>hibernate.connection.driver_class</key><value>com.ibm.db2.jcc.DB2Driver</value>
<key>hibernate.connection.username</key><value>user</value>
<key>hibernate.connection.password</key><value>password</value>
<key>hibernate.connection.url</key><value>jdbc:db2://server:50000/DATABASE1</value>
<key>hibernate.dialect</key><value>org.hibernate.dialect.DB2400Dialect</value>
<key>hibernate.default_schema</key><value>SCHEMA_NAME</value>

<!-- 2nd databse -->
<key>hibernate.connection.driver_class</key><value>com.ibm.db2.jcc.DB2Driver</value>
<key>hibernate.connection.username</key><value>user</value>
<key>hibernate.connection.password</key><value>password</value>
<key>hibernate.connection.url</key><value>jdbc:db2://server:50000/DATABASE2</value>
<key>hibernate.dialect</key><value>org.hibernate.dialect.DB2400Dialect</value>
<key>hibernate.default_schema</key><value>SCHEMA_NAME</value>

...

2 个答案:

答案 0 :(得分:0)

除非DDL更新反映在您的实体结构中,否则其不太可能的Hibernate将能够执行此操作。即使可能,我也猜测你的DBA不喜欢使用Hibernate来管理数据库架构。创建DDL脚本并将其用于环境迁移,并让DBA在相应的帐户下运行它。

答案 1 :(得分:0)

如果查看documentation for the DROP statement,您将看到您的ID必须具有表的CONTROL权限,架构的DROPIN权限或更高级别的权限(如DBADM或SYSADM)。

因此,只要用户没有这些权限,您就会受到保护(尽管如@Aaron Sheffey所说,Hibernate不太可能执行DROP TABLE语句。)。