This is the second part of the Encryption Series, In this Blog post let’s see what can be achieved within SQL Server in terms of Encrypting the Data.
In Legacy days……..Prior to SQL Server 2008(Enterprise Edition), we only had an option to encrypt at Column level/Cell level not at the Database level. Even in SQL Server 2008 if you are using standard edition of SQL Server, you don’t have an option to encrypt at Database level. So…Basically we’ve to make this possible manually on every column by making use of either of the following inbuilt functions which SQL Server offers us..
So…basically you’ve to deal with all the annoying Symmetric Keys/ Asymmetric Keys/PassPhrases etc..and you’ve to make sure that the routine is followed each time you add a new column or make any change to your table…and we’ve to make use of Decrypt routine while retrieving the data, which is a huge hugeeeeeeeeee deal especially for developers!! You are dealing with tons and tons of Code changes and huge huge amount of testing is required!(Also a hugeeee…CPU hit depending on how many columns you are encrypting)
If you are on Enterprise Edition of SQL Server 2008, we’ve a brand new feature TDE(Transparent Data Encryption) which is at Database level and completely transparent to developers or anyone who is actually accessing our Database!! Nothing needs to be done from developers standpoint, basic testing is necessary though(Since it could cause 3-8% CPU hit under the hoods as per Microsoft documentation). All the Encryption and Decryption routines are completely transparent:) which is AWESOME!
How to Enable TDE???
1. Very first Step would be creating a Master Key in Master Database.(Immediately Backup your Master Key)
2. Now, create a Certificate(in Master Database) based on this Master key.
3. Now, create a Database Encryption Key(In the Database which we are trying to Encrypt) and the final Step would be Turning on Encryption at Database level.
If you try directly Enabling TDE on a Database without a DB Encryption Key you’ll be yelled at with the below Error Message
Msg 33106, Level 16, State 1, Line 1
Cannot change database encryption state because no database encryption key is set. Msg 5069, Level 16, State 1, Line 1 ALTER DATABASE statement failed.
Please see the below Screenshot which covers all the Required Steps to Enable TDE on a given Database.
Technically, That’s all we need to do for encrypting a Database! Pretty Simple huh?
Note: You’ve to provide a very very Secure Password(I would say 20-30 Characters including all kinds of Alpha Numeric Combinations and store it in a safe) for your Master Key.
How to Verify whether your database has been enabled with Encryption?
You can Go to Database Options from SSMS as shown below or Just Querying the Sys.Databases view!
Int the next post of this Encryption Series, let’s see what are the challenges we’ve while dealing with Encrypted Databases! There are quite a few things to keep in mind as a DBA in order to Support TDE enabled Databases.