Enhance Security with Column Level Encryption in SQL Server 2008-2023

To enable column level encryption in SQL Server, you need to create a master key, certificate, and column encryption keys to protect specific columns containing sensitive data, and then update your application code to handle encryption and decryption accordingly.

Column Level Encryption is a data security technique in which particular database columns that contain sensitive data are individually encrypted. As a result, even if the database is compromised, sensitive data will remain unreadable to unauthorized users. This provides granular protection.

How to enable Column Level Encryption SQL Server

You need to follow a series of steps to enable column level encryption in SQL Server. Here’s a high-level overview of the process:  

First, you must decide on the Encryption Algorithm you want to use. SQL Server offers various encryption algorithms, such as Advanced Encryption Standard (AES) and Triple Data Encryption Standard (3DES). Choose the algorithm that meets your security requirements.

Create a SQL Master Key:

The master key is used to protect the encryption keys used for column level encryption. To create a master key, you can use the CREATE MASTER KEY statement in SQL Server.

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourMasterKeyPassword';  

Create a Certificate or Asymmetric Key:

Next, you need to create a certificate or asymmetric key that will be used to protect the column encryption keys. You can generate a self-signed certificate or import an existing certificate. Alternatively, you can create an asymmetric key.

You can create it with the CREATE COLUMN ENCRYPTION KEY statement.

CREATE COLUMN ENCRYPTION KEY YourColumnEncryptionKeyName
WITH VALUES
(
    COLUMN_MASTER_KEY = YourMasterKey,
    ALGORITHM = 'YourEncryptionAlgorithm',
    ENCRYPTED_VALUE = YourCertificateOrAsymmetricKey
);

Designate specific columns:

Once you have the column encryption key, you need to modify your table structure to specify which columns will be encrypted. The ALTER TABLE statement can add the ENCRYPTED WITH clause to the columns.

ALTER TABLE YourTable
    ALTER COLUMN YourColumn
    ADD ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = YourColumnEncryptionKeyName, ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'YourEncryptionAlgorithm') NULL;

Pictorial Representation of enabling column level encryption in SQL Server

Here, You can follow the practical example of enabling column level encryption in SQL Server –

Below my example, you can see the student table under db_test database where in the student table student’s email password is showing as plain text.

How to Enable Column Level Encryption in SQL Server
SQL Server Column Level Encrypt

Make sure that, before enabling encryption you must need to change the database type “varbinary” of the specific column which column data you want to encrypt. You can keep the Data Type length max or as you want.

How to Enable Column Level Encryption in SQL Server 02

After changing the data type on SQL Server you need to create SQL Master Key on the specific database

    ---Start Creating Master Key-------

	If not exists (select * from sys.symmetric_keys where symmetric_key_id = 101)
	Begin
		create master key encryption by
		password = '&Daily@Learn$QL#Key'
	END
	
    ----Master Key Created ~~END~~~------

Create a SQL Master Key

Once you, created the master key on the database then you need to create the SQL SERVER Certificate on the database

---Start Creating SQL SERVER Certificate-------
	
	If not exists (select * from sys.certificates  where name = 'Daily@Learn$QL_Certificates')
	Begin
	create certificate Daily@Learn$QL_Certificates
		with subject = 'Student Email Passwoed Data Encrypted';
	END
	
----Certificates Created ~~END~~~-------

Create SQL Server Certificate

After that, you need to create Symmetric Key on the database

---Start Creating Symmetric Keys-------
	If not exists (select * from sys.symmetric_keys where name = 'Daily@Learn$QL_Key')
	Begin
	create symmetric key Daily@Learn$QL_Key
		with algorithm = AES_256
		encryption by certificate Daily@Learn$QL_Certificates;
	END
----Certificates Symmetric Keys ~~END~~~-------

Create Symmetric Key

Once you have the database master key, master certificate, and column encryption key then you need to modify your table structure to specify which columns will be encrypted.

	---Start Creating Encrypt Student Data-------
	      open symmetric key Daily@Learn$QL_Key
	      decryption by certificate Daily@Learn$QL_Certificates;
	      Update s set s.EmailPass= EncryptByKey(KEY_GUID ('Daily@Learn$QL_Key'),s.EmailPass ) from tbl_student s
	      Select * from tbl_Student	
	----Student Data Encrypted Successfully ~~END~~~-------

How to Enable Column Level Encryption in SQL Server 06

Finally, you can get the output according to images. These steps provide a general outline of enabling column level encryption in SQL Server. However, the process may vary depending on the specific version of the SQL Server you are using and your exact requirements.

Check Microsoft Official Documentation for More.

Related More Topics: –

Scroll to Top