diff --git a/examples/azuread-service-principal/service_principal.go b/examples/azuread-service-principal/service_principal.go new file mode 100644 index 00000000..c20bbf55 --- /dev/null +++ b/examples/azuread-service-principal/service_principal.go @@ -0,0 +1,60 @@ +package main + +import ( + "database/sql" + "flag" + "fmt" + "log" + + _ "github.com/denisenkom/go-mssqldb" + "github.com/denisenkom/go-mssqldb/azuread" +) + +var ( + debug = flag.Bool("debug", true, "enable debugging") + password = flag.String("password", "", "the client secret for the app/client ID") + port *int = flag.Int("port", 1433, "the database port") + server = flag.String("server", "", "the database server") + user = flag.String("user", "", "the app/client ID of the service principal") + database = flag.String("database", "", "the database name") +) + +func main() { + flag.Parse() + + if *debug { + fmt.Printf(" password:%s\n", *password) + fmt.Printf(" port:%d\n", *port) + fmt.Printf(" server:%s\n", *server) + fmt.Printf(" user:%s\n", *user) + fmt.Printf(" database:%s\n", *database) + } + + connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s;fedauth=ActiveDirectoryServicePrincipal;", *server, *user, *password, *port, *database) + if *debug { + fmt.Printf(" connString:%s\n", connString) + } + conn, err := sql.Open(azuread.DriverName, connString) + if err != nil { + log.Fatal("Open connection failed:", err.Error()) + } + defer conn.Close() + + stmt, err := conn.Prepare("select 1, 'abc'") + if err != nil { + log.Fatal("Prepare failed:", err.Error()) + } + defer stmt.Close() + + row := stmt.QueryRow() + var somenumber int64 + var somechars string + err = row.Scan(&somenumber, &somechars) + if err != nil { + log.Fatal("Scan failed:", err.Error()) + } + fmt.Printf("somenumber:%d\n", somenumber) + fmt.Printf("somechars:%s\n", somechars) + + fmt.Printf("bye\n") +}