2016-03-28 6 views
2

Wie behandelt man die Situation, in der eine Postgres-Datenbank mit vielen Datenbankrollen (die die Benutzer repräsentiert) ausgeführt wird und Hibernate verwendet werden soll, so dass jede Datenbankanweisung mit einer Verbindung ausgeführt wird, die mit dem bestimmten Benutzer abgerufen wird?Wie man eine Webapp mit vielen DB-Rollen (Benutzer) mit Hibernate verwaltet?

Um ein Session/EntityManager wir es von einem EntityManagerFactory holen müssen, die ein DB Benutzer/Passwort benötigt, in der Regel in persistence.xml wie folgt angegeben:

<property name="javax.persistence.jdbc.user" value="SYSDBA"/> 
<property name="javax.persistence.jdbc.password" value="masterkey"/> 

Natürlich ich ein Session/EntityManager erstellen für jeden Benutzer mit einem separaten EntityManagerFactory, aber das ist eine kostspielige Operation. Wie kann dieses Problem gelöst werden?

+0

Was ist die zugrunde liegende RDBMS? – kevingreen

+0

Ich frage das, weil Oracle das Ändern des Schemas während einer Sitzung unterstützt. 'ALTER SESSION SET CURRENT_SCHEMA' – kevingreen

+0

Die DB ist Postgres. –

Antwort

2

Wenn das RDBMS PostgreSQL Ich denke, die beste Art und Weise, dies zu erreichen wäre, den SET ROLE Befehl aufzurufen. Dieser Befehl ändert die Rolle und die Berechtigungen in die angegebene Rolle. Es führt alle SQL-Befehle während der Sitzung aus, als ob Sie sich am Anfang bei dieser Rolle angemeldet hätten.

Here is a link to the Postgres documentation.

+0

Auf diese Weise brauche ich noch eine Tabelle, um meine Benutzer und ihre Passwörter zu speichern, damit sie sich im System anmelden können, richtig? (Die Authentifizierung würde über die Tabelle erfolgen und die Rolle würde nur für Zugriffs-/Schreibberechtigungen verwendet werden). –

+0

Sie verwalten Berechtigungen die Standardmethode, mit der PostgreSQL Rollen verarbeitet. Sie müssen für jeden Benutzer eine CREATE ROLE ausführen und Berechtigungen zuweisen. – kevingreen

Verwandte Themen