- π Contents
- π― Audience
- π Security objectives
- π Repository structure
- π οΈ Supported databases
- βοΈ Installation & usage
- π TLS configuration
β οΈ Disclaimer
This repository provides secure configurations for multiple database systems.
It also includes scripts to initialize the databases and notes on hardening tools.
Database deployments are provided for:
- π§ Linux with Docker Compose β containerized, automated setups
- πͺ Windows without Docker β local, manual installs (e.g., development environments)
This repository is aimed at:
- IT administrators
- Database administrators
- Developers focused on secure database operations
Goal: reproducible, secure database setups covering these aspects:
- Enforce encrypted communication (TLS/SSL)
- Restrict access to trusted networks or hosts
- Enable meaningful logs to trace activity
- Log failed or suspicious access attempts
- Define secure locations for database files
- Use restrictive permissions on data and log directories
- Automated, regular, encrypted backups
- Verify restorability (restore tests)
- Use role-based access control (RBAC)
- Minimal privileges following the least-privilege principle
The following must be done continuously in operations:
- Apply security updates regularly
- Monitor database logs for security incidents
DBMS folders generally follow this structure:
DatabaseSystem/ # DBMS name
βββ Version_X/ # Version number
βββ Linux/ # Docker Compose setup (container, .env, volumes, init scripts)
β βββ compose/ # Docker Compose configuration
| | βββ init_db/ # Collection of scripts to initialize the DBMS
| | βββ .env.default # Template for environment variables (e.g., username, port, password)
| | βββ docker-compose.yml # Docker Compose file
β βββ config_description-linux.md # Description of security-relevant settings and their purpose
| βββ *configuration file* # DBMS-specific configuration file
βββ Windows/ # Classic configuration for local Windows installation
βββ init_scripts/ # Scripts for database initialization
βββ config_description-windows.md # Description of security-relevant settings and their purpose
βββ *configuration file* # DBMS-specific configuration fileβ
MariaDB
β
MongoDB
β
MySQL
β
Weaviate
Coming soon:
β‘οΈ PostgreSQL
β‘οΈ Redis
- Choose a configuration file from
configs/. - Adjust it to your environment and security requirements.
- Apply the configuration to your database.
- Test connectivity, authentication, and backups.
This guide shows how to create your own Certificate Authority (CA) with OpenSSL and issue server and client certificates for applications such as MongoDB.
- Installed OpenSSL for Windows
- Write access to the certificate directory (e.g.,
C:\data) - Path to
openssl.cnf(e.g.,C:\Users\<User>\openssl-3.5.3\apps\openssl.cnf)
# Generate CA key
openssl genrsa -out test-ca.key 4096
# Create CA certificate
openssl req -x509 -new -nodes -key test-ca.key -sha256 -days 365 -out test-ca.pem -config "C:\Users\<User>\openssl-3.5.3\apps\openssl.cnf"Result:
test-ca.keyβ CA private keytest-ca.pemβ self-signed CA certificate
# Generate server key
openssl genrsa -out mongo-server1.key 4096
# Create CSR
openssl req -new -key mongo-server1.key -out mongo-server1.csr -config "C:\Users\<User>\openssl-3.5.3\apps\openssl.cnf"
# Sign CSR with CA
openssl x509 -req -in mongo-server1.csr -CA test-ca.pem -CAkey test-ca.key -CAcreateserial -out mongo-server1.crt -days 365 -sha256
# Combine key + cert for MongoDB
copy /b mongo-server1.key+mongo-server1.crt mongo-server1.pemResult:
mongo-server1.pemβ certificate MongoDB uses (includes key + CRT)
# Generate client key and CSR
openssl genrsa -out mongo-client.key 4096
openssl req -new -key mongo-client.key -out mongo-client.csr -config "C:\Users\<User>\openssl-3.5.3\apps\openssl.cnf"
# Sign CSR with CA
openssl x509 -req -in mongo-client.csr -CA C:\data\test-ca.pem -CAkey C:\data\test-ca.key -CAcreateserial -out mongo-client.crt -days 365 -sha256
# Combine key + cert for the client
copy /b mongo-client.key+mongo-client.crt mongo-client.pemResult:
mongo-client.pemβ certificate the client uses (includes key + CRT)
net:
port: 27017
bindIp: 0.0.0.0
tls:
mode: requireTLS
certificateKeyFile: C:\data\mongo-server1.pem
CAFile: C:\data\test-ca.pem- CA created (
test-ca.pem,test-ca.key) - Server certificate created and signed (
mongo-server1.pem) - Client certificate created and signed (
mongo-client.pem) - MongoDB TLS enabled via
mongod.conf
These files serve as general security guides.
Before using them in production, review them carefully and adapt them to your internal requirements.
Β© 2025 β Secure database configurations