我有一个数据库托管在一个服务器上,该数据库与另一个服务器建立链接服务器连接,该服务器包含用于自定义应用程序的数据。具有链接服务器连接的数据库需要将表中的敏感数据插入自定义应用程序的链接服务器上托管的数据库中。
我遵循了本指南(https://www.mssqltips.com/sqlservertip/2431/sql-server-column-level-encryption-example-using-symmetric-keys/),并在用于自定义应用程序的服务器上创建了对称密钥,我可以在自定义应用程序服务器上很好地插入和读取加密数据。
您可以在上面的步骤3中看到,我在自定义应用程序服务器上的数据库中创建了一个MASTER KEY。我现在想做的是使用:
INSERT INTO LinkedServer.Table
SELECT EncryptByKey(Key_GUID('myKey'), someColumn), etc
FROM SensitiveData.Table
所有这些之后,我的问题是,由于此密钥仅存在于用于自定义应用程序的链接服务器上,因此当尝试通过消息将INSERT上的EncryptByKey从敏感数据服务器传输到自定义应用程序服务器时,出现错误:
远程功能参考'LinkedServer.DatabaseName.dbo.EncryptByKey' 不允许,并且找不到列名“ LinkedServer” 或模棱两可。
我应该在敏感数据服务器上创建相同的密钥,以便它可以从那里进行加密吗,这样做是否存在安全风险?还是有某种语法上的方式告诉它使用链接服务器上的密钥进行加密?或者我认为做的最后一种方法是在自定义应用程序服务器中创建另一个表,从敏感数据服务器中正常插入数据,在该表上放置一个触发器,然后在插入后,在自定义应用程序上使用主密钥服务器加密数据,将其移到我要保存加密数据的表中,然后将其从新表中删除?
答案 0 :(得分:0)
这就是我解决这个问题的方式。
我在链接服务器数据库中创建了一个临时表来保存纯文本数据。
我在临时表上设置了一个AFTER INSERT触发器,以便使用链接服务器上的MASTER KEY插入到加密表中以加密所有值。
从临时表中删除所有数据。
这完成了工作,我仍然不确定我是否正确地处理了这种情况,因此请随时对此发表评论或添加答案。