SQL Server
Connect & Ingest data from / to a SQL Server database
Setup
The following credentials keys are accepted:
host(required) -> The hostname / ip of the instanceuser(optional) -> The username to access the instancedatabase(optional) -> The database name of the instanceinstance(optional) -> The SQL Server instance to useschema(optional) -> The default schema to usepassword(optional) -> The password to access the instanceport(optional) -> The port of the instance. Default is1433.authenticator(optional) -> Can be used to specify use of a registered authentication provider. (e.g.ntlm,winsspi(on windows) orkrb5(on linux))ssh_tunnel(optional) -> The URL of the SSH server you would like to use as a tunnel (examplessh://user:password@db.host:22)ssh_private_key(optional) -> The private key to use to access a SSH server (raw string or path to file).ssh_passphrase(optional) -> The passphrase to use to access a SSH server.fedauth(optional) -> The Azure Active Directory authentication string (e.g. for Fabric connection). See here for more details. Accepted values:ActiveDirectoryDefault,ActiveDirectoryIntegrated,ActiveDirectoryPassword,ActiveDirectoryInteractive,ActiveDirectoryMSI,ActiveDirectoryManagedIdentity,ActiveDirectoryApplication,ActiveDirectoryServicePrincipal,ActiveDirectoryServicePrincipalAccessToken,ActiveDirectoryDeviceCode,ActiveDirectoryAzCli.use_adbc(optional) -> Enable Arrow Database Connectivity (ADBC) driver for high-performance data transfer. See ADBC for setup and details. (v1.5.2+)adbc_uri(optional) -> Override the automatically constructed ADBC connection URI when usinguse_adbc=true.
Additional Parameters
Sling uses the go-mssqldb library and thus will accept any paremters listed here. Some parameters that may be of interest:
encrypt->strict,disable,falseortrue- whether data between client and server is encrypted.log-> logging level (accepts1,2,4,8,16,32).trusted_connection->trueorfalse- whether to connects to SQL Server with a trusted connection using integrated security (also will use the-Tflag when using bulk loading withbcp)trust_server_certificate->trueorfalse- whether the server certificate is checkedcertificate-> The file that contains the public key certificate of the CA that signed the SQL Server certificate. The specified certificate overrides the go platform specific CA certificates.hostname_in_certificate-> Specifies the Common Name (CN) in the server certificate. Default value is the server host.server_spn-> The kerberos SPN (Service Principal Name) for the server. Default is MSSQLSvc/host:port.driver-> A way to override the sql driver to connect with. Default issqlserver. Other option isazuresqlbcp_auth_string-> A way to override the waybcpauthenticates. Accepts an array of strings, for example['U', 'username', '-T', '-G']will append flags-U username -T -Gto thebcpcommand.bcp_extra_args-> A way to add additional args to thebcpcommand. Accepts an array of strings, for example['b', '5000']will append flags-b 5000to thebcpcommand.bcp_entra_auth-> Appends the-Gflag to thebcpcommand for MS Entra Auth.bcp_path-> The path to thebcpbinary. This is useful if you need to specify a custom path forbcp.bcp_azure_token_resource(v1.4.24+) -> where usingfed_auth=ActiveDirectoryAzCli, this indicates the resource to use to obtain an access token for BCP to use. Default ishttps://database.windows.netaz_path-> The path to theazbinary. This is useful if you need to specify a custom path forazto obtain an access token.
Kerberos Parameters
authenticator- set this tokrb5to enable kerberos authentication. If this is not present, the default provider would bentlmfor unix andwinsspifor windows.krb5_config_file(optional) - path to kerberos configuration file. Defaults to/etc/krb5.conf. Can also be set usingKRB5_CONFIGenvironment variable.krb5_realm(required with keytab and raw credentials) - Domain name for kerberos authentication. Omit this parameter if the realm is part of the user name likeusername@REALM.krb5_keytab_file- path to Keytab file. Can also be set using environment variableKRB5_KTNAME. If no parameter or environment variable is set, theDefaultClientKeytabNamevalue from the krb5 config file is used.krb5_cred_cache_file- path to Credential cache. Can also be set using environment variableKRB5CCNAME.krb5_dns_lookup_kdc- Optional parameter in all contexts. Set to lookup KDCs in DNS. Boolean. Default is true.krb5_udp_preference_limit- Optional parameter in all contexts. 1 means to always use tcp. MIT krb5 has a default value of 1465, and it prevents user setting more than 32700. Integer. Default is 1.
Sling supports authentication via 3 methods. See here for more details.
Keytabs - Specify the username, keytab file, the krb5.conf file, and realm.
Credential Cache - Specify the krb5.conf file path and credential cache file path.
Raw credentials - Specity krb5.confg, Username, Password and Realm.
Using sling conns
Here are examples of setting a connection named MSSQL. We must provide the type=sqlserver property:
Environment Variable
See here to learn more about the .env.sling file.
Sling Env File YAML
See here to learn more about the sling env.yaml file.
ADBC (Arrow Database Connectivity)
Sling supports SQL Server through both the standard TDS path (go-mssqldb) and the ADBC path. ADBC keeps data in Apache Arrow columnar format end-to-end and uses SQL Server's bulk-load API for writes, which is significantly faster than row-by-row TDS for large loads — and avoids shelling out to bcp. (v1.5.2+)
Flip a regular type: sqlserver connection over to ADBC by adding use_adbc: true. The rest of the connection properties stay the same. See the ADBC documentation for driver-manager install (conda install -c conda-forge libadbc-driver-manager) and driver install (dbc install mssql).
Enable on an existing connection
ADBC-specific properties
use_adbc(optional) -> Enable ADBC for this connection (trueorfalse). Default isfalse.adbc_uri(optional) -> Override the automatically constructed ADBC URI. Sling builds it fromhost,port,user,password,database, but you can supply your own (e.g. for non-default driver flags). Format:mssql://user:password@host:port/database.driver(optional) -> Explicit path to the ADBC SQL Server driver library file (e.g.~/.dbc/drivers/mssql/lib/libadbc_driver_mssql.dylib). If not set, Sling auto-discovers the driver fromdbc's standard install locations.
When to use it
ADBC is the better path in three situations:
Loading from Arrow-native sources. When the source is DuckDB, Parquet, or any other Arrow-producing system, ADBC carries Arrow batches end-to-end without re-serializing through SQL strings.
Large writes that would otherwise need
bcp. ADBC's bulk insert is faster than row-by-row TDS and stays inside one process and one transaction boundary.Read-heavy analytics. ADBC reads return Arrow record batches; downstream Polars / DuckDB / pandas conversions are free copies. From Python, use
Sling(...).stream_arrow()instead ofstream()to receive Arrow batches directly.
The default TDS path is the right answer for short interactive queries, smaller writes, anywhere you want to avoid the dbc driver install, and anywhere you need features the ADBC driver doesn't expose yet (Kerberos, certain Azure auth modes).
ADBC example
A full end-to-end example is available here.
Troubleshooting
TLS Handshake Failed: cannot read handshake packet: EOF
Starting with Sling v1.5.x, you may encounter this error when connecting to SQL Server instances that use TLS certificates signed with the SHA-1 algorithm. This is due to Go 1.25 disabling SHA-1 signature algorithms in TLS 1.2 handshakes (per RFC 9155).
Recommended fix: Replace the SQL Server's TLS certificate with one using SHA-256 or stronger.
Workaround: Set the GODEBUG environment variable before running Sling:
The tlssha1=1 workaround is temporary. Future versions of Go will remove this option entirely. Upgrading your SQL Server's TLS certificate to SHA-256 is strongly recommended.
Alternative workaround: If your network environment allows it, you can disable TLS encryption entirely by adding encrypt=disable to your connection:
Disabling encryption means data is transmitted in plaintext. Only use this on trusted networks where security is not a concern.
If you are facing issues connecting, please reach out to us at support@slingdata.io, on discord or open a Github Issue here.
Last updated
Was this helpful?