该 go-mssqldb 驱动是纯粹的 Go 库,能够在 Linux 和 macOS 上原生编译,无需外部 C 依赖。 本文介绍了针对认证和证书的平台特定配置。
Installation
所有平台的安装方式相同:
go get github.com/microsoft/go-mssqldb
无需 ODBC 驱动、FreeTDS 或其他 C 库。
SQL 身份验证
SQL 认证在 Linux、macOS 和 Windows 上工作方式相同:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025
NTLM 身份验证
NTLM认证支持所有平台。 提供一个符合域名的用户名:
URL 格式
将 DOMAIN\user 中的反斜杠进行 URL 编码为 %5C:
sqlserver://CONTOSO%5C<user>:<password>@<server>:1433?database=mydb
ADO格式
用户名中的反斜杠会触发 NTLM 的身份验证:
server=<server>;user id=DOMAIN\<user>;password=<password>;database=AdventureWorks2025
驱动程序检测到用户名中的反斜杠,自动使用NTLM。 Linux 或 macOS 上无需额外配置。
Kerberos 身份验证
Linux和macOS上的Kerberos认证使用 krb5 驱动内置的包。 没有外部库依赖。
先决条件
一个有效的Kerberos配置文件。 默认路径为
/etc/krb5.conf:[libdefaults] default_realm = MYDOMAIN.COM dns_lookup_kdc = true [realms] MYDOMAIN.COM = { kdc = dc1.mydomain.com }SQL Server实例必须注册服务主体名称(SPN)(例如,
MSSQLSvc/<server>.mydomain.com:1433)。
用键盘连接
在连接字符串中指定 keytab 文件路径和 Kerberos 域:
sqlserver://<user>@MYDOMAIN.COM@<server>:1433?database=AdventureWorks2025&krb5-realm=MYDOMAIN.COM&krb5-keytabfile=/etc/<user>.keytab
连接到凭证缓存
首先,获取一张票:
kinit <user>@MYDOMAIN.COM
然后通过缓存的凭据连接:
sqlserver://<user>@MYDOMAIN.COM@<server>:1433?database=AdventureWorks2025&krb5-realm=MYDOMAIN.COM&krb5-credcachefile=/tmp/krb5cc_1000
Kerberos 参数
| 参数 | 默认 | Description |
|---|---|---|
krb5-configfile |
/etc/krb5.conf |
通往Kerberos配置文件的路径。 |
krb5-realm |
- | Kerberos 域(例如,MYDOMAIN.COM)。 |
krb5-keytabfile |
- | keytab 文件的路径。 |
krb5-credcachefile |
- | 通往凭据缓存文件的路径。 |
krb5-dnslookupkdc |
true |
使用 DNS SRV 记录来查找密钥分发中心(KDC)。 |
krb5-udppreferencelimit |
1 |
切换到 TCP 前的最大 UDP 消息大小。 |
更多信息请参见SQL Server和Windows 身份验证。
Windows 身份验证(SSPI)不可用
在 Linux 和 macOS 上,Windows 集成认证(SSPI / trusted_connection=yes)不可用。 请使用以下选项之一:
| 方法 | 连接字符串 |
|---|---|
| NTLM | sqlserver://DOMAIN%5Cuser:password@host?database=db |
| Kerberos(keytab) | sqlserver://user@REALM@host?database=db&krb5-realm=REALM&krb5-keytabfile=/path |
| Kerberos(缓存) | sqlserver://user@REALM@host?database=db&krb5-realm=REALM&krb5-credcachefile=/path |
| SQL 身份验证 | sqlserver://user:password@host?database=db |
| Microsoft Entra ID |
sqlserver://host?database=db&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false(使用 azuresql 驱动程序) |
证书配置
在 Linux 和 macOS 上,带 certificate or serverCertificate 参数的 TLS 证书必须是 PEM 编码的文件。 驱动程序通过直接使用 Go 的 crypto/tls 软件包读取它们。
系统信任存储区
驱动程序使用操作系统默认的证书信任存储。 在 Linux 上,这个信任存储通常位于 /etc/ssl/certs/ 或 /etc/pki/tls/certs/。 在 macOS 上,使用的是系统钥匙串。
要向系统存储添加自定义CA证书:
Ubuntu/Debian:
sudo cp myca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
RHEL/Fedora:
sudo cp myca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust
macOS:
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain myca.crt
或者,使用 certificate 连接参数直接指定CA证书,而无需修改系统存储:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&certificate=/path/to/ca-cert.pem