MSSQL: krüpteerida kõik andmebaasi protseduurid

Lihtsalt ükspäev oli vaja krüpteerida ära ühel andmebaasil kõik SQL serveri protseduurid ja Googlest ei leidnud sellel hetkel mulle sobivat koodilõiku. Tegin ühe lihtsa variandi.

PS enne protseduuride krüpteerimist tehke protseduuride lähtekoodidest varukoopia.

Ka küsige endalt, kas Te teate, mida teete…kui ei tea…ärge tehke !

Parsimist võite täiustada, ma ei hakanud seal palju aega raiskama st
osasid protseduure ei pruugi ta krüpteerida.


SET NOCOUNT ON

DECLARE @cr cursor
DECLARE @cr_merge cursor
DECLARE @procname varchar(255)
DECLARE @pline nvarchar(2096)
DECLARE @tmp TABLE (line nvarchar(2096))
DECLARE @proccont nvarchar(max)
DECLARE @indx1 int
DECLARE @indx2 int

SET @cr = CURSOR LOCAL SCROLL FOR
SELECT name
FROM dbo.sysobjects
WHERE (type = 'P')
AND LEFT(name,3) NOT IN ('dt_','sp_','xp_','ms_')

OPEN @cr

FETCH NEXT FROM @cr INTO @procname

WHILE @@FETCH_STATUS=0
BEGIN

SET @proccont=''
SET @pline=''
DELETE FROM @tmp

INSERT INTO @tmp(line)
EXEC sp_helptext @procname

SET @cr_merge = CURSOR LOCAL SCROLL FOR SELECT line FROM @tmp

OPEN @cr_merge
FETCH NEXT FROM @cr_merge INTO @pline

WHILE @@FETCH_STATUS=0
BEGIN
SET @proccont=@proccont+ @pline
FETCH NEXT FROM @cr_merge INTO @pline
END

IF (CHARINDEX('is encrypted.',@proccont)=0)
BEGIN
-- TODO natuke intelligentsem parsimine; hetkel dummy
-- SET @indx1 = CHARINDEX('AS',@proccont);
SET @indx1 = CHARINDEX('BEGIN',@proccont);
SET @indx2 = CHARINDEX('WITH',@proccont);
IF (@indx2>0) and (@indx1>@indx2)
BEGIN
SET @proccont = STUFF(@proccont,@indx2,4,'WITH encryption, ')
END ELSE
IF (@indx1>0)
BEGIN
SET @proccont = STUFF(@proccont,@indx1-4,0,'WITH encryption ')

END

SET @proccont = REPLACE(@proccont,'CREATE PROCEDURE','ALTER PROCEDURE')
SET @proccont = REPLACE(@proccont,'CREATE PROC','ALTER PROC')

IF (@indx1>0) or (@indx2>0)
BEGIN
EXEC (@proccont)
SELECT 'Krüpteerisin ',@procname

select substring(@proccont,0,300)
END
END

-- select @proccont
-- break

CLOSE @cr_merge
DEALLOCATE @cr_merge

FETCH NEXT FROM @cr INTO @procname
END

CLOSE @cr
DEALLOCATE @cr

Advertisements

Lisa kommentaar

Täida nõutavad väljad või kliki ikoonile, et sisse logida:

WordPress.com Logo

Sa kommenteerid kasutades oma WordPress.com kontot. Logi välja /  Muuda )

Google+ photo

Sa kommenteerid kasutades oma Google+ kontot. Logi välja /  Muuda )

Twitter picture

Sa kommenteerid kasutades oma Twitter kontot. Logi välja /  Muuda )

Facebook photo

Sa kommenteerid kasutades oma Facebook kontot. Logi välja /  Muuda )

Connecting to %s


%d bloggers like this: