Click here to Skip to main content
15,881,413 members
Articles / Security / Encryption
Tip/Trick

Encrypting all the Stored Procedures of a Database

Rate me:
Please Sign up or sign in to vote.
4.81/5 (32 votes)
18 Nov 2014CPOL2 min read 107.1K   1K   59   35
Quick C# console application to encrypt all your database stored procedures

Introduction

If you ever decide that you need to protect your SQL Stored Procedures, and thought encrypting was a good idea, BE VERY CAREFUL!!!

Encrypting database stored procedures SHOULD NOT be done without having backup files or some sort of source control for the stored procedures. The reason I say this is because, once they are encrypted, there is no turning around. (Yes, there are third party tools that will decrypt your code, but why go through that trouble.)

This trick is something I developed because my company needed to host the application on a different server, and we were concerned about our code being compromised. So, to deliver the database, we decided to encrypt all our stored procedures. Having over a hundred procedures written, I didn't want to open each procedure and paste 'WITH ENCRYPTION' in each and every stored procedure. (For those of you who do not know how to encrypt, refer to How Do I Protect My Stored Procedure Code[^]). So I decided to make my own little C# application that did the same.

This application is a console application made using Visual Studio 2005 and SQL server 2005. The input parameters are database name, server address, database username and password. Once you are able to provide these details, you are ready to have all your stored procedures encrypted.

I have put the code of my application here as is. For this code to work, you will need to add an "Microsft.SQlserver.SMO" reference to the application, so that the classes such as "Database" and "StoredProcedure" are accessible.

BEFORE YOU DO THIS, TAKE A BACKUP!!!!!!!

C#
//Connect to the local, default instance of SQL Server. 
string DB = "";
ServerConnection objServerCOnnection = new ServerConnection();
objServerCOnnection.LoginSecure = false;
Console.WriteLine("Enter name or IP Address of the Database Server.");            
objServerCOnnection.ServerInstance = Console.ReadLine();
Console.WriteLine("Enter name of the Database");
DB = Console.ReadLine();
Console.WriteLine("Enter user id");
objServerCOnnection.Login = Console.ReadLine();
Console.WriteLine("Enter Password");
objServerCOnnection.Password = Console.ReadLine();
Console.WriteLine(" ");
Server srv = new Server();
try // Check to see if server connection details are ok.
{
   srv = new Server(objServerCOnnection);
   if (srv == null)
   {
      Console.WriteLine("Server details entered are wrong,"
         + " Please restart the application");
      Console.ReadLine();
      System.Environment.Exit(System.Environment.ExitCode);
   }
}
catch
{
   Console.WriteLine("Server details entered are wrong,"
      + " Please restart the application");
   Console.ReadLine();
   System.Environment.Exit(System.Environment.ExitCode);
}
Database db = new Database();
try // Check to see if database exists.
{
   db = srv.Databases[DB];
   if (db == null)
   {
      Console.WriteLine("Database does not exist on the current server,"
         + " Please restart the application");
      Console.ReadLine();
      System.Environment.Exit(System.Environment.ExitCode);
   }
}
catch
{
   Console.WriteLine("Database does not exist on the current server,"
      + " Please restart the application");
   Console.ReadLine();
   System.Environment.Exit(System.Environment.ExitCode);
}
string allSP = "";
                
for (int i = 0; i < db.StoredProcedures.Count; i++)
{
   //Define a StoredProcedure object variable by supplying the parent database 
   //and name arguments in the constructor. 
   StoredProcedure sp;
   sp = new StoredProcedure();
   sp = db.StoredProcedures[i];
   if (!sp.IsSystemObject)// Exclude System stored procedures
   {
      if (!sp.IsEncrypted) // Exclude already encrypted stored procedures
      {
         string text = "";// = sp.TextBody;
         sp.TextMode = false;
         sp.IsEncrypted = true;
         sp.TextMode = true;
         sp.Alter();
 
         Console.WriteLine(sp.Name); // display name of the encrypted SP.                        
         sp = null;
         text = null;
      }
   }
}

