我使用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;
...但什么样的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>
...
答案 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语句。)。