Connect to an External MSSQL Database
By default, self-hosted instances of Bitwarden will use a Microsoft SQL Server (MSSQL) database image created as a normal part of installation setup, however you configure Bitwarden to use an external MSSQL database.
[!NOTE] Bitwarden only supports and recommends SQL Server 2022 and SQL Server 2025. Learn about the system requirements for SQL Server on Windows and Linux.
Mainstream support ended for Server 2017 and Server 2019. Deprecation of support for a specific SQL server version will be noted here and in the release notes for a given release if Bitwarden implements features that are not available on a specific version of SQL Server.
Setup external database
To setup your self-hosted instance with an external database:
Docker
- Create a new MSSQL database.
- (Recommended) Create a dedicated DBO for your database.
-
In the
global.override.envfile for your server, edit theglobalSettings__sqlServer__connectionString=value for the following information: -
Replace
"Data Source=tcp:mssql,1433";with your MSSQL server name, for example"Data Source=protocol:server_url,port". - Replace the
vaultinInitial Catalog=vault; with your database name. - Replace the
sainUser ID=sa;with your DBO User ID. - Replace the
<default_pw>inPassword=<default_pw>;with your DBO password. - Save your changes to
global.override.env. - Start Bitwarden (
./bitwarden.sh start).
Once the above steps are complete, you can test the connection by creating a new user through the web vault and querying the external vault database for creation of the new user.
Helm
- Create a new MSSQL database.
- (Recommended) Create a dedicated DBO for your database.
- In your
my-values.yamlconfiguration file, set the valuedatabase.enabled: falseto stop the included SQL pod from being deployed. - In the Kubernetes secrets object used for deployment, set a
globalSettings__sqlServer__connectionString=value with the following information:
[!NOTE] Different methods for K8S secret object The method you use to configure your secrets object may depend on your deployment, for example AWS deployments and Azure deployments may use a CSI SecretProviderClass to do so.
Data Source=tcp:<SERVERNAME>,1433where<SERVERNAME>is your MSSQL server's name.Initial Catalog=<VAULT>where<VAULT>is your database name.Persist Security Info=False.User ID=<USER>where<USER>is your DBO user ID.Password=<PASSWORD>where<PASSWORD>is your DBO password.Multiple Active Result Sets=False.Connect Timeout=30.Encrypt=True.Trust Server Certificate=true. This value can be set tofalseif your require that the Bitwarden server validates your MSSQL server's certificate.
Validate a server certificate
To configure Bitwarden to validate your MSSQL database server's certificate:
Docker
- Copy your root CA certificate into
./bwdata/ca-certificates. - Run the
./bitwarden.sh restartcommand to apply the certificate to your containers and restart your server.
Helm
- In your
my-values.yamlconfiguration file, set the valuecaCertificate.enabled: true. - Create a ConfigMap object that contains your certificate file. The simplest way is to add a
preInstallRawManifest to yourmy-values.yamlfile, as in the following example:
rawManifests:
preInstall:
- kind: ConfigMap
apiVersion: v1
metadata:
name: cacert
data:
rootca.crt: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
postInstall:
