Changes for page sql-tde
Last modified by Nikhil Singh on 2026/07/03 08:32
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -1,19 +1,30 @@ 1 -= TDE(backup from smsstoazure)=1 += **1. Steps for Implementing Transparent Data Encryption (TDE) FROM SQL Server** = 2 2 3 3 4 - 1Createmasterkey inmaster database(setmasterkey)4 +This document outlines the process of **encrypting SQL Server databases** using **Transparent Data Encryption (TDE)** and backing them up to **Azure Storage**. TDE ensures data at rest is encrypted, leveraging a **Master Key (MK)**, **TDE Certificate**, and **Database Encryption Key (DEK)** for encryption. 5 5 6 - 2CreateTDEcertificate(encrypted byMK)6 +The process also includes creating a **credential** for secure backup to **Azure Blob Storage**, providing a scalable and secure solution for storing encrypted databases in the cloud. 7 7 8 -3 Backup the Certificate and private key, By encryption with a password ( did not do it in this case due to storage blog problems) 9 9 10 -4 Choose DB to create the DEK ,Create database encryption key (DEK) with algorithm ( AES= 256) and encryption by certificate 9 +**~1. Create a Master Key in the master Database** 10 +The first step is to create a **Master Key** in the master database. This key will be used to encrypt other cryptographic objects, such as certificates and symmetric keys, within SQL Server. 11 11 12 -5 Set encryption on for the database 13 13 13 +**2. Create a TDE Certificate (Encrypted by the Master Key)** 14 +Next, generate a **TDE certificate** that will be used to encrypt the **Database Encryption Key (DEK)**. This certificate is encrypted by the **Master Key** created in step 1, providing an additional layer of security. 14 14 15 -6 Create credential with SAS token 16 16 17 +**3. Choose the Database to Create the Database Encryption Key (DEK)** 18 +For the selected database, create the **Database Encryption Key (DEK)**. The DEK will be encrypted by the **TDE certificate** and will use the **AES-256 encryption algorithm** to ensure data is securely encrypted at rest. 19 + 20 + 21 +**4. Enable Encryption for the Database** 22 +Once the **DEK** has been created, enable **TDE** for the database. This ensures that all data written to the database is automatically encrypted at rest, providing full protection for sensitive information. 23 + 24 + 25 +**5. Create a Credential with a SAS Token** 26 +Finally, create a **credential** that allows SQL Server to access Azure Blob Storage. This credential is created using a **Shared Access Signature (SAS) token**, which ensures secure and authenticated access to the storage account for backup purposes. 27 + 17 17 {{code language="sql"}} 18 18 drop credential [https://zagpebslab.blob.core.windows.net/sql-backups] 19 19 CREATE CREDENTIAL [https://zagpebslab.blob.core.windows.net/sql-backups] ... ... @@ -24,96 +24,120 @@ 24 24 {{/code}} 25 25 26 26 27 - 738 +**~ 6. Use a Stored Procedure to Back Up to Azure Storage Account** 28 28 29 29 {{code language="sql"}} 30 30 EXECUTE dba.dbo.DatabaseBackup 31 - @Databases =@DatabaseName,32 - @URL =@BackupContainerURL,33 - @BackupType = 'Full',34 - @CopyOnly = 'Y',35 - @Compress = 'Y',36 - @Verify = 'N';42 +@Databases = 'dba', 43 +@URL = 'https://zagpebslab.blob.core.windows.net/sql-backups', 44 +@BackupType = 'Full', 45 +@CopyOnly = 'Y', 46 +@Compress = 'Y', 47 +@Verify = 'N' 37 37 {{/code}} 38 38 39 - Thebackupwasunable to be done from smss to azure ( the MI does not support encrypted DBs to be backed up from smss to azure)50 +=== === 40 40 41 - Wehave unencrypted a database andbacked itupfrom ssmstoazureblobsuccessfully52 +=== Conclusion: Backup to Azure Storage Account with TDE Encrypted Databases === 42 42 54 +The attempt to back up an **encrypted database** (with Transparent Data Encryption - TDE) from **SQL Server Management Studio (SSMS)** to an Azure Storage Account was unsuccessful. This issue arises because **Azure does not permit TDE-encrypted databases to be backed up directly to Azure Storage using SSMS**. 43 43 44 - Conclusion:Canbedonewith and unencryptedDBbut notwithanEncryptedone>56 +However, after decrypting the database, we were able to successfully back it up to the Azure Storage Account via SSMS. This confirms that **backups can be performed on an unencrypted database**, but **not on an encrypted database**. 45 45 46 46 47 47 48 48 49 49 50 -= ** Using TDE directlyfromazureportal** =62 += **2. Enabling Transparent Data Encryption (TDE) Using Azure Key Vault** = 51 51 52 52 53 - =====1Go to azurekeyvault(DemoTestRudi)togenerate akey=====65 +**Introduction:** This document outlines the process of enabling **Transparent Data Encryption (TDE)** on an **Azure SQL Managed Instance (SQL MI)** using a **Customer-Managed Key (CMK)** stored in **Azure Key Vault**. The encryption is managed using an asymmetric key from **Azure Key Vault**, ensuring that all data within the SQL Managed Instance is encrypted using a strong encryption algorithm. 54 54 55 55 56 - -Gotokeysandclickgenerate68 +===== **1. Generate a Key in Azure Key Vault** ===== 57 57 58 -- Name your key (mysqlmikey) 59 59 60 -- Chooseakeytype(RSA)71 +**- Navigate to Azure Key Vault:** 61 61 62 - -ChooseRSAkeysize (2048-bit)73 +* Go to the **Azure Portal** and select **Key Vault** (DemoRudiTest). 63 63 64 -Note: 65 65 76 +**- Generate a New Key:** 77 + 78 +* Go to the **Keys** section and click **Generate** to create a new key. 79 + 80 + 81 +**- Configure Key Settings:** 82 + 83 +* **Name the Key**: Choose a name for your key, e.g., mysqlmikey. 84 +* **Key Type**: Select **RSA** as the key type. 85 +* **RSA Key Size**: Choose an **RSA key size** of **2048-bit**. (optional) 86 + 87 + Note: 88 + 66 66 * switching from 2048-bit RSA to 4096-bit RSA for TDE will affect performance, but the actual impact might be minor, especially on modern hardware and typical workloads. 67 67 * **It will likely affect CPU usage** more than disk I/O, and the impact might be more noticeable during key management operations (key generation, encryption, etc.). 68 68 * If your database is not under heavy load and your hardware can handle the extra processing, the trade-off for better security may be worth it. 69 69 70 -- Click create 71 71 94 +**- Create the Key:** 72 72 73 - [[image:image-20250228120622-1.png||height="236"width="542"]]96 +* Click **Create** to generate the key. 74 74 75 75 76 -===== 2 Enable TDE ===== 77 77 78 78 79 - -Go toyourManagedinstance( sqlmi-ebs-lab)101 +===== **2. Enable TDE on the SQL Managed Instance** ===== 80 80 81 - -Clickonsecurity and choose Transparent data encryption103 +===== ===== 82 82 83 -- Selectthe typeofmanagedkey ( Customer-managed key0105 +**- Navigate to Your Managed Instance:** 84 84 85 - -Selectthe key fromthe keyvaultwegeneratedinthekey vault(mysqlmikey)107 +* Go to your **SQL Managed Instance** (sqlmi-ebs-lab). 86 86 87 -- Make the key the default TDE protector 88 88 89 -- Clicksave110 +**- Enable Transparent Data Encryption (TDE):** 90 90 112 +* Under **Security**, select **Transparent Data Encryption**. 91 91 92 -[[image:image-20250228122106-2.png||height="19" width="241"]] 93 93 115 +**- Configure TDE with a Customer-Managed Key (CMK):** 94 94 95 -- TDE has now been enabled on the Managed instance 117 +* Select **Customer-managed key** as the encryption type. 118 +* Choose the key you created earlier from **Azure Key Vault** (mysqlmikey). 96 96 97 97 98 -Conclusion: All the databases have been encrypted by an asymmetric key. The key is the same for each database ( same encryption thumbprint). 99 99 100 - Wearenow ableto backupdatabasesfrom SSMSto Azurestorage.122 +**- Set the Key as Default TDE Protector:** 101 101 124 +* Make the key the **default TDE protector** for your instance. 102 102 103 103 104 - ===Backup specificdatabases usingSQL serveragentjobs ===127 +**- Save Configuration:** 105 105 129 +* Click **Save** to apply the changes. 106 106 107 -we are creating a job to automatically backup only the DBA databases in the instance via the SQL server agent. 108 108 109 -The backup will be done daily at 3am. The backups will be backed up in the Azure storage account. 110 110 133 +=== **Conclusion** === 111 111 112 - 1Create the script135 +After following these steps, **TDE** has been successfully enabled on your **SQL Managed Instance** using an **asymmetric key** stored in **Azure Key Vault**. All databases within the instance are now encrypted using the same encryption key (identified by the same encryption thumbprint). You can now securely back up these encrypted databases from **SSMS** to **Azure Storage**. 113 113 137 +This process ensures that your data is protected both at rest and during backup, offering enhanced security for your managed databases in the cloud. 114 114 115 -=== **1. Declaring Variables** === 116 116 140 + 141 +=== **1. Backup Specific Databases Using SQL Server Agent Jobs** === 142 + 143 +This document describes the process of creating an automated **SQL Server Agent Job** to back up only the **DBA databases** in a SQL Server instance. The backups will occur **daily at 3:00 AM** and will be stored in an **Azure Storage Account** for secure and reliable cloud storage. 144 + 145 +---- 146 + 147 +==== **1. Create the Backup Script** ==== 148 + 149 + 150 +====== **- Declaring Variables** ====== 151 + 117 117 {{code language="sql"}} 118 118 DECLARE @DatabaseName NVARCHAR(128) 119 119 DECLARE @BackupContainerURL NVARCHAR(512) ... ... @@ -126,7 +126,7 @@ 126 126 127 127 ---- 128 128 129 -=== **2. Setting the Azure Blob Storage URL** === 164 +====== **2. Setting the Azure Blob Storage URL** ====== 130 130 131 131 {{code language="sql"}} 132 132 SET @BackupContainerURL = 'https://<your_storage_account>.blob.core.windows.net/sql-backups/' ... ... @@ -135,7 +135,7 @@ 135 135 136 136 ---- 137 137 138 -=== **3. Declaring the Cursor** === 173 +====== **3. Declaring the Cursor** ====== 139 139 140 140 141 141 {{code language="sql"}} ... ... @@ -152,7 +152,7 @@ 152 152 153 153 ---- 154 154 155 -=== **4. Opening the Cursor** === 190 +====== **4. Opening the Cursor** ====== 156 156 157 157 {{code language="sql"}} 158 158 OPEN db_cursor ... ... @@ -166,7 +166,7 @@ 166 166 167 167 ---- 168 168 169 -=== **5. Looping Through Databases** === 204 +====== **5. Looping Through Databases** ====== 170 170 171 171 {{code language="sql"}} 172 172 -- Loop through each database and execute the stored procedure ... ... @@ -204,7 +204,7 @@ 204 204 205 205 ---- 206 206 207 -=== **6. Fetch the Next Database** === 242 +====== **6. Fetch the Next Database** ====== 208 208 209 209 {{code language="sql"}} 210 210 -- Fetch the next database in the cursor ... ... @@ -218,7 +218,7 @@ 218 218 219 219 ---- 220 220 221 -=== **7. Closing and Deallocating the Cursor** === 256 +====== **7. Closing and Deallocating the Cursor** ====== 222 222 223 223 {{code language="sql"}} 224 224 -- Close and deallocate the cursor to clean up resources ... ... @@ -231,8 +231,10 @@ 231 231 * **CLOSE db_cursor**: This closes the cursor once the loop finishes processing all databases. 232 232 * **DEALLOCATE db_cursor**: This deallocates the cursor, freeing up any resources used by the cursor. It’s a good practice to always deallocate cursors to avoid resource leaks. 233 233 269 +(% class="wikigeneratedid" %) 270 +====== ====== 234 234 235 -===== 8. Full Script ===== 272 +====== **8. Full Script** ====== 236 236 237 237 238 238 {{code language="sql"}} ... ... @@ -271,54 +271,85 @@ 271 271 {{/code}} 272 272 273 273 274 -=== 2. Set up a new job === 275 275 276 276 277 - -GotoSSMSandclickon SQL Server Agent313 +=== **2. Set Up a New Job in SQL Server Agent** === 278 278 279 - Dropdownmenuandleftclickjobsandselect new job315 +To automate the backup process of the **DBA databases**, follow the steps below to create a new job in SQL Server Agent. 280 280 317 +---- 281 281 282 -====== General:======319 +====== **Step 1: Create a New Job** ====== 283 283 284 -- Enter Job name (DBA databases backup) 321 +1. **Open SQL Server Management Studio (SSMS)**: 322 +1*. In the **Object Explorer**, expand the **SQL Server Agent** node. 323 +1*. Right-click on **Jobs** and select **New Job**. 285 285 286 -- Owner (ebssqladmin)325 +---- 287 287 288 - -Category(Databasemaintenance)327 +====== **Step 2: Define Job Properties** ====== 289 289 290 - -Description(Description of the job)329 +In the **New Job** window, configure the job properties: 291 291 331 +* **General Tab**: 332 +** **Job Name**: Enter a descriptive name for the job, such as DBA Databases Backup. 333 +** **Owner**: Specify the job owner (ebssqladmin). 334 +** **Category**: Select Database Maintenance as the category for the job. 335 +** **Description**: Provide a brief description of the job (Automated backup of DBA databases to Azure Storage"). 292 292 293 - ====== Steps: Create the steps for the job to follow ======337 +---- 294 294 295 - -Stepname(BackuponlyDBA database)339 +====== **Step 3: Create the Job Steps** ====== 296 296 297 - -Type(Transact-SQLscript)341 +The job will perform the backup through **Transact-SQL** (T-SQL) commands. Set up the following steps: 298 298 299 - - Database (master) 343 +1. **Step Name**: Enter a descriptive step name, such as Backup Only DBA Databases. 344 +1. **Type**: Select Transact-SQL Script (T-SQL). 345 +1. **Database**: Choose the master database, as the script will be run in the context of the master database. 346 +1. **Command**: Paste the backup script you created earlier, which automates the backup of the DBA databases. 300 300 301 - -Command (paste the script we created)348 +---- 302 302 350 +====== **Step 4: Set the Job Schedule** ====== 303 303 304 - Schedule: Createaschedule for the job to run352 +Now, configure the schedule for the job to run daily at 3:00 AM: 305 305 306 - - Name (DBA database backup) 354 +1. **Schedule Name**: Name the schedule (DBA Database Backup). 355 +1. **Schedule Type**: Choose Recurring for a regular schedule. 356 +1. ((( 357 +**Frequency**: 307 307 308 - - Schedule Type (recurring) 359 +* **Occurs**: Select Daily. 360 +* **Recurs Every**: Set it to **1 day** to run the job every day at the same time. 361 +))) 362 +1. ((( 363 +**Daily Frequency**: 309 309 310 - - Frequency (Occurs: Daily) 365 +* Set the **time** for the backup to start, such as **3:00 AM**. 366 +))) 311 311 312 - (Recurs every: 1 day(s))368 +---- 313 313 370 +=== **Conclusion** === 314 314 372 +The SQL Server Agent job is now configured to automatically back up the **DBA databases** daily to an **Azure Storage Account**. The job will only back up databases that start with 'dba', and it handles encrypted databases with **Transparent Data Encryption (TDE)**. This ensures secure, encrypted backups are stored in the cloud without requiring manual intervention. 315 315 374 +(% class="wikigeneratedid" %) 375 +=== === 316 316 377 +===== Note: We could use the job activity monitor to see if the job executed successfully. ===== 317 317 318 318 319 319 320 320 321 321 383 + 384 + 385 + 386 + 387 + 388 + 389 + 322 322 1 CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPasswordHere!'; 323 323 GO 324 324