2016-04-21 43 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

相關問題