golang에서 데이터베이스 연결 문자열은 비밀번호를 포함하지 않는 안전한 방법입니다.
이전 글에서 나는 원본에 사용자 ID와 비밀번호를 썼다.
7Pay도 놀라운 안전홀이다.
stockdata.go
db, err := sql.Open("sqlserver", "server=.;user id=sa;password=password;database=Stock")
이번에 우리는 원본 코드에 연결에 필요한 정보를 쓰지 않고 데이터베이스에 연결하는 방법을 총결할 것이다.godotenv
결론적으로 말하자면, 이 모듈을 도입하여 사용한다.
①go get github.터미널에서 com/joho/godotenv 실행
② 가져오기
stockdata.go
import (
...
"github.com/joho/godotenv"
)
이게 다야..env 파일 준비
.env(dotenv) 파일에 대한 설명godotenv은 이해하기 쉽습니다.
이번에는 사용자 ID 및 암호가 다음과 같습니다.
.env 파일은main입니다.고와 같은 층에 두다.
DB_USER = "sa"
DB_PASSWORD = "password"
여기 .env 파일 가져오기
사실env 파일을 가져올 때 사용한 것은 최초로 가져온 godotenv입니다.
다음과 같이 로드 방법을 사용합니다.
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.gofunc 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
Reference
이 문제에 관하여(golang에서 데이터베이스 연결 문자열은 비밀번호를 포함하지 않는 안전한 방법입니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/_kyamasan/items/8b5673f5927dc7f741bf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)