github.com/snowflakedb/gosnowflake@v1.9.0/cmd/mfa/mfa.go (about) 1 package main 2 3 import ( 4 "database/sql" 5 "flag" 6 "fmt" 7 "log" 8 9 sf "github.com/snowflakedb/gosnowflake" 10 ) 11 12 func main() { 13 if !flag.Parsed() { 14 flag.Parse() 15 } 16 17 cfg, err := sf.GetConfigFromEnv([]*sf.ConfigParam{ 18 {Name: "Account", EnvName: "SNOWFLAKE_TEST_ACCOUNT", FailOnMissing: true}, 19 {Name: "User", EnvName: "SNOWFLAKE_TEST_USER", FailOnMissing: true}, 20 {Name: "Password", EnvName: "SNOWFLAKE_TEST_PASSWORD", FailOnMissing: true}, 21 {Name: "Host", EnvName: "SNOWFLAKE_TEST_HOST", FailOnMissing: false}, 22 {Name: "Port", EnvName: "SNOWFLAKE_TEST_PORT", FailOnMissing: false}, 23 {Name: "Protocol", EnvName: "SNOWFLAKE_TEST_PROTOCOL", FailOnMissing: false}, 24 }) 25 if err != nil { 26 log.Fatalf("failed to create Config, err: %v", err) 27 } 28 cfg.Authenticator = sf.AuthTypeUsernamePasswordMFA 29 dsn, err := sf.DSN(cfg) 30 if err != nil { 31 log.Fatalf("failed to create DSN from Config: %v, err: %v", cfg, err) 32 } 33 34 // The external browser flow should start with the call to Open 35 db, err := sql.Open("snowflake", dsn) 36 if err != nil { 37 log.Fatalf("failed to connect. %v, err: %v", dsn, err) 38 } 39 defer db.Close() 40 query := "SELECT 1" 41 rows, err := db.Query(query) 42 if err != nil { 43 log.Fatalf("failed to run a query. %v, err: %v", query, err) 44 } 45 defer rows.Close() 46 var v int 47 for rows.Next() { 48 err := rows.Scan(&v) 49 if err != nil { 50 log.Fatalf("failed to get result. err: %v", err) 51 } 52 if v != 1 { 53 log.Fatalf("failed to get 1. got: %v", v) 54 } 55 fmt.Printf("Congrats! You have successfully run %v with Snowflake DB!", query) 56 } 57 }