2014-03-31 36 views
0

在我的春天應用程序,我有以下的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用戶,誰是管理員用戶)訪問。

如何修改應用程序/數據庫以允許其他用戶訪問表?

+1

你得到的錯誤信息是什麼? –

+0

錯誤是由**造成的:org.postgresql.util.PSQLException:FATAL:密碼身份驗證失敗,用戶「klebermo」**,但我確信密碼是正確的(我甚至改爲'pwd'用於測試目的) –

+0

那麼,密碼*不是正確的,或者您連接到的數據庫不是您認爲的那樣。檢查PostgreSQL服務器錯誤日誌以獲取更詳細的消息。 –

回答

1

您需要create a user爲應用程序和GRANT permissions來連接和訪問表。

我不會推薦你的應用程序使用管理員憑證。

+0

但這是我做的。用戶'klebermo',我想要使用的,具有訪問數據庫的所有適當權限。 –

+0

顯然不是。你一定錯過了什麼,因爲PostgreSQL不同意你的看法。 – duffymo

+0

也許你是對的,但是當我在persistence.properties中將用戶更改回** postgres **時,沒有顯示任何錯誤,但我仍然收到無效的登錄頁面。 –

相關問題