Skip to content

Commit 80bb91c

Browse files
committed
Add support for authenticating to azure using Azure Active Directory
This patch adds support for using "azuresql" driver which supports active directory login. The change adds a new "protocol" azuresql which is the driver name for using AD instead of regular SQL Server authentication.
1 parent 6141731 commit 80bb91c

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

go.mod

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ require (
1616
)
1717

1818
require (
19+
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0 // indirect
20+
github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0 // indirect
21+
github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0 // indirect
1922
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect
2023
github.com/Masterminds/goutils v1.1.1 // indirect
2124
github.com/Masterminds/semver/v3 v3.1.1 // indirect
@@ -79,6 +82,7 @@ require (
7982
github.com/opencontainers/go-digest v1.0.0 // indirect
8083
github.com/opencontainers/image-spec v1.0.2 // indirect
8184
github.com/opencontainers/runc v1.1.2 // indirect
85+
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 // indirect
8286
github.com/pkg/errors v0.9.1 // indirect
8387
github.com/posener/complete v1.2.3 // indirect
8488
github.com/russross/blackfriday v1.6.0 // indirect

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
2+
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0 h1:lhSJz9RMbJcTgxifR1hUNJnn6CNYtbgEDtQV22/9RBA=
23
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw=
4+
github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0 h1:OYa9vmRX2XC5GXRAzeggG12sF/z5D9Ahtdm9EJ00WN4=
35
github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0=
6+
github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0 h1:v9p9TfTbf7AwNb5NYQt7hI41IfPoLFiFkLtb+bmGjT0=
47
github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8=
58
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
69
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
@@ -310,6 +313,7 @@ github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.m
310313
github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI=
311314
github.com/ory/dockertest/v3 v3.9.1 h1:v4dkG+dlu76goxMiTT2j8zV7s4oPPEppKT8K8p2f1kY=
312315
github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM=
316+
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 h1:49lOXmGaUpV9Fz3gd7TFZY106KVlPVa5jcYD1gaQf98=
313317
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA=
314318
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
315319
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=

internal/provider/db.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"time"
1010

1111
// database drivers
12-
_ "github.com/denisenkom/go-mssqldb"
12+
_ "github.com/denisenkom/go-mssqldb/azuread"
1313
_ "github.com/go-sql-driver/mysql"
1414
_ "github.com/jackc/pgx/v4/stdlib"
1515

@@ -48,6 +48,9 @@ func (p *provider) connect(dsn string) error {
4848
// TODO: also set parseTime=true https://github.com/go-sql-driver/mysql#parsetime
4949
case "sqlserver":
5050
p.Driver = "sqlserver"
51+
case "azuresql":
52+
p.Driver = "azuresql"
53+
dsn = strings.Replace(dsn, "azuresql://", "sqlserver://", 1)
5154
default:
5255
return fmt.Errorf("unexpected datasource name scheme: %q", scheme)
5356
}
@@ -178,6 +181,8 @@ func (p *provider) typeAndValueForColType(colType *sql.ColumnType) (tftypes.Type
178181
kind := scanType.Kind()
179182

180183
switch p.Driver {
184+
case "azuresql":
185+
fallthrough
181186
case "sqlserver":
182187
switch dbName := colType.DatabaseTypeName(); dbName {
183188
case "UNIQUEIDENTIFIER":

0 commit comments

Comments
 (0)