hgeller
I'm new here

PostgreSQL: PSQLException (permission denied) trotz korrekter JDBC-Konfiguration

Jump to solution

Hallo zusammen,

ich habe in einer FirstSpirit-Instanz (5.1.410.67084) eine interne PostgreSQL-Datenbank (Version 9.1) konfiguriert. Als Betriebssystem kommt Ubuntu Linux 12.04.1 zum Einsatz. Java-Version (auf dem Server) ist 1.8.0_45.

Es geht darum, strukturierte Daten von FirstSpirit aus in dieser Datenbank zu persistieren. Bei der Einrichtung der PostgreSQL-Datenbank (als DBA-Layer) bin ich wie im Kapitel 4.9.5.3 des Administratoren-Handbuches beschrieben vorgegangen, d.h. es gibt einen separaten FirstSpirit-Datenbankbenutzer (myuser) mit vollen Rechten auf die Datenbank "mydb". Die Berechtigung dieses Benutzers habe ich auf der Linux-Kommandozeile verifiziert, indem ich mich über den PostgreSQL-Client (psql) mit dem Benutzer auf die Datenbank (mydb) verbunden und einen "CREATE TABLE" Befehl abgesetzt habe. Der Benutzer konnte eine Tabelle anlegen.

Den JDBC-Treiber (postgresql-9.4-1201.jdbc41.jar) habe ich  (wie im Administrator-Handbuch, Kapitel 4.9.2, beschrieben) in ein .fsm-Modul verpackt und über den FirstSpirit ServerManager installiert. Das hat alles ohne Probleme geklappt. Ebenso problemlos konnte ich eine Datenbank-Verbindung im Datenbank-Reiter mit folgender JDBC-Konfiguration anlegen:

# postgress_mydb

jdbc.DRIVER=org.postgresql.Driver

jdbc.PASSWORD=MY_PASSWORD

jdbc.POOLCYCLE=60

jdbc.POOLMAX=1

jdbc.POOLMIN=1

jdbc.POOLTIMEOUT=180

jdbc.URL=jdbc:postgresql://localhost:5432/mydb

jdbc.USER=myuser

jdbc.layerclass=de.espirit.or.impl.postgres.PostgreSQLLayer

module=JDBC_PostgreSQL_9_1

"Test connection" liefert mir keine Fehler zurück. Die Verbindung per JDBC scheint also generell zu funktionieren. Die Datenbankkonfiguration habe ich in den Projekteigenschaften meines FirstSpirit-Projektes konfiguriert und als "Ausgewählt" markiert.

Wenn ich in FirstSpirit im TemplateStore unter Datenbankschemata nun ein neues Datenbankschema mit einer Tabelle anlegen und speichern möchte, erhalte ich folgende Fehlermeldung:

Error while accessing database:

    org.postgresql.util.PSQLException: ERROR: permission denied for database mydb

FSVersion=5.1.410.67084#4536;JDK=1.8.0_45 64bit Oracle Corporation;OS=Mac OS X 10.10.4 x86_64;Date=07.07.2015 14:54:53

de.espirit.or.SchemaException: org.postgresql.util.PSQLException: ERROR: permission denied for database mydb

    at de.espirit.or.impl.generic.GenericSchemaSynchronizer.createSchema(GenericSchemaSynchronizer.java:249)

    at de.espirit.or.impl.generic.GenericSchemaSynchronizer.updateDB(GenericSchemaSynchronizer.java:131)

    at de.espirit.or.impl.schema.SchemaImpl.updateDBTables(SchemaImpl.java:410)

    at de.espirit.or.impl.AbstractSessionHandler.syncSchemaWithDB(AbstractSessionHandler.java:1064)

    at de.espirit.or.impl.AbstractSessionHandler.syncSchemaWithDB(AbstractSessionHandler.java:75)

    at de.espirit.firstspirit.content.ContentManagerImpl$TemporalSessionHandler.syncSchemaWithDB(ContentManagerImpl.java:1375)

    at de.espirit.firstspirit.content.ContentManagerImpl.syncSchema(ContentManagerImpl.java:728)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke(Method.java:497)

    at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:62)

    at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:97)

    at de.espirit.firstspirit.server.io.handler.CompactCall.handle(CompactCall.java:68)

    at de.espirit.firstspirit.server.io.ManagerCallWorker.run(ManagerCallWorker.java:108)

    at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:605)

    at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:572)

    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

    at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:425)

    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

    at java.lang.Thread.run(Thread.java:745)

    at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:38)

