[ flighter_022 @ 31.10.2007. 17:25 ] @
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?

[ DarkMan @ 01.11.2007. 13:09 ] @
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:
Code:

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.
[ flighter_022 @ 01.11.2007. 13:33 ] @
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.
[ vujkev @ 08.11.2007. 00:24 ] @
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
[ flighter_022 @ 18.11.2007. 23:40 ] @
Ma nije kasno... naravno :)
Hvala!