Néha belefutok érdekesebbnél is érdekesebb munkákba, az egyik ilyen során egy furcsa ellentétet kellett feloldanom. A szituáció a következő: van egy szoftver beszállító, aki írt egy programot, majd éles üzembe került. Ez a program SQL Server-t használ. Teljesítményproblémák merültek fel, így a helyi erők belenéztek az SQL-be és pár furcsa dolgot is találtak. Ezt jelezték a beszállítónak, aki erre a következő patch során titkosította a nézeteket, eljárásokat és a függvényeket is. Ezek után a helyi fejlesztőknek nem volt lehetőségük belenézni a kódba.
Ismerős? Nem csodálkozom :) Ennek a fura helyzetnek több megoldás lehet, de semmiképpen sem a titkosítása az adatbázis objektumainak, inkább a párbeszéd. Amennyiben mégis vissza kellene fejteni adatbázis objektumokat, akkor a Devart-nak van egy programja a dbForge SqlDecryptor. Ez az eszköz egy ideje már fent van a hasznos programok listáján nálam.
Lássuk mire is jó ez az eszköz: jelenlegi release SQL Server 2000,2005,2008,2012 verziókkal működik (Azure nem!). Kinézetre is hasonlít az SSMS-hez vagy épp a Visual Studio-hoz, így nem nagyon kell keresni a funkciókat.
Visszafejtés példa
Az alábbi példa során bemutatnám, hogy milyen lehetőségeket kínál a termék a titkosított objektumok visszafejtésére. Hozzunk létre egy adatbázist első körben:
USE master;
GO
IF EXISTS (SELECT 1 FROM sys.databases WHERE name = 'EncryptedObjects')
DROP DATABASE EncryptedObjects;
GO
CREATE DATABASE EncryptedObjects;
GO
Majd létrehozok pár titkosított objektumot is:
USE EncryptedObjects;
GO
CREATE PROCEDURE uspEncryptedSproc
WITH ENCRYPTION
AS
SELECT name FROM sys.databases WHERE database_id < 5;
GO
CREATE VIEW vEncryptedView
WITH ENCRYPTION
AS
SELECT name FROM sys.databases WHERE database_id < 5;
GO
CREATE FUNCTION fnEncrypetdFunction(@db_id INT)
RETURNS int
WITH ENCRYPTION
AS
BEGIN
DECLARE @is_auto_shrink_on int;
SELECT @is_auto_shrink_on = is_auto_shrink_on FROM sys.databases WHERE database_id = @db_id;
RETURN (@is_auto_shrink_on);
END
GO
Ezeket titkosítottam, így se az SSMS-ből, se az OBJECT_DEFINITON függvény segítségével sem lehet visszafejteni a kódot. Itt jön képbe a fentebb említett eszköz.
A visszafejtés menete:
- Indítsuk el a dbForge SQL Decrypt alkalmazást
- Csatlakozzunk az SQL példányhoz, ahol a titkosított objektumokat tartalmazó adatbázis van.
- Keressük meg az EncryptedObjects adatbázist.
- Jelöljük ki a titkosított objektumot, majd az Object Explorer menüben nyomjuk meg az SQL gombot. ennek hatására a jobb oldalon megjelenik a sql kód.
Lehetőség van a titkosított objektum adatbázisban, már nem titkosított formában történő felülírására is. ebben az esetben az Object Explorerben a "kinyitott lakatot" ábrázoló gombot kell megnyomni.
Amennyiben több titkosított objektum van, ezeket akár egyszerre is vissza lehet fejteni, a "varázspálca" ikonos gombra kattintva.
Összegzés
Alapvetően egy könnyen használható, hasznos eszköz, nem mellékesen ingyenes! Sajnos az SQL Server 2014-es verziót még nem támogatja és nem integrálható az SSMS-be, ettől függetlenül határozottan ajánlott felvenni az eszköztárunkba.