在我的春天應用程序,我有以下的Hibernate的類來訪問我的PostgreSQL數據庫:如何使用不同於超級用戶(postgres)的用戶訪問postgresql數據庫?
@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence.properties" })
@ComponentScan({ "org.webapp.persistence" })
public class HibernateConfig {
@Autowired
private Environment env;
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(restDataSource());
sessionFactory.setPackagesToScan(new String[] { "org.webapp.persistence.model" });
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public DataSource restDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(env.getProperty("jdbc.driverClassname"));
dataSource.setUrl(env.getProperty("jdbc.url"));
dataSource.setUsername(env.getProperty("jdbc.user"));
dataSource.setPassword(env.getProperty("jdbc.pass"));
return dataSource;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory);
return txManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}
Properties hibernateProperties() {
return new Properties() {
/**
*
*/
private static final long serialVersionUID = 1L;
{
setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
setProperty("hibernate.globally_quoted_identifiers", "true");
}
};
}
}
我persitence.properties文件是:
jdbc.driverClassname=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost:5432/wehavescience?charSet=LATIN1
jdbc.user=klebermo
jdbc.pass=123
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=update
我的數據庫有三個表,它們分別是:
CREATE TABLE usuario
(
id serial NOT NULL,
login character varying(100),
senha character varying(100),
CONSTRAINT pf_usuario PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE usuario
OWNER TO klebermo;
GRANT ALL ON TABLE usuario TO klebermo;
GRANT SELECT ON TABLE usuario TO public;
表autorizacoes:
CREATE TABLE autorizacao
(
id serial NOT NULL,
nome character varying(100),
CONSTRAINT pf_autorizacao PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE autorizacao
OWNER TO klebermo;
GRANT ALL ON TABLE autorizacao TO klebermo;
GRANT SELECT ON TABLE autorizacao TO public;
和表autorizacao_usuario
CREATE TABLE autorizacao_usuario
(
id serial NOT NULL,
usuario integer,
autorizacao integer,
CONSTRAINT pf_autorizacao_usuario PRIMARY KEY (id),
CONSTRAINT fk_autorizacao FOREIGN KEY (autorizacao)
REFERENCES autorizacao (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_usuario FOREIGN KEY (usuario)
REFERENCES usuario (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE autorizacao_usuario
OWNER TO klebermo;
GRANT ALL ON TABLE autorizacao_usuario TO klebermo;
GRANT SELECT ON TABLE autorizacao_usuario TO public;
我的問題是,當我運行該項目,數據庫不能被該用戶(僅postgres
用戶,誰是管理員用戶)訪問。
如何修改應用程序/數據庫以允許其他用戶訪問表?
你得到的錯誤信息是什麼? –
錯誤是由**造成的:org.postgresql.util.PSQLException:FATAL:密碼身份驗證失敗,用戶「klebermo」**,但我確信密碼是正確的(我甚至改爲'pwd'用於測試目的) –
那麼,密碼*不是正確的,或者您連接到的數據庫不是您認爲的那樣。檢查PostgreSQL服務器錯誤日誌以獲取更詳細的消息。 –