Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用不同于超级用户(postgres)的用户访问postgresql数据库?_Java_Hibernate_Postgresql - Fatal编程技术网

Java 如何使用不同于超级用户(postgres)的用户访问postgresql数据库?

Java 如何使用不同于超级用户(postgres)的用户访问postgresql数据库?,java,hibernate,postgresql,Java,Hibernate,Postgresql,在我的spring应用程序中,我有以下Hibernate类来访问我的postgresql数据库: @Configuration @EnableTransactionManagement @PropertySource({ "classpath:persistence.properties" }) @ComponentScan({ "org.webapp.persistence" }) public class HibernateConfig { @Autowired private

在我的spring应用程序中,我有以下Hibernate类来访问我的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");
         }
      };
   }
}
我的persistence.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;
和表Autorizao_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.psqleexception:FATAL:用户“klebermo”的密码身份验证失败,但我确信密码是正确的(出于测试目的,我甚至更改为“pwd”)。嗯,密码不正确,或者您连接到的数据库与您想象的不同。查看PostgreSQL server错误日志以获取更详细的消息。但我就是这么做的。我想使用的用户“klebermo”拥有访问数据库的所有适当权限。显然不是。你一定错过了什么,因为PostgreSQL不同意你的观点。也许你是对的,但当我在persistence.properties中将用户改回postgres时,不会显示任何错误,但是我仍然得到一个无效的登录页面。请确保您正在连接到创建
klebermo
用户的服务器。我只是用所有者“klebermo”从头创建了一个新数据库,该数据库与我以前的数据库(该表是使用所有者“postgres”创建的,在更改为“klebermo”后)的表相同,但仍然无法工作