我是处理hibernate的新手,我已经得到了这个。 我使用Oracle db和Hibernate + Maven + Netbeans。我的目的是只能使用我的授权应用程序对我的数据库进行更改。不应该从SQL控制台或其他程序进行更改。为此,我在我的数据库中创建了一个表:
CREATE TABLE DATA(
name char(30),
day integer,
month integer,
year integer );
这样的触发器会限制对我的数据库的任何访问:
CREATE OR REPLACE TRIGGER tri_block
BEFORE INSERT OR UPDATE OR DELETE ON data
BEGIN
IF TO_NUMBER(TO_CHAR(SYSDATE,'hh24')) < 12
OR TO_NUMBER(TO_CHAR(SYSDATE,'hh24')) >= 12
OR TO_CHAR(SYSDATE,'dy') in ('sun','sat') THEN
RAISE_APPLICATION_ERROR (-20000, 'changes can not be made');
END IF;
END;
这是我的HibernateUtil.java:
package com.scooby.util;
import com.scooby.DATA;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
return new AnnotationConfiguration().configure()
.addAnnotatedClass(DATA.class).buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
// Close caches and connection pools
getSessionFactory().close();
}
}
我听说过有关ORACLE上下文和hibernate会话的一些内容。有人可以解释一下吗?
答案 0 :(得分:1)
触发器可能不是防止未经授权的写访问的好方法。标准解决方案是为您的应用程序创建新用户,然后向所有用户授予/撤消所需的Oracle权限,以确保只允许您的应用程序写入某些表。
如果您对此解决方案不满意,则会出现sys_context solution,其绝对是安全性,而另一个是。它提供了更广泛的审计功能,但在数据库方面也需要更多的工作,以及从应用程序调用存储过程。