2016-04-21 83 views
1

我想如果我必须真正将它归结为一件事情,真正的问题是:“有没有办法使用某种4部分标识符语法 - 相当于调用keyand证书,并保持开放,使一个4部分组成的标识符SELECT语句可以使用链接的服务器?链接服务器使用对称密钥/证书的加密数据查询


所有服务器都SQL Server 2012中利用它

当我登录到SSMS服务器(SERVER_A)(该服务器具有加密的数据),我可以简单地OPEN SYMMETRIC KEYDECRYPTION WITH证书,然后用DECRYPTWITHKEY包裹栏和我的路。在SSMS

SERVER_A查询:

OPEN SYMMETRIC KEY [KEY] 
DECRYPTION WITH [CERTIFICATE] 
GO 

SELECT 
    CONVERT(NVARCHAR, DECRYPTWITHKEY(col)) AS ColA 
FROM 
    SCHEMA.TABLE 
GO 

我有另一台服务器(SERVER_B)与链接服务器连接到SERVER_A。从SERVER_B,我希望能够在语法上做类似的事情,但我没有任何运气。

我成功地使用EXEC [SERVER_A].DATABASE.dbo.sp_executesql N'<above code>'RPC导通,但这种方法需要转义单引号和我失去IntelliSense和代码的整体可维护性/可读性(这是更复杂的明显高于上面的例子)。

有没有办法做一个类似于以下内容:

理想 SERVER_B查询“形式”在SSMS:

OPEN SYMMETRIC KEY [SERVER_A].DATABASE.[KEY] 
DECRYPTION WITH [SERVER_A].DATABASE.[CERTIFICATE] 
GO 

SELECT 
    CONVERT(NVARCHAR, DECRYPTWITHKEY(col)) AS ColA 
FROM 
    [SERVER_A].DATABASE.SCHEMA.TABLE 
GO 

或者至少,将钥匙打开,以便我可以使用4部分标识符语法SELECT语句(即,没有将整个事物包装在我已经完成并且可行的OPENQUERY中,但我不想引用整个查询)?对于更好或更差的练习/性能,实际的SELECT语句调用来自Intranet上3个不同服务器的数据,因此4部分标识符语法非常方便,可读性强。

回答

0

我知道这是旧的文章,只是在同样的场景来了,使用下面的查询得到了这个工作,使用OPENQUERY

SELECT * FROM OPENQUERY([SERVER_A], ' 
      EXEC ('' USE [DATABASE]; 

        OPEN SYMMETRIC KEY [KEY] 
        DECRYPTION BY CERTIFICATE [CERTIFICATE] 

        SELECT 
         CONVERT(NVARCHAR, DECRYPTWITHKEY(col)) AS ColA 
        FROM 
         SCHEMA.TABLE 
       '') 
       ') 
+0

“(即没有在OPENQUERY包裹了整个事情,我已经做了和工作,但我不想引用整个查询)“ – Matt