P.S. Please do leave some feedback about this code. Positive, negative... doesn't matter, and if it helps you, you're welcome!!

This is my first post on CodeProject.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer Gravitas India
India India
Completed BE from Mumbai University in 2008.

Loves travelling and discovering new places.

Comments and Discussions

 
QuestionThen How do you decrypt back?? Pin
Member 1586576914-Dec-22 23:06
Member 1586576914-Dec-22 23:06 
AnswerRe: Then How do you decrypt back?? Pin
qadirv15-Dec-22 16:22
qadirv15-Dec-22 16:22 
GeneralRe: Then How do you decrypt back?? Pin
qadirv15-Dec-22 16:24
qadirv15-Dec-22 16:24 
QuestionWith powershell and functions too... Pin
thomas@correge.net23-Apr-19 20:13
thomas@correge.net23-Apr-19 20:13 
GeneralMy vote of 5 Pin
Umesh AP27-Apr-16 2:32
Umesh AP27-Apr-16 2:32 
QuestionEncrypting all the Stored Procedures of a Database Pin
Fatenight2-Jun-15 20:51
Fatenight2-Jun-15 20:51 
AnswerRe: Encrypting all the Stored Procedures of a Database Pin
qadirv8-Jun-15 5:01
qadirv8-Jun-15 5:01 
QuestionCan you provide an example Pin
Member 1168373711-May-15 23:12
Member 1168373711-May-15 23:12 
AnswerRe: Can you provide an example Pin
qadirv11-May-15 23:17
qadirv11-May-15 23:17 
QuestionNot sure how to run this program Pin
Greg@AP14-Mar-15 5:54
Greg@AP14-Mar-15 5:54 
AnswerRe: Not sure how to run this program Pin
qadirv16-Mar-15 2:32
qadirv16-Mar-15 2:32 
GeneralGood One Pin
Abhishek Kumar Goswami19-Nov-14 4:45
professionalAbhishek Kumar Goswami19-Nov-14 4:45 
SuggestionA grt one Pin
Arkadeep De18-Nov-14 23:26
professionalArkadeep De18-Nov-14 23:26 
GeneralMy vote of 5 Pin
Humayun Kabir Mamun18-Nov-14 18:53
Humayun Kabir Mamun18-Nov-14 18:53 
Question+5 Pin
Sibeesh Venu4-Aug-14 18:07
professionalSibeesh Venu4-Aug-14 18:07 
+5 Smile | :)
GeneralMy vote of 5 Pin
Sibeesh Venu4-Aug-14 18:06
professionalSibeesh Venu4-Aug-14 18:06 
QuestionGreat Article, But Pin
TcJoshJohnson1-Aug-14 7:17
TcJoshJohnson1-Aug-14 7:17 
GeneralRe: Great Article, But Pin
PIEBALDconsult1-Aug-14 8:05
mvePIEBALDconsult1-Aug-14 8:05 
GeneralRe: Great Article, But Pin
qadirv3-Aug-14 21:31
qadirv3-Aug-14 21:31 
GeneralRe: Great Article, But Pin
PIEBALDconsult4-Aug-14 4:34
mvePIEBALDconsult4-Aug-14 4:34 
GeneralRe: Great Article, But Pin
qadirv4-Aug-14 4:54
qadirv4-Aug-14 4:54 
GeneralRe: Great Article, But Pin
PIEBALDconsult4-Aug-14 5:03
mvePIEBALDconsult4-Aug-14 5:03 
GeneralRe: Great Article, But Pin
qadirv4-Aug-14 22:19
qadirv4-Aug-14 22:19 
QuestionIs an Excutable available? Pin
Member 785663930-Jul-14 13:46
Member 785663930-Jul-14 13:46 
AnswerRe: Is an Excutable available? Pin
qadirv31-Jul-14 23:40
qadirv31-Jul-14 23:40 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.