1

这是我的场景:

  1. 我将数据库 R 恢复到 QA SQL Server 并重命名为 Rtest。服务器上有另一个数据库 R 实例。
  2. 我运行了以下命令来启用加密:

    OPEN MASTER KEY DECRYPTION BY PASSWORD = 'ABC'
    RESTORE MASTER KEY FROM FILE = 'ThePath' 
    
    DECRYPTION BY PASSWORD = 'DEF'
    ENCRYPTION BY PASSWORD = 'GHI'
    

如果我以 SysAdmin 身份连接到数据库,我可以解密已加密的列。查询工作得很好。

如果我以本地用户身份连接到数据库,则会收到以下错误:

Msg 15581, Level 16, State 3, Line 2
请在数据库中创建主密钥或在会话中打开主密钥,然后再执行此操作。

以本地用户身份登录时,我运行以下命令:

OPEN MASTER KEY DECRYPTION BY PASSWORD = 'ABC'

我可以对连接运行查询,但是一旦打开新连接,我又会收到错误消息。

我能够始终如一地运行查询的唯一方法是每次需要访问加密列时运行以下命令:

OPEN MASTER KEY DECRYPTION BY PASSWORD = 'ABC'

基本上,每次我想选择、更新或插入表时,我都必须执行以下操作:

OPEN MASTER KEY DECRYPTION BY PASSWORD = 'ABC'

select EncryptedColumn from TableA where x = 2

我试图弄清楚为什么我必须每次都打开万能钥匙。通常我只运行一次命令,然后就是这样。任何帮助,将不胜感激。谢谢你。

4

1 回答 1

1

您需要将 DMK 添加到系统数据库中:

OPEN MASTER KEY DECRYPTION BY PASSWORD = '@这是一个 123 强密码';

ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY;

这将允许 SQL 服务器在需要时自动打开数据库主密钥。

http://msdn.microsoft.com/en-us/library/ms186937(v=sql.90).aspx

于 2014-08-08T17:56:02.417 回答