質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

3回答

2939閲覧

データベースのパスワードをどこに定義すればよいか(context.xml? 環境変数?)

yuji38kwmt

総合スコア437

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

1グッド

3クリップ

投稿2017/07/04 12:29

開発環境

「Terasoluna Web Server」というフレームワークを使って、Webシステムを開発しています。

データベースの接続設定は、webapps/META-INF/context.xmlファイルに書いています。

sql

1<!-- webapps/META-INF/context.xmlの中身 --> 2 3<Context> 4 <Resource 5 name="jdbc/SampleDataSource" 6 type="javax.sql.DataSource" 7 driverClassName="org.postgresql.Driver" 8 username="postgres" 9 password="password" 10 url="jdbc:postgresql://127.0.0.1:5432/sampledb" 11 maxIdle="2" 12 maxWait="5000" 13 maxActive="4"/> 14</Context>

データベースのパスワードは、ローカル環境、テスト環境、本番環境でそれぞれ異なります。

データベースのパスワードに対する扱い

各環境に対応するGitのブランチを作成して、各環境によるパスワードの違いをGitのブランチで吸収しています。
これにより、「デプロイするたびに、手動でファイルを修正する」という作業がなくなります。

ただし、以下の問題もあります。

  • すべてのメンバーに対して、データベース環境が同じとは限らない(できるだけ揃えてはいる)ので、個別にcontext.xmlを修正するときがある。
  • 間違えてコミットしたことにより、「テスト環境用ブランチなのに、ローカル環境のパスワードが記入されている」ことがある。

質問

上記の問題を解決する方法があれば、教えていただきたいです。

「パスワードを環境変数に設定する」方法も思いつきました(下記サイト参考)が、context.xmlで環境変数を参照する方法が分かりませんでした。
http://qiita.com/ka_/items/a19f65628bdc213fc8f5
※そもそも「環境変数にパスワードを保存する」のは「あり」なのでしょうか?

また、皆さんは、「データベースのパスワードをどこで定義しているのか」、差支えなければ教えてください。

A-pZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

環境変数という考え方で基本あっているのですが、Javaでは通常環境変数にアクセスすることはせず

  • 環境変数 JAVA_OPTS とか CATALINA_OPTS を使ってシステムプロパティをセット
  • システムプロパティはcontext.xml中から${key}記法で参照可能

というやり方でアクセスします。

投稿2017/07/04 12:37

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuji38kwmt

2017/07/28 13:42

ありがとうございます!
guest

0

本番DBの情報は開発者に見えないようになっているのがよいと思っています。

というのも、外部で開発させるなど、ソースコードは比較的セキュリティが保ちずらい傾向があるからです。

私は、本番用の設定ファイルは本番機とその管理を行う人しか扱えないようにします。

逆にテスト用の設定ファイルはgitに含めてもそれほど問題が無いように思えます。(DB内に個人情報などがある場合は別の問題として考える必要があります。)

どのように使うかというと、デバッグと検証と本番用のデプロイコマンドを分ければよいと思います。できる限り共通化するのは大事ですが、この部分であれば仕方がないと思います。

可能であれは、本番環境のデプロイコマンドが検証環境用のデプロイコマンドが呼び出してその後、設定ファイルのコピーなど環境設定を行う設定が良いと思います。検証時に本番環境用のデプロイコマンドの動作チェックができるからです。

投稿2017/07/11 02:58

iwamoto_takaaki

総合スコア2883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

context.xmlにかく

ただし、META-INF/context.xmlではなく

$CATALINA_HOME/conf/[engine name]/[host name]/[app name]/context.xml 等の環境依存用設定ファイル置場

投稿2017/07/10 23:08

編集2017/07/10 23:11
ahodana

総合スコア77

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問