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 🙂