Kryptere stored procedures i SQL Server

Denne artikkelen viser deg enkelt hvordan du beskytter dine Stored Procedures. Når man leverer et system er det ofte man ikke leverer med kildekode og da kan det være greit å beskytte den koden man kan.

Metoden er veldig enkel og den er lett å sette på de prosedyrene du allerede har laget.

I stedet for:

CREATE PROCEDURE dbo.GetUsers 
AS 
BEGIN 
    SELECT * FROM Users 
END

Kan du kryptere med:

CREATE PROCEDURE dbo.GetUsers 
WITH ENCRYPTION
AS 
BEGIN 
    SELECT * FROM Users 
END

En liten advarsel før du gjør dette. Når du kjører denne på sql-serveren vil du ikke kunne åpne den igjen (det er jo litt av poenget). Derfor må du ta vare på scriptene dine et trygt sted.

Prosedyrene vil nå få et lite ikon på seg som forteller at de er kryptert og hvis du prøver å åpne de vil du få en melding

Microsoft SQL-DMO 
Error 20585: [SQL-DMO] 
/****** 
    Encrypted object is not transferable, 
    and script can not be generated. 
******/

Og hvis du prløver å bruker sp_helptext vil du få:

The object comments have been encrypted.

Det går ann å “dekryptere” prosedyrene. En av de er å bruke SQL Profiler mens du kjører prosedyren. Det kan ofte vise hele prosedyren i seg selv litt avhengig av hva slags SQL det er i den. Man kan også slette prosedyren eller drop’e databasen for deretter å bruke en Profiler trace for å gjenskape de. Dette vil ofte gjenskape hele CREATE PROCEDURE scriptet. Dette kan unngås med å legge til sp_password i scriptet:

CREATE PROCEDURE dbo.GetUsers 
WITH ENCRYPTION
AS 
BEGIN 
    SELECT * FROM Users 
    -- comment: sp_password
END

Man kan i tillegg finne måter å knekke den relativt enkle krypteringen i SQL Server. Dette finner man på nettet hvis man vet hva man leter etter.

Men uansett vil WITH ENCRYPTION gi deg en del mer sikkerhet enn ren tekst 🙂