SQL Server加密:在存储过程中创建密钥

广沙

我需要创建一个存储过程,使我们的密码保管人可以在DR数据库中重新创建对称密钥,但是无论如何它总是会抱怨语法不正确。这是SQL Server 2008 R2中允许的,还是语法错误?谢谢

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[sp_BCPRecreateEncryption] 
    @Password varchar(255)
AS
BEGIN
    DROP SYMMETRIC KEY SymmetricKeyName
    DROP CERTIFICATE EncryptCert
    DROP MASTER KEY

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = @Password

    CREATE CERTIFICATE EncryptCert
        WITH SUBJECT = N'EncryptCert', START_DATE = N'08/06/2014 07:16:08', EXPIRY_DATE = N'08/06/2042 07:16:08'
        ACTIVE FOR BEGIN_DIALOG = ON;

    CREATE SYMMETRIC KEY SymmetricKeyName
        WITH KEY_SOURCE = @Password, 
                IDENTITY_VALUE = @Password, 
             ALGORITHM = AES_256
        ENCRYPTION BY CERTIFICATE EncryptCert;
END

我也尝试使用,executesql但仍然收到相同的错误

DECLARE @ParmDefinition nvarchar(500);
SET @ParmDefinition = N'@Password string' ;

EXECUTE sp_executesql N'CREATE MASTER KEY ENCRYPTION BY PASSWORD = @DCMPassword', @ParmDefinition , @DCMPassword=@Password

编辑添加错误:

消息102,级别15,状态1,过程sp_BCPRecreateEncryption,第13行
'@Password'附近的语法不正确。

消息102,级别15,状态1,过程sp_BCPRecreateEncryption,第20行
'@Password'附近的语法不正确。

所罗门·鲁兹基

主要问题是您不能使用变量来设置密码。它们必须是字符串文字。如果仅在MSDN页面上查看CREATE MASTER KEY,您会注意到没有选项为传递本地变量passwordCREATE SYMMETRIC KEY的文档还显示,只有字符串文字对KEY_SOURCE有效IDENTITY_VALUE

您尝试通过Dynamic SQL修复的第二个问题string是无效的数据类型。

如果要从存储过程输入参数中获取值,则需要将该值连接到Dynamic SQL中。确保先对单引号进行消毒;-),以避免SQL注入问题。

SET @Password = REPLACE(@Password, N'''', N'''''');

DECLARE @SQL NVARCHAR(MAX) = N'
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '''
  + @Password
  + N''';';

EXEC(@SQL);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在SQL Server存储过程中创建表类型参数

来自分类Dev

SQL Server存储过程中的错误

来自分类Dev

SQL Server存储过程中的IF条件

来自分类Dev

SQL Server:存储过程中的IF THEN ELSE

来自分类Dev

在存储过程中创建和使用的SQL Server中的临时表

来自分类Dev

如何在SQL Server的存储过程中从xml节点创建游标?

来自分类Dev

如何在SQL Server存储过程中创建动态参数

来自分类Dev

如何在 SQL Server 2016 存储过程中删除和创建表

来自分类Dev

在SQL Server中的存储过程中读取xml的问题

来自分类Dev

SQL Server中存储过程中的可选参数

来自分类Dev

在SQL Server中的存储过程中读取xml的问题

来自分类Dev

SQL Server:IF条件在存储过程中不起作用

来自分类Dev

SQL Server:存储过程中的并发问题

来自分类Dev

做 ; 表示SQL Server存储过程中的任何内容

来自分类Dev

SQL Server存储过程中的多个表类型参数

来自分类Dev

从SQL Server存储过程中检索特定数据

来自分类Dev

如何捕获SQL Server存储过程中的错误?

来自分类Dev

在SQL Server存储过程中插入@tablename

来自分类Dev

SQL Server:存储过程中的动态查询

来自分类Dev

在SQL Server中的存储过程中使用循环

来自分类Dev

TRY / CATCH bloc在SQL Server存储过程中的位置

来自分类Dev

SQL Server存储过程中的子例程

来自分类Dev

SQL Server:计算存储过程中的可变日期

来自分类Dev

sql server存储过程中的xml参数

来自分类Dev

SQL Server存储过程中的Postgresql函数

来自分类Dev

从存储过程中运行特定的SQL Server作业步骤

来自分类Dev

SQL Server:在存储过程中插入游标

来自分类Dev

在 SQL Server 2016 存储过程中解析 XML

来自分类Dev

如何获取sql server存储过程结果以在其他存储过程中处理?

Related 相关文章

  1. 1

    在SQL Server存储过程中创建表类型参数

  2. 2

    SQL Server存储过程中的错误

  3. 3

    SQL Server存储过程中的IF条件

  4. 4

    SQL Server:存储过程中的IF THEN ELSE

  5. 5

    在存储过程中创建和使用的SQL Server中的临时表

  6. 6

    如何在SQL Server的存储过程中从xml节点创建游标?

  7. 7

    如何在SQL Server存储过程中创建动态参数

  8. 8

    如何在 SQL Server 2016 存储过程中删除和创建表

  9. 9

    在SQL Server中的存储过程中读取xml的问题

  10. 10

    SQL Server中存储过程中的可选参数

  11. 11

    在SQL Server中的存储过程中读取xml的问题

  12. 12

    SQL Server:IF条件在存储过程中不起作用

  13. 13

    SQL Server:存储过程中的并发问题

  14. 14

    做 ; 表示SQL Server存储过程中的任何内容

  15. 15

    SQL Server存储过程中的多个表类型参数

  16. 16

    从SQL Server存储过程中检索特定数据

  17. 17

    如何捕获SQL Server存储过程中的错误?

  18. 18

    在SQL Server存储过程中插入@tablename

  19. 19

    SQL Server:存储过程中的动态查询

  20. 20

    在SQL Server中的存储过程中使用循环

  21. 21

    TRY / CATCH bloc在SQL Server存储过程中的位置

  22. 22

    SQL Server存储过程中的子例程

  23. 23

    SQL Server:计算存储过程中的可变日期

  24. 24

    sql server存储过程中的xml参数

  25. 25

    SQL Server存储过程中的Postgresql函数

  26. 26

    从存储过程中运行特定的SQL Server作业步骤

  27. 27

    SQL Server:在存储过程中插入游标

  28. 28

    在 SQL Server 2016 存储过程中解析 XML

  29. 29

    如何获取sql server存储过程结果以在其他存储过程中处理?

热门标签

归档