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 (2 modified, 0 added, 0 removed)
-
Objects (0 modified, 1 added, 0 removed)
Details
- Page properties
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. rudim1 +XWiki.nikhils - Content
-
... ... @@ -1,4 +1,327 @@ 1 += TDE(backup from smss to azure) = 2 + 3 + 4 +1 Create master key in master database (set master key) 5 + 6 +2 Create TDE certificate (encrypted by MK) 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 + 10 +4 Choose DB to create the DEK ,Create database encryption key (DEK) with algorithm ( AES= 256) and encryption by certificate 11 + 12 +5 Set encryption on for the database 13 + 14 +-- 6 Create a new credential with the SAS token 15 +CREATE CREDENTIAL [https://zagpebslab.blob.core.windows.net/sql-backups] 16 +WITH IDENTITY = 'SHARED ACCESS SIGNATURE', 17 +SECRET = 'sp=racwdli&st=2025-02-25T13:28:42Z&se=2026-02-25T21:28:42Z&spr=https&sv=2022-11-02&sr=c&sig=kBFwlj5S5eqBEE32LM1EFebBY0W94uEFiwOXo3R0yt4%3D'; 18 +Go-- 19 + 20 +--7 -- 21 + 1 1 {{code language="sql"}} 23 +Perform the database backup with the provided parameters 24 +EXECUTE dba.dbo.DatabaseBackup 25 + @Databases = 'dba', Replace with your database name 26 + @URL = 'https://zagpebslab.blob.core.windows.net/sql-backups', Azure Blob Storage URL 27 + @BackupType = 'Full', Full backup 28 + @CopyOnly = 'Y', Copy-only backup to avoid breaking backup chain 29 + @Compress = 'Y', Compress the backup 30 + @Verify = 'N'; No verification of backup 31 +GO 32 +{{/code}} 33 + 34 +The backup was unable to be done from smss to azure ( the MI does not support encrypted DBs to be backed up from smss to azure) 35 + 36 +We have unencrypted a database and backed it up from ssms to azure blob successfully 37 + 38 + 39 +Conclusion: Can be done with and unencrypted DB but not with an Encrypted one> 40 + 41 + 42 + 43 + 44 + 45 += **Using TDE directly from azure portal** = 46 + 47 + 48 +===== 1 Go to azure key vault ( DemoTestRudi) to generate a key ===== 49 + 50 + 51 +- Go to keys and click generate 52 + 53 +- Name your key (mysqlmikey) 54 + 55 +- Choose a key type (RSA) 56 + 57 +-Choose RSA key size (2048-bit) 58 + 59 +Note: 60 + 61 +* 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. 62 +* **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.). 63 +* 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. 64 + 65 +- Click create 66 + 67 + 68 +[[image:image-20250228120622-1.png||height="236" width="542"]] 69 + 70 + 71 +===== 2 Enable TDE ===== 72 + 73 + 74 +- Go to your Managed instance ( sqlmi-ebs-lab) 75 + 76 +- Click on security and choose Transparent data encryption 77 + 78 +- Select the type of managed key ( Customer-managed key0 79 + 80 +- Select the key from the key vault we generated in the key vault( mysqlmikey) 81 + 82 +- Make the key the default TDE protector 83 + 84 +-Click save 85 + 86 + 87 +[[image:image-20250228122106-2.png||height="251" width="511"]] 88 + 89 + 90 +- TDE has now been enabled on the Managed instance 91 + 92 + 93 +Conclusion: All the databases have been encrypted by an asymmetric key. The key is the same for each database ( same encryption thumbprint). 94 + 95 +We are now able to backup databases from SSMS to Azure storage. 96 + 97 + 98 + 99 + 100 + 101 + 102 + 103 + 104 + 105 + 106 + 107 + 108 + 109 +1 CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPasswordHere!'; 110 +GO 111 + 112 +CREATE CERTIFICATE TDE_Certificate 113 +WITH SUBJECT = 'TDE Certificate'; 114 +GO 115 + 116 +2 USE master; 117 +GO 118 + 119 +SELECT 120 + cert.name AS Certificate_Name, 121 + cert.subject AS Certificate_Subject, 122 + cert.issuer_name AS Issuer_Name, 123 + cert.pvt_key_encryption_type AS Private_Key_Encryption_Type 124 +FROM 125 + sys.certificates cert 126 +WHERE 127 + cert.name LIKE 'TDE%'; 128 + 129 + 130 +3 BACKUP CERTIFICATE TDE_Certificate 131 +TO FILE = https://zagpebslab.blob.core.windows.net/sql-backups?sp=racwl&st=2025-02-25T13:28:42Z&se=2026-02-25T21:28:42Z&spr=https&sv=2022-11-02&sr=c&sig=eQKxB%2F0bg5cX71PmhUTlGHLCnIwSbe5CLOWVVkaDR1g%3D\TDE_Certificate.cer' 132 +WITH PRIVATE KEY ( 133 + FILE = https://zagpebslab.blob.core.windows.net/sql-backups?sp=racwl&st=2025-02-25T13:28:42Z&se=2026-02-25T21:28:42Z&spr=https&sv=2022-11-02&sr=c&sig=eQKxB%2F0bg5cX71PmhUTlGHLCnIwSbe5CLOWVVkaDR1g%3D\TDE_PrivateKey.pvk', 134 + ENCRYPTION BY PASSWORD = 'AnotherStrongPasswordHere!' 135 +); 136 +GO 137 + 138 + 139 +USE Normal; 140 +GO 141 + 142 +-- 6. Create a Database Encryption Key (DEK) and encrypt it with the TDE certificate 143 +CREATE DATABASE ENCRYPTION KEY 144 +WITH ALGORITHM = AES_256 145 +ENCRYPTION BY SERVER CERTIFICATE TDE_Certificate; 146 +GO-- 147 + 148 +USE [dba] 149 +GO 150 + 151 +CREATE DATABASE ENCRYPTION KEY 152 +WITH ALGORITHM = AES_256 153 +ENCRYPTION BY SERVER CERTIFICATE TDE_Certificate; 154 +GO 155 + 156 + 157 +USE [dba1] 158 +GO 159 + 160 +CREATE DATABASE ENCRYPTION KEY 161 +WITH ALGORITHM = AES_256 162 +ENCRYPTION BY SERVER CERTIFICATE TDE_Certificate; 163 +GO 164 + 165 + 166 +USE [dba2] 167 +GO 168 + 169 +CREATE DATABASE ENCRYPTION KEY 170 +WITH ALGORITHM = AES_256 171 +ENCRYPTION BY SERVER CERTIFICATE TDE_Certificate; 172 +GO 173 + 174 + 175 +USE [dba3] 176 +GO 177 + 178 +CREATE DATABASE ENCRYPTION KEY 179 +WITH ALGORITHM = AES_256 180 +ENCRYPTION BY SERVER CERTIFICATE TDE_Certificate; 181 +GO 182 + 183 +USE [xwiki] 184 +GO 185 + 186 +CREATE DATABASE ENCRYPTION KEY 187 +WITH ALGORITHM = AES_256 188 +ENCRYPTION BY SERVER CERTIFICATE TDE_Certificate; 189 +GO 190 + 191 + 192 +-- 7. Enable Transparent Data Encryption (TDE) on the database 193 +ALTER DATABASE dba 194 +SET ENCRYPTION ON; 195 +GO-- 196 + 197 + 198 +select name, database_id, state_desc 199 +from sys.databases 200 + 201 + 202 +SELECT 203 + database_id, 204 + key_algorithm, 205 + key_length, 206 + encryption_state_desc 207 + encryptor_type 208 + 209 +FROM 210 + sys.dm_database_encryption_keys; 211 + 212 + 213 + Select * from sys.dm_database_encryption_keys 214 + 215 + 216 + BACKUP DATABASE [dba2] 217 +TO URL = '[[https:~~/~~/zagpebslab.blob.core.windows.net/sql-backups?sp=racwl&st=2025-02-25T13:28:42Z&se=2026-02-25T21:28:42Z&spr=https&sv=2022-11-02&sr=c&sig=eQKxB%2F0bg5cX71PmhUTlGHLCnIwSbe5CLOWVVkaDR1g%3D'>>https://zagpebslab.blob.core.windows.net/sql-backups?sp=racwl&st=2025-02-25T13:28:42Z&se=2026-02-25T21:28:42Z&spr=https&sv=2022-11-02&sr=c&sig=eQKxB%2F0bg5cX71PmhUTlGHLCnIwSbe5CLOWVVkaDR1g%3D']] 218 +With copy_only 219 +GO 220 + 221 + 222 +BACKUP DATABASE [dba2] 223 +TO URL = '[[https:~~/~~/zagpebslab.blob.core.windows.net/sql-backups?sp=racwl&st=2025-02-25T13:28:42Z&se=2026-02-25T21:28:42Z&spr=https&sv=2022-11-02&sr=c&sig=eQKxB%2F0bg5cX71PmhUTlGHLCnIwSbe5CLOWVVkaDR1g%3D'>>https://zagpebslab.blob.core.windows.net/sql-backups?sp=racwl&st=2025-02-25T13:28:42Z&se=2026-02-25T21:28:42Z&spr=https&sv=2022-11-02&sr=c&sig=eQKxB%2F0bg5cX71PmhUTlGHLCnIwSbe5CLOWVVkaDR1g%3D']], 224 +\\ COPY_ONLY, -- Ensures the backup does not affect the regular backup chain 225 + COMPRESSION, -- Optional: Compresses the backup to save storage space 226 + STATS = 10 -- Optional: Provides backup progress status 227 +GO-- 228 + 229 + 230 + 231 +-- Step 1: Drop the existing credential (if needed) 232 +DROP CREDENTIAL [https://zagpebslab.blob.core.windows.net/sql-backups]; 233 +GO-- 234 + 235 +-- Step 2: Create a new credential with the SAS token 236 +CREATE CREDENTIAL [https://zagpebslab.blob.core.windows.net/sql-backups] 237 +WITH IDENTITY = 'SHARED ACCESS SIGNATURE', 238 +SECRET = 'sp=racwdli&st=2025-02-25T13:28:42Z&se=2026-02-25T21:28:42Z&spr=https&sv=2022-11-02&sr=c&sig=kBFwlj5S5eqBEE32LM1EFebBY0W94uEFiwOXo3R0yt4%3D'; 239 +GO-- 240 + 241 +-- Step 3: Perform the database backup with the provided parameters 242 +EXECUTE dba.dbo.DatabaseBackup 243 + @Databases = 'dba', -- Replace with your database name 244 + @URL = '[[https:~~/~~/zagpebslab.blob.core.windows.net/sql-backups'>>https://zagpebslab.blob.core.windows.net/sql-backups']], -- Azure Blob Storage URL 245 + @BackupType = 'Full', -- Full backup 246 + @CopyOnly = 'Y', -- Copy-only backup to avoid breaking backup chain 247 + @Compress = 'Y', -- Compress the backup 248 + @Verify = 'N'; -- No verification of backup 249 +GO-- 250 + 251 + 252 + 253 + 254 + 255 +select name, database_id, state_desc 256 +from sys.databases 257 + 258 + 259 +SELECT 260 + database_id, 261 + key_algorithm, 262 + key_length, 263 + encryption_state_desc 264 + encryptor_type 265 + 266 +FROM 267 + select * from sys.dm_database_encryption_keys; 268 + 269 + 270 + select name, is_encrypted from sys.databases 271 + 272 + 273 + SELECT 274 + cert.name AS Certificate_Name, 275 + cert.subject AS Certificate_Subject, 276 + cert.issuer_name AS Issuer_Name, 277 + cert.pvt_key_encryption_type AS Private_Key_Encryption_Type 278 +FROM 279 + sys.certificates cert 280 +WHERE 281 + cert.name LIKE 'TDE%'; 282 + 283 + ALTER DATABASE dba1 284 +SET ENCRYPTION off; 285 +GO 286 + 287 + 288 +Use dba1; 289 +DROP DATABASE ENCRYPTION KEY; 290 + 291 + 292 +USE [dba1] 293 +GO 294 + 295 +CREATE DATABASE ENCRYPTION KEY 296 +WITH ALGORITHM = AES_256 297 +ENCRYPTION BY SERVER CERTIFICATE TDE_Certificate; 298 +GO 299 + 300 + 301 + 302 +ALTER DATABASE dba1 303 +SET ENCRYPTION ON 304 + 305 + 306 + 307 + 308 + 309 + 310 + 311 + 312 + 313 + 314 + 315 + 316 + 317 + 318 + 319 + 320 + 321 + 322 + 323 + 324 +{{code language="sql"}} 2 2 USE master; 3 3 GO 4 4 CREATE MASTER KEY ENCRYPTION BY PASSWORD = '******'; ... ... @@ -31,3 +31,53 @@ 31 31 SET ENCRYPTION ON; 32 32 GO 33 33 {{/code}} 357 + 358 + 359 + 360 + 361 + 362 + 363 + 364 + 365 + 366 + 367 + 368 + 369 + 370 +{{code language="sql"}} 371 +USE master; 372 +GO 373 +CREATE MASTER KEY ENCRYPTION BY PASSWORD = '******'; 374 +GO 375 + 376 +CREATE CERTIFICATE EBSphere_TDE_SQL2019_Cert WITH SUBJECT = 'Database_Encryption'; 377 +GO 378 + 379 +BACKUP CERTIFICATE EBSphere_TDE_SQL2019_Cert TO FILE = 'D:\temp\EBSphere_TDE_SQL2019_Cert' 380 +WITH PRIVATE KEY (file = 'D:\temp\EBSphere_TDE_SQL2019_Cert_Key.pvk', 381 +ENCRYPTION BY PASSWORD='*****') 382 + 383 +USE Everest_TDE_Master; 384 +GO 385 +CREATE DATABASE ENCRYPTION KEY 386 +WITH ALGORITHM = AES_256 387 +ENCRYPTION BY SERVER CERTIFICATE EBSphere_TDE_SQL2019_Cert; 388 +GO 389 +ALTER DATABASE Everest_TDE_Master 390 +SET ENCRYPTION ON; 391 +GO 392 + 393 +USE Everest_TDE_Master_Documents; 394 +GO 395 +CREATE DATABASE ENCRYPTION KEY 396 +WITH ALGORITHM = AES_256 397 +ENCRYPTION BY SERVER CERTIFICATE EBSphere_TDE_SQL2019_Cert; 398 +GO 399 +ALTER DATABASE Everest_TDE_Master_Documents 400 +SET ENCRYPTION ON; 401 +GO 402 +{{/code}} 403 + 404 + 405 + 406 +
- XWiki.XWikiComments[0]
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.rudim - Comment
-
... ... @@ -1,0 +1,1 @@ 1 +put the sql code in code tags to start with otherwise its very hard to read - Date
-
... ... @@ -1,0 +1,1 @@ 1 +2025-02-26 16:00:04.223