メモ_セキュリティー対策のためDB接続情報をコード外部に置く

手元でデータ前処理とかで使う場合は、面倒なのでコード中にDB接続情報を書いてしまったりするけど、外部に出すアプリなどのコードではあまりに怖いので、接続情報は外部化して安全にしておきたいですよね。

 

コンフィグファイルを使用する:
  1. テキストファイルなどにデータベース接続情報を記述します。
  2. Pythonの configparser モジュールを使用して、コンフィグファイルから接続情報を読み込みます。


import mysql.connector
from configparser import ConfigParser

# コンフィグファイルの読み込み
config = ConfigParser()
config.read('config.ini')

# データベースに接続
conn = mysql.connector.connect(
    host=config.get('Database', 'host'),
    user=config.get('Database', 'user'),
    password=config.get('Database', 'password'),
    database=config.get('Database', 'database')
)
cursor = conn.cursor()

# ... アプリの処理コード ...

コンフィグファイルの構造は以下


[Database]
host = localhost
user = your_username
password = your_password
database = your_database

これで、config.ini はリポジトリの外に置いておくとかすれば、間違ってgithubにアップして漏洩、みたいな事故は防げます。あるいはgithubの「.gitignore」に「.ini」を設定しておけば、同期したときに自動的に除外されるので安心。

 

 

環境変数を使用する方法:
  1. システムの環境変数にデータベース接続情報を設定します。環境変数を設定するためのファイルの一般的な場所は、Ubuntuの場合は ~/.bashrc もしくは ~/.bash_profile です。
  2. vi や nanoなどで上記ファイルを編集します。ファイルの最後に以下を追記します。
    export DB_HOST=localhost
    export DB_USER=your_username
    export DB_PASSWORD=your_password
    export DB_DATABASE=your_database
  3. ファイルを保存したあとに、次のコマンドをターミナルなどで実行します。
    source ~/.bashrc
  4. Pythonの os.environ を使用して、環境変数から接続情報を取得します。

import mysql.connector
import os

# データベースに接続
conn = mysql.connector.connect(
    host=os.environ['DB_HOST'],
    user=os.environ['DB_USER'],
    password=os.environ['DB_PASSWORD'],
    database=os.environ['DB_DATABASE']
)
cursor = conn.cursor()

# ... 以降、アプリの処理コードとか ...

コンフィグファイルではなく環境変数を利用する方法。こちらのほうが一般的かな。