zoukankan      html  css  js  c++  java
  • 关于加密存储过程

    如何简单的创建一个加密存储过程:
    create proc Test
    (参数列表)
    with encription
    as
    主体
    go

    为了演示,现在我们创建一个具备各种参数类型的存储过程作为测试:
    create proc Test 
    (
        @x 
    int = 3,
        @s 
    nvarchar(20),
        @y 
    int output
    )

    with encryption
    as

    select @x, @s
    set @y = 5
    return 1
    go
    这个存储过程具备了输入参数,输出参数,返回值。
    (关于返回值的题外话:返回值只能是 int 类型或者没有。默认情况下,系统存储过程都返回 0 表示调用成功,其他非零值表示失败。用户自定义的存储过程可以返回任意整数值)

    现在调用一下这个存储过程试试:
    declare @y int, @r int
    exec @r = test 9'Hello', @y output
    select @y
    select @r

    再来看一下这个存储过程的注释:
    SELECT c.id, c.text 
    FROM syscomments c INNER JOIN sysobjects o
       
    ON c.id = o.id
    WHERE o.name = 'Test'
    可以发现是一些加密了之后的乱码。

    如何得到加密存储过程的参数列表信息呢?有两个办法:
    方法A:
    select * from information_schema.parameters
    where specific_name = 'Test'
    这个方法返回的结果集里没有包含返回值的信息。

    方法B:
    sp_procedure_params_rowset 'Test'1'dbo'
    这个语句返回的比上面那个多一行返回值信息。

    注意到他们返回的其他列信息也不同。比如 PROCEDURE_NAME(存储过程名),方法B返回的是:
    Test;1
    后面这个 1 表示 Group Number.

    参考:
    http://sqljunkies.com/WebLog/roman/archive/2004/10/08/4539.aspx
  • 相关阅读:
    Spark Streaming企业运用
    spark企业运用
    sparkcore企业运用
    Spark GraphX从入门到实战
    sparkstreaming入门到实战
    sparkSql从入门到实战
    sparkcore入门到实战
    spark机器算法从入门到实战
    flink实时数仓从入门到实战
    github上克隆私有项目
  • 原文地址:https://www.cnblogs.com/RChen/p/120981.html
Copyright © 2011-2022 走看看