This is quite an old feature, however, a very useful one in SQL Server.
Applies to: SQL Server 2005 and above.
Why do we need this or its Usages?
“WITH ENCRYPTION” clause can be used for procedures and function in SQL Server.
I personally used this clause in many places, where I wanted to hide my procedure definition. When we need to manage multiple environments and different people have access to environments, its possible, the procedure definition gets changed by others. So, if we need to have to keep the same definition across all environments, we need to get the definition encrypted which would prevent the users to change the definition.
Usually, DBAs will use this option to prevent any changes or hide the logic implemented for certain purposes.Sometimes business critical logic are also encrypted using this option to hide from others.
How to Implement?
The implementation is very simple to provide the clause at the time of creation or alter.
CREATE OR ALTER procedure Test_Encryption
WITH ENCRYPTION
AS
Begin
Select 'This is an encrypted procedure.'
End
Let us try to get the definition using sp_helptext, we will be getting a message “The text for object ‘Test_Encryption’ is encrypted.”
If we try to get the definition through SSMS, we will get the below error message.
And you can see a lock symbol to identify the encrypted procedures.
Gotchas:
1. Once the procedure is encrypted, you will not be ale to see the execution plan for the procedure.
2. It is always important to save the definition safe, you will never be able to retrieve the procedure definition once its encrypted.
3. CLR procedures and CLR User Defined Functions cannot be encrypted.
4. Encrypted procedures or functions cannot be replicated.