因为这个函数用在addlinkedsrvlogin中,是来加密linkserver的密码的,所以我才说这个函数加密应该是可逆的.

解决方案 »

  1.   

    在sp_addlinkedsrvlogin中的用法
    insert master.dbo.sysxlogins values(@srvid, @localsid, @status, getdate(), getdate(), @rmtuser,convert(varbinary(256), encrypt(@rmtpassword)), 0, NULL)Encrypt这个函数只有在储存过程中才才起作用,例子
    create procedure pwd
    @rmtpassword sysname = NULL
    as
    declare @rmtpass varbinary(256)
    select @rmtpass=encrypt(@rmtpassword)
    print @rmtpass
    return(0)pwd '1234'
    0x530411DF99C279B7
    select cast(encrypt('1234') as varbinary(256))
    0x3100320033003400我相信在addlinkedsrvlogin的时候是使用了encrypt_a()这个函数和本机的某个参数结合得到密文的,因为只要linkserver的密码相同在同一个sqlserver的密文都是相同的,不同sqlserver这个密文是不同的,加密储存过程和加密函数应该也是调用这个函数进行的,应该说这个函数是可逆的,在我们使用分布式查询的时候,sqlserver会解密这个密文进行连接,执行加密的储存过程是一个道理.