golang에서 데이터베이스 연결 문자열은 비밀번호를 포함하지 않는 안전한 방법입니다.

6329 단어 Go암호 관리
Golang과 DB 차트를 연결하여 주가 데이터를 표시합니다. 계속.
이전 글에서 나는 원본에 사용자 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.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

좋은 웹페이지 즐겨찾기