Sql-Server

通過連結伺服器添加 sql 使用者

  • August 29, 2016

我需要為一堆連結伺服器添加一個 Windows 使用者並將角色設置為 sysadmin,並且無法弄清楚使目前連結伺服器處於活動狀態以供查詢添加使用者和角色的語法。

有什麼建議?我在網上只看到過一個這樣的例子,但它不適用於 SQL 2008。

如果您的意思是我認為您的意思,不,您不能USE [LinkedServer];在 SSMS 查詢視窗中說類似的話。有替代方案:

  • 您可以通過右鍵點擊查詢視窗、連接、更改連接來更改與不同伺服器的目前連接。這將允許您更改與您可以看到的實例的連接,這可能與目標可以看到的連結伺服器集不同,並且它不提供以程式方式執行此操作的方法。
  • 右鍵點擊一組註冊伺服器 (Ctrl + Alt + G) 並選擇相同的問題New Query- 這些是您的客戶端工作站上的註冊伺服器,而不是在目標實例中設置的連結伺服器。
  • 您可以使用 SQLCMD 模式並使用:CONNECT指令,但這會帶來與上述相同的問題。

我不認為這兩個是你所追求的。您可以通過以下方式建構使目標實例對多個連結伺服器執行命令所需的命令集:

DECLARE @sql nvarchar(MAX) = N'';

SELECT @sql += N'
 EXEC ' + QUOTENAME(name) 
   + N'.master.sys.sp_executesql 
     N''CREATE LOGIN [domain\user] FROM WINDOWS;
        ALTER ROLE [rolename] ADD MEMBER [domain\user];
        -- ...'';'
 FROM sys.servers
 WHERE is_linked = 1;

PRINT @sql;

您可以使用其他過濾器使用其他條件刪除某些連結伺服器,或者以其他方式修改命令,然後複製並粘貼它們以執行。如果您信任它,您也可以只說以下內容:

EXEC sys.sp_executesql @sql;

由於該PRINT命令僅支持 8k,這意味著對伺服器數量的限制(實際數量將取決於命令的長度和連結伺服器名稱的長度)。

您可以發布您嘗試使用的查詢嗎?

大多數時候,如果我試圖在連結伺服器上執行 SQL 語句,我會將我的 SQL 查詢建構為變數並使用 EXECUTE AT。

DECLARE @SQLQuery VARCHAR(1000) = 'ALTER TABLE [tableName]
                                  ADD [columnName] VARHCAR(50);'

EXECUTE (@SQLQuery) AT [LinkedServerName];

如果您還沒有,您需要創建一個使用者(在遠端伺服器上)以與連結伺服器一起使用。

引用自:https://dba.stackexchange.com/questions/148244