Azure Cheatsheet

SQL Database

Use this Azure reference while you build software engineering projects, review code for technical interview prep, or polish examples for a software engineer resume.

Service Tiers

TierModelMax sizeUse case
ServerlessvCore, auto-pause4 TBDev, intermittent workloads
General PurposevCore (5th gen)4 TBMost production workloads
Business CriticalvCore, local SSD4 TBLow latency, In-Memory OLTP
HyperscalevCore, distributed100 TBVery large DBs, read scale-out
Basic / Standard / PremiumDTU model (legacy)1 TBSimpler pricing, smaller apps

Prefer vCore (General Purpose / Serverless) for new workloads — more tuning control and reservation discounts.

Create a Server + Database

# Create a logical SQL server
az sql server create \
  --name mysqlserver \
  --resource-group myRG \
  --location eastus \
  --admin-user sqladmin \
  --admin-password "P@ssw0rd1234!"

# Allow Azure services through firewall
az sql server firewall-rule create \
  --server mysqlserver -g myRG \
  --name AllowAzureServices \
  --start-ip-address 0.0.0.0 \
  --end-ip-address 0.0.0.0

# Allow your IP
az sql server firewall-rule create \
  --server mysqlserver -g myRG \
  --name MyIP \
  --start-ip-address $(curl -s ifconfig.me) \
  --end-ip-address $(curl -s ifconfig.me)

# Create a database — General Purpose, 2 vCores
az sql db create \
  --server mysqlserver -g myRG \
  --name mydb \
  --edition GeneralPurpose \
  --service-objective GP_Gen5_2 \
  --max-size 32GB \
  --backup-storage-redundancy Local

# Create serverless (auto-pause after 1 hour)
az sql db create \
  --server mysqlserver -g myRG \
  --name mydb \
  --edition GeneralPurpose \
  --service-objective GP_S_Gen5_2 \
  --auto-pause-delay 60       # minutes; -1 to disable

List & Inspect

az sql server list -g myRG -o table
az sql db list --server mysqlserver -g myRG -o table
az sql db show --server mysqlserver -g myRG --name mydb
az sql db list-usages --server mysqlserver -g myRG --name mydb -o table

Connection String

# Show ADO.NET connection string
az sql db show-connection-string \
  --server mysqlserver \
  --name mydb \
  --client ado.net

# Common client options: ado.net, jdbc, odbc, php, php_pdo, sqlcmd

# Full connection details
az sql server show --name mysqlserver -g myRG \
  --query "{FQDN:fullyQualifiedDomainName}" -o tsv
# Server: mysqlserver.database.windows.net

Sample connection strings

ADO.NET:
Server=tcp:mysqlserver.database.windows.net,1433;
Initial Catalog=mydb;Persist Security Info=False;
User ID=sqladmin;Password=***;
MultipleActiveResultSets=False;Encrypt=True;
TrustServerCertificate=False;Connection Timeout=30;

JDBC:
jdbc:sqlserver://mysqlserver.database.windows.net:1433;
database=mydb;user=sqladmin@mysqlserver;
password=***;encrypt=true;trustServerCertificate=false;
loginTimeout=30;

ODBC (for pyodbc):
Driver={ODBC Driver 18 for SQL Server};
Server=mysqlserver.database.windows.net,1433;
Database=mydb;Uid=sqladmin;Pwd=***;Encrypt=yes;

Scaling

# Scale up database
az sql db update \
  --server mysqlserver -g myRG --name mydb \
  --service-objective GP_Gen5_4     # 4 vCores

# Scale to DTU-based Standard tier
az sql db update \
  --server mysqlserver -g myRG --name mydb \
  --edition Standard --service-objective S3

# Show current service objective
az sql db show --server mysqlserver -g myRG --name mydb \
  --query currentServiceObjectiveName -o tsv

Backup & Restore

# List restore points
az sql db restore-point list \
  --server mysqlserver -g myRG --database-name mydb -o table

# Restore to point in time (creates a new DB)
az sql db restore \
  --server mysqlserver -g myRG \
  --name mydb-restored \
  --source-database mydb \
  --time "2024-06-01T12:00:00Z"

# Create a long-term backup (manual)
az sql db ltr-backup list \
  --server mysqlserver -g myRG \
  --database mydb -o table

# Export to BACPAC (Storage Account)
az sql db export \
  --server mysqlserver -g myRG --name mydb \
  --storage-key-type StorageAccessKey \
  --storage-key <key> \
  --storage-uri "https://mystorageacct.blob.core.windows.net/backups/mydb.bacpac" \
  --admin-user sqladmin --admin-password "P@ssw0rd1234!"

# Import from BACPAC
az sql db import \
  --server mysqlserver -g myRG --name mydb-import \
  --storage-key-type StorageAccessKey \
  --storage-key <key> \
  --storage-uri "https://mystorageacct.blob.core.windows.net/backups/mydb.bacpac" \
  --admin-user sqladmin --admin-password "P@ssw0rd1234!" \
  --service-objective GP_Gen5_2 --max-size-bytes 34359738368

Geo-Replication & Failover Groups

# Create a geo-replica in another region
az sql db replica create \
  --server mysqlserver -g myRG \
  --name mydb \
  --partner-server mysqlserver-dr \
  --partner-resource-group myRG-DR

# Create a failover group
az sql failover-group create \
  --server mysqlserver -g myRG \
  --name myfailovergroup \
  --partner-server mysqlserver-dr \
  --failover-policy Automatic \
  --grace-period 1

# Manual failover (promote secondary)
az sql failover-group set-primary \
  --server mysqlserver-dr -g myRG-DR \
  --name myfailovergroup

Security

# Enable Microsoft Defender (Advanced Threat Protection)
az sql db threat-policy update \
  --server mysqlserver -g myRG --db-name mydb \
  --state Enabled \
  --storage-account mystorageacct

# Enable auditing to a storage account
az sql server audit-policy update \
  --server mysqlserver -g myRG \
  --state Enabled \
  --storage-account mystorageacct

# Enable Transparent Data Encryption (TDE — on by default)
az sql db tde set \
  --server mysqlserver -g myRG --database mydb \
  --status Enabled

# Enable Microsoft Entra (AAD) authentication
az sql server ad-admin create \
  --server mysqlserver -g myRG \
  --display-name myAADAdmin \
  --object-id <aad-object-id>

Elastic Pools

# Create elastic pool
az sql elastic-pool create \
  --server mysqlserver -g myRG \
  --name myPool \
  --edition GeneralPurpose \
  --capacity 4 --max-size 50GB

# Move a database into the pool
az sql db update \
  --server mysqlserver -g myRG --name mydb \
  --elastic-pool myPool