Postoji li nacin da se u SQL Serveru 2005, automatski ubaci WITH ENCRYPTION klauzula u stored procedures? Znaci, imam na primer 200 procedura, i hocu da odjednom u sve ubacim tu klauzulu?
Kako automatski dodati WITH ENCRYPTION klauzulu?
Zaključano
Zakačeno
Posto vidim da ti niko ne odgovara ja ti mogu predloziti resenje koje najverovatnije ne bi bilo moguce izvesti cisto uz pomoc SQL servera.
Mozes da odradis ekstrakciju/skriptovanje svih stored procedura na sledeci nacin:
Pa zatim napisati kod koji ce promeniti sve CREATE u ALTER i dodati WITH ENCRYPTION na pravo mesto.
I na kraju pokrenuti sve te skripte.
Naravno proceduru probati prvo na kopiji baze, pa ako sve prodje kako treba odradis na konkretnoj bazi.
Mozes da odradis ekstrakciju/skriptovanje svih stored procedura na sledeci nacin:
Code:
declare @text varchar(8000)
select @text = ctext from dbo.syscomments where id=object_id(N'[dbo].[<naziv stored procedure>]')
print @text
declare @text varchar(8000)
select @text = ctext from dbo.syscomments where id=object_id(N'[dbo].[<naziv stored procedure>]')
print @text
Pa zatim napisati kod koji ce promeniti sve CREATE u ALTER i dodati WITH ENCRYPTION na pravo mesto.
I na kraju pokrenuti sve te skripte.
Naravno proceduru probati prvo na kopiji baze, pa ako sve prodje kako treba odradis na konkretnoj bazi.
Hmmm, to sam i mislio, na neki nacin izvuci listu procedura i onda uraditi program koji ce da protrci kroz njih i ubaci sta mi treba.
Pošto i sam imam nekoliko procedura koje ću kasnije zaštititi morao sam da napravim isto to što tebi treba. Evo čistog T-SQL koda koji, koliko sam mogao da proverim, radi. Nadam se da nije kasno
Code:
declare @text nvarchar(max)
declare @ObjectIDOld int
declare @ObjectID int
declare @ProcedureStart int
declare @SPText nvarchar(max)
declare c cursor
for
select ID, [ctext] from dbo.syscomments order by id, colid
open c
fetch next from c
into @ObjectID, @text
select @ObjectIDOld = @ObjectID
while (@@fetch_status = 0)
begin
select @SPText=''
while (@ObjectIDOld = @ObjectID and @@fetch_status = 0)
begin
select @SPText = @SPText + @text
print str(len(@sptext))
fetch next from c
into @ObjectID, @text
end
select @ProcedureStart = Patindex('create PROCEDURE', @SPText)
if @ProcedureStart >= 0
begin
declare @AsStart int
select @AsStart = Patindex(N'%[^0-9A-Z]as[^0-9A-Z]%', @SPText)
if @AsStart > 0
begin
select @SPText = replace(@SPText, 'create PROCEDURE', 'Alter procedure')
select @SPText = left(@SPText, @AsStart - 1)
+ ' With encryption as '
+ right(@spText, len(@SPText) - @AsStart - 1)
exec (@SPText)
end
end
select @ObjectIDOld = @ObjectID
end
close c
deallocate c
declare @text nvarchar(max)
declare @ObjectIDOld int
declare @ObjectID int
declare @ProcedureStart int
declare @SPText nvarchar(max)
declare c cursor
for
select ID, [ctext] from dbo.syscomments order by id, colid
open c
fetch next from c
into @ObjectID, @text
select @ObjectIDOld = @ObjectID
while (@@fetch_status = 0)
begin
select @SPText=''
while (@ObjectIDOld = @ObjectID and @@fetch_status = 0)
begin
select @SPText = @SPText + @text
print str(len(@sptext))
fetch next from c
into @ObjectID, @text
end
select @ProcedureStart = Patindex('create PROCEDURE', @SPText)
if @ProcedureStart >= 0
begin
declare @AsStart int
select @AsStart = Patindex(N'%[^0-9A-Z]as[^0-9A-Z]%', @SPText)
if @AsStart > 0
begin
select @SPText = replace(@SPText, 'create PROCEDURE', 'Alter procedure')
select @SPText = left(@SPText, @AsStart - 1)
+ ' With encryption as '
+ right(@spText, len(@SPText) - @AsStart - 1)
exec (@SPText)
end
end
select @ObjectIDOld = @ObjectID
end
close c
deallocate c
Potpis
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
Da je važnije biti ljubazan nego biti u pravu
Ma nije kasno... naravno :)
Hvala!
Hvala!