Caused by: org.postgresql.util.PSQLException: ERROR: permission denied for database mydb

    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270)

    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998)

    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)

    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:570)

    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:406)

    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:398)

    at de.espirit.or.impl.generic.GenericSchemaSynchronizer.createSchema(GenericSchemaSynchronizer.java:246)

    at de.espirit.or.impl.generic.GenericSchemaSynchronizer.updateDB(GenericSchemaSynchronizer.java:131)

    at de.espirit.or.impl.schema.SchemaImpl.updateDBTables(SchemaImpl.java:410)

    at de.espirit.or.impl.AbstractSessionHandler.syncSchemaWithDB(AbstractSessionHandler.java:1064)

    at de.espirit.or.impl.AbstractSessionHandler.syncSchemaWithDB(AbstractSessionHandler.java:75)

    at de.espirit.firstspirit.content.ContentManagerImpl$TemporalSessionHandler.syncSchemaWithDB(ContentManagerImpl.java:1375)

    at de.espirit.firstspirit.content.ContentManagerImpl.syncSchema(ContentManagerImpl.java:728)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke(Method.java:497)

    at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:62)

    at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:97)

    at de.espirit.firstspirit.server.io.handler.CompactCall.handle(CompactCall.java:68)

    at de.espirit.firstspirit.server.io.ManagerCallWorker.run(ManagerCallWorker.java:108)

    at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:605)

    at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:572)

    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

    at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:425)

    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

    at de.espirit.firstspirit.client.io.ServerCaller.callManager(ServerCaller.java:377)

    at de.espirit.firstspirit.io.DefaultClientHandler.callManager(DefaultClientHandler.java:55)

    at de.espirit.firstspirit.client.io.RemoteManagerCaller.invoke(RemoteManagerCaller.java:52)

    at de.espirit.firstspirit.server.$Proxy33.syncSchema(Unknown Source)

    at de.espirit.firstspirit.store.access.templatestore.SessionHandlerImpl.syncSchemaWithDB(SessionHandlerImpl.java:136)

    at de.espirit.or.impl.AbstractSession.syncSchemaWithDB(AbstractSession.java:504)

    at de.espirit.or.impl.SessionImpl.syncSchemaWithDB(SessionImpl.java:26)

    at de.espirit.firstspirit.store.access.templatestore.SchemaImpl.saveExternalAttributes(SchemaImpl.java:306)

    at de.espirit.firstspirit.store.access.DefaultStoreElement.save(DefaultStoreElement.java:718)

    at de.espirit.firstspirit.store.access.DefaultStoreElement.save(DefaultStoreElement.java:683)

    at de.espirit.firstspirit.store.access.DefaultStoreElement.save(DefaultStoreElement.java:666)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractGuiStoreElement.writeToServer(AbstractGuiStoreElement.java:689)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractGuiStoreElement.store(AbstractGuiStoreElement.java:1350)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractGuiStoreElement.save(AbstractGuiStoreElement.java:606)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractGuiStoreElement.save(AbstractGuiStoreElement.java:595)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractGuiStoreElement.save(AbstractGuiStoreElement.java:579)

    at de.espirit.firstspirit.client.gui.tree.store.AbstractGuiStoreElement.save(AbstractGuiStoreElement.java:570)

    at de.espirit.firstspirit.client.action.SaveAction.actionPerformed(SaveAction.java:77)

    at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1663)

    at de.espirit.firstspirit.client.tree.FSTree.processKeyBinding(FSTree.java:721)

    at javax.swing.JComponent.processKeyBindings(JComponent.java:2929)

    at javax.swing.JComponent.processKeyEvent(JComponent.java:2845)

    at java.awt.Component.processEvent(Component.java:6302)

    at java.awt.Container.processEvent(Container.java:2234)

    at java.awt.Component.dispatchEventImpl(Component.java:4881)

    at java.awt.Container.dispatchEventImpl(Container.java:2292)

    at java.awt.Component.dispatchEvent(Component.java:4703)

    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)

    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)

    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)

    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)

    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)

    at java.awt.Component.dispatchEventImpl(Component.java:4752)

    at java.awt.Container.dispatchEventImpl(Container.java:2292)

    at java.awt.Component.dispatchEvent(Component.java:4703)

    at de.espirit.firstspirit.client.keymap.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:167)

    at de.espirit.firstspirit.client.AWTDispatchingEventQueue._dispatchEvent(AWTDispatchingEventQueue.java:141)

    at de.espirit.firstspirit.client.AWTDispatchingEventQueue.dispatchEvent(AWTDispatchingEventQueue.java:131)

    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)

    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

Hat jemand eine Idee, worin das Problem bestehen könnte? Wie kann ich den Fehler weiter eingrenzen?

Vielen Dank & viele Grüße

Hendrik

0 Kudos
1 Solution

Accepted Solutions
isenberg
I'm new here

Hallo Hendrik,

es fehlt vermutlich folgende Zeile in der Konfiguration:

jdbc.SCHEMA=public

Siehe Kapitel "4.9.7.4 Konfigurationsbeispiel: PostgreSQL".

Ohne jdbc.SCHEMA ist es automatisch ein sogenannter FirstSpirit DBA-Layer, der DB-Admin-Rechte benötigt um selbstständig neue Benutzerkonten und Schemate in der Datenbank anlegen zu können. Mit jdbc.SCHEMA ist es ein FirstSpirit Standard-Layer der eigentlich immer verwendet werden sollte.

View solution in original post

0 Kudos
2 Replies
isenberg
I'm new here

Hallo Hendrik,

es fehlt vermutlich folgende Zeile in der Konfiguration:

jdbc.SCHEMA=public

Siehe Kapitel "4.9.7.4 Konfigurationsbeispiel: PostgreSQL".

Ohne jdbc.SCHEMA ist es automatisch ein sogenannter FirstSpirit DBA-Layer, der DB-Admin-Rechte benötigt um selbstständig neue Benutzerkonten und Schemate in der Datenbank anlegen zu können. Mit jdbc.SCHEMA ist es ein FirstSpirit Standard-Layer der eigentlich immer verwendet werden sollte.

0 Kudos

Hallo Holger,

vielen Dank, es lag tatsächlich an dem fehlenden jdbc.SCHEMA=public. Nachdem ich das in die JDBC-Konfiguration eingefügt hatte, trat die Fehlermeldung im SiteArchitect nicht mehr auf.

Viele Grüße

Hendrik

0 Kudos