3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

golangでDBの接続文字列にパスワードを含めない安全な方法。

Posted at

GolangとDBを接続して株価データをチャート表示するの続きです。

前回の記事では、ユーザIDやパスワードをソースにベタ書きしていました。
7Payもびっくりのセキュリティホールですね。

stockdata.go
    db, err := sql.Open("sqlserver", "server=.;user id=sa;password=password;database=Stock")

今回は、ソースに接続に必要な情報を書くことなくDBに接続を行う方法をまとめていきます。

##godotenv

結論から言うと、godotenvというモジュールをインポートして使います。

①go get github.com/joho/godotenvをターミナルで実行
②インポート

stockdata.go
import (
...
	"github.com/joho/godotenv"
)

これだけです。

##.envファイルを用意

.env(dotenv)ファイルに関する説明はこちらが分かりやすいです。
今回は、ユーザIDとパスワードを以下のように書きます。
.envファイルはmain.goと同階層に置きます。

DB_USER = "sa"
DB_PASSWORD = "password"

image.png

##.envファイルを読み込み
実際に.envファイルを読み込むときに使うのが、最初にインポートしたgodotenvです。
以下のようにLoadメソッドを使います。
godotenvのソースを追っていくとわかりますが、filenamesの引数が空文字の場合には、自動的に.envファイルを参照するようになります。
.envファイルの情報を読み込んだら、後はos.Getenvメソッドで情報を読み込むことができます。

stockdata.go
func GetData(stockcode string) (df *StockData, err error) {
    //べた書き禁止!
    // db, err := sql.Open("sqlserver", "server=.;user id=sa;password=password;database=Stock")
	e := godotenv.Load() //Load env.file
	if e != nil {
		log.Println(e)
	}
	dbConnection := fmt.Sprintf("server=.;user id=%s;password=%s;database=Stock", os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD"))
	db, err := sql.Open("sqlserver", dbConnection)
	defer db.Close()
...
}
godotenv.go
func Load(filenames ...string) (err error) {
	filenames = filenamesOrDefault(filenames)

	for _, filename := range filenames {
		err = loadFile(filename, false)
		if err != nil {
			return // return early on a spazout
		}
	}
	return
}

func filenamesOrDefault(filenames []string) []string {
	if len(filenames) == 0 {
		//引数が空なら自動で.envを参照
		return []string{".env"}
	}
	return filenames
}

##最後に注意点
さて、前回と比べてセキュリティを考慮したソースが完成しました。
ただ、.envファイルをgithubにアップロードしたら、最悪AWSサーバのパスが抜かれてしまいますね。
そういう場合に備えて、.gitignoreファイルにはしっかり.envを登録しておきましょう。

.ignore
.env
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?