2

私の Scala/Play アプリケーションでは、データベースを操作する必要がありますが、認証されたすべてのアプリケーション ユーザーが異なる DB ユーザーにバインドされているため、デフォルトのユーザーとパスワードはありません。したがって、接続を取得するときにユーザー名とパスワードを指定したいと思います。

DB.withConnection(user = "James", password = "secret") { ... }

今のところ、ドキュメントでそのような機能を見つけることができません (正直なところ、質問に対して検索クエリを指定する方法がわかりません)。

別の質問: セッションがユーザー側に保存されていることを考慮して、セッションにユーザーパスワードを保存しても安全ですか? または、異なる DB ユーザーがアプリを操作する場合のベスト プラクティスはありますか?

4

1 に答える 1

2

質問 1 への回答

Play では、データソースを名前で取得します。

def getDataSource(name: String): DataSource

play.api.db必要な機能を得るには、パッケージ内のものをかなりハッキングする必要があります。

または、アプリのユーザー数が少ない場合は、一連のデータソースを事前に定義し、ログイン名で接続を取得できます。次に例を示します。

db.bob.url="jdbc:h2:mem:db_for_bob"
db.bob.driver=org.h2.Driver

db.alice.url="jdbc:h2:mem:db_for_alice"
db.alice.driver=org.h2.Driver

DB.withConnection("bob") { implicit connection =>

または

DB.withConnection(userNameKnownAtRuntime) { implicit connection =>

質問 2 への回答

セッション内のデータはアプリケーション シークレットを使用して高度に暗号化されていますが、これらをクライアント側に保存しないことをお勧めします。代わりに、OAuth 2 仕様のこのセクションに従って、 Resource Owner Password Credentials Grantの行に沿って何かを実装します。これにより、一定期間のみ有効なトークンがクライアントに提供され、必要に応じてサーバー側で無効になる可能性があります。

于 2012-06-18T14:42:00.630 に答える