【发布时间】:2020-06-05 09:09:28
【问题描述】:
使用 SQL Server 2012 v11.0.2100.60,我正在尝试创建一个存储过程,该过程打开一个对称密钥,并通过带密码的证书解密。
如果我将硬编码密码放在存储过程中,它可以正常工作,但我希望能够将证书密码作为参数传递给存储过程(这样明文 pw 就不会存在于任何地方服务器)。
这是我尝试过的。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[testSproc]
@pw VARCHAR(50)
AS
BEGIN
SET NOCOUNT ON;
OPEN SYMMETRIC KEY key_name
DECRYPTION BY CERTIFICATE cert_name WITH PASSWORD = '''+@pw+''';
SELECT ....
当我执行时,我得到以下信息:
消息 15466,级别 16,状态 9,过程 testSproc,第 9 行
解密时出错。
这是我执行时的样子:
DECLARE @return_value int
EXEC @return_value = [dbo].[testSproc]
@GL = N'98787notTheRealPW45668456318'
-- I've tried both N'98787notTheRealPW45668456318' and just '98787notTheRealPW45668456318'
SELECT 'Return Value' = @return_value
GO
我是否错误地传递了参数?或者错误地设置存储过程中的变量?非常感谢任何帮助!
【问题讨论】:
标签: sql-server encryption