2016-03-28 1 views
2

多くのデータベースロール(ユーザを表す)を持つPostgresデータベースを実行し、hibernateを使用して、すべてのデータベース文が特定のユーザとフェッチされた接続を使用して実行される状況を処理するにはどうしたらいいですか?もちろんhibernateを使用して多数のDBロール(ユーザー)を持つWebアプリケーションを管理するにはどうすればよいですか?

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

を私はSession/EntityManagerを作成することができます。私たちは通常、このようなpersistence.xmlに指定され、DBのユーザー/パスワードを必要とする、EntityManagerFactoryからそれをフェッチする必要がSession/EntityManagerを取得するために

別のEntityManagerFactoryを使用しているすべてのユーザーに対して、これはコストのかかる操作です。どのようにしてこの問題を解決できますか?

+0

基本となるRDBMSとは何ですか? – kevingreen

+0

Oracleはセッション中にスキーマの変更をサポートしているので、私はそれを尋ねます。 'ALTER SESSION SET CURRENT_SCHEMA' – kevingreen

+0

DBはPostgresです。 –

答えて

2

もしRDBMSがPostgreSQLなら、これを達成する最良の方法はSET ROLEコマンドを呼び出すことです。このコマンドは、ロールと権限を指定されたロールに変更します。セッション中にすべてのSQLコマンドを実行すると、最初にそのロールでログインしたかのようになります。

Here is a link to the Postgres documentation.

+0

この方法では、ユーザとパスワードを保存してシステムにログインできるようにするには、まだテーブルが必要ですか? (認証はテーブルを介して行われ、ロールはアクセス権/書き込みアクセス許可のためだけに使用されます)。 –

+0

PostgreSQLがロールを扱う標準的な方法で権限を管理します。ユーザーごとに 'CREATE ROLE'を実行し、権限を割り当てる必要があります。 – kevingreen

関連する問題