我用的一个商业软件,在企业管理中打开的触发器是经过加密的,我手上有厂家给的一个解密的代码,在查询分析器中运行后,如何看到解密后的触发器?查询分析器中有没有命令是查看触发器的? 找个高手在线交流下!!!! 

解决方案 »

  1.   

    http://www.derkeiler.com/Newsgroups/microsoft.public.sqlserver.security/2006-08/msg00286.html
      

  2.   

    3.SqlServer数据库字典--主键.外键.约束.视图.函数.存储过程.触发器.sqlSELECT DISTINCT TOP 100 PERCENT o.xtype, CASE o.xtype WHEN 'X' THEN '扩展存储过程' WHEN 'TR' THEN '触发器' WHEN 'PK' THEN '主键' WHEN 'F' THEN '外键' WHEN 'C' THEN '约束' WHEN 'V' THEN '视图' WHEN 'FN' THEN '函数-标量' WHEN 'IF' THEN '函数-内嵌' WHEN 'TF' THEN '函数-表值' ELSE '存储过程' END AS 类型, o.name AS 对象名, o.crdate AS 创建时间, o.refdate AS 更改时间, c.text AS 声明语句 FROM dbo.sysobjects o LEFT OUTER JOIN dbo.syscomments c ON o.id = c.id WHERE (o.xtype IN ('X', 'TR', 'C', 'V', 'F', 'IF', 'TF', 'FN', 'P', 'PK')) AND (OBJECTPROPERTY(o.id, N'IsMSShipped') = 0) ORDER BY CASE o.xtype WHEN 'X' THEN '扩展存储过程' WHEN 'TR' THEN '触发器' WHEN 'PK' THEN '主键' WHEN 'F' THEN '外键' WHEN 'C' THEN '约束' WHEN 'V' THEN '视图' WHEN 'FN' THEN '函数-标量' WHEN 'IF' THEN '函数-内嵌' WHEN 'TF' THEN '函数-表值' ELSE '存储过程' END DESC
      

  3.   

    google搜索一大堆,这个是2000的
    http://www.itlibs.com/tech/archive/20090507/20.html
      

  4.   


    不好意思,COPY过来的一堆代码,我看不明白
      

  5.   

    CREATE  PROCEDURE pro_pro(@pro_name varchar(50))
    AS
    begin
    set nocount on
    begin tran
    declare @pro_name1 varchar(100),@abc_xx varbinary(8000)
    declare @sql1 nvarchar(4000),@sql2 varchar(8000),@sql3 nvarchar(4000),@sql4 nvarchar(4000)
    DECLARE  @OrigSpText1 nvarchar(4000),  @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000)
    declare  @i int,@status int,@type varchar(10),@parentid int
    declare @colid int,@n int,@q int,@j int,@k int,@encrypted int,@number int
    select @type=xtype,@parentid=parent_obj from sysobjects where id=object_id(@pro_name)
    ----tt
    create table  #temp(number int,colid int,ctext varbinary(8000),encrypted int,status int)
    insert #temp SELECT number,colid,ctext,encrypted,status FROM syscomments  WHERE id = object_id(@pro_name)
    select @number=max(number) from #temp
    set @k=0while @k<=@number 
    begin
    if exists(select 1 from syscomments where id=object_id(@pro_name) and number=@k)
    begin
    if @type='P'
    set @sql1=(case when @number>1 then 'ALTER PROCEDURE '+ @pro_name +';'+rtrim(@k)+' WITH ENCRYPTION AS '
                              else 'ALTER PROCEDURE '+ @pro_name+' WITH ENCRYPTION AS '
                              end)if @type='TR'
    set @sql1='ALTER TRIGGER '+@pro_name+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 'if @type='FN' or @type='TF' or @type='IF'
    set @sql1=(case @type when 'TF' then 
    'ALTER FUNCTION '+ @pro_name+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '
    when 'FN' then
    'ALTER FUNCTION '+ @pro_name+'(@a char(1)) returns char(1) with encryption as begin return @a end'
    when 'IF' then
    'ALTER FUNCTION '+ @pro_name+'(@a char(1)) returns table with encryption as return select @a as a'
    end)
    if @type='V'
    set @sql1='ALTER VIEW '+@pro_name+' WITH ENCRYPTION AS SELECT 1 as f'set @q=len(@sql1)
    set @sql1=@sql1+REPLICATE('-',4000-@q)
    select @sql2=REPLICATE('-',8000)
    set @sql3='exec(@sql1'
    select @colid=max(colid) from #temp where number=@k 
    set @n=1
    while @n<=CEILING(1.0*(@colid-1)/2) and len(@sQL3)<=3996
    begin 
    set @sql3=@sql3+'+@'
    set @n=@n+1
    end
    set @sql3=@sql3+')'
    exec sp_executesql @sql3,N'@Sql1 nvarchar(4000),@ varchar(8000)',@sql1=@sql1,@=@sql2end
    set @k=@k+1
    endset @k=0
    while @k<=@number 
    beginif exists(select 1 from syscomments where id=object_id(@pro_name) and number=@k)
    begin
    select @colid=max(colid) from #temp where number=@k 
    set @n=1while @n<=@colid
    begin
    select @OrigSpText1=ctext,@encrypted=encrypted,@status=status FROM #temp  WHERE colid=@n and number=@kSET @OrigSpText3=(SELECT ctext FROM syscomments WHERE id=object_id(@pro_name) and colid=@n and number=@k)
    if @n=1
    begin
    if @type='P'
    SET @OrigSpText2=(case when @number>1 then 'CREATE PROCEDURE '+ @pro_name +';'+rtrim(@k)+' WITH ENCRYPTION AS '
                           else 'CREATE PROCEDURE '+ @pro_name +' WITH ENCRYPTION AS '
                           end)
    if @type='FN' or @type='TF' or @type='IF'
    SET @OrigSpText2=(case @type when 'TF' then 
    'CREATE FUNCTION '+ @pro_name+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '
    when 'FN' then
    'CREATE FUNCTION '+ @pro_name+'(@a char(1)) returns char(1) with encryption as begin return @a end'
    when 'IF' then
    'CREATE FUNCTION '+ @pro_name+'(@a char(1)) returns table with encryption as return select @a as a'
    end)
    if @type='TR'
    set @OrigSpText2='CREATE TRIGGER '+@pro_name+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 'if @type='V'
    set @OrigSpText2='CREATE VIEW '+@pro_name+' WITH ENCRYPTION AS SELECT 1 as f'set @q=4000-len(@OrigSpText2)
    set @OrigSpText2=@OrigSpText2+REPLICATE('-',@q)
    end
    else
    begin
    SET @OrigSpText2=REPLICATE('-', 4000)
    end
    SET @i=1SET @resultsp = replicate(N'A', (datalength(@OrigSpText1) / 2))WHILE @i<=datalength(@OrigSpText1)/2
    BEGINSET @resultsp = stuff(@resultsp, @i,
     1, NCHAR(UNICODE(substring(@OrigSpText1, @i, 1)) ^
                                    (UNICODE(substring(@OrigSpText2, @i, 1)) ^
                                    UNICODE(substring(@OrigSpText3, @i, 1)))))
     SET @i=@i+1
    END
    set @abc_xx=cast(@OrigSpText1 as varbinary(8000))
    set @resultsp=(case when @encrypted=1 
                        then @resultsp 
                        else convert(nvarchar(4000),case when @status&2=2 then uncompress(@abc_xx) else @abc_xx end)
                   end)
    print @resultspset @n=@n+1endend
    set @k=@k+1
    enddrop table #temp
    rollback tran
    end这是解密的所有代码
      

  6.   

    exec pro_pro '加密的触发器名称'
    --就可以解密了