505 字
3 分鐘
瀏覽次數
如何禁止特定帳號使用 LinkServer?用假帳號直接封鎖
2026-04-08
2026-04-14

結論#

用「假帳號 mapping」覆蓋 LinkServer 登入,讓指定使用者永遠連線失敗,是最簡單可控的封鎖方式。

適合用在哪裡#

  • 想限制「特定帳號」不能用 LinkServer
  • 不想影響其他使用者(維持 public 可用)
  • 無法用 DENY 精準控管 LinkServer 時
  • 權限已混亂,需要快速止血

流程步驟#

1. 確認目前 LinkServer 登入設定#

  • 使用 sp_helplinkedsrvlogin 檢視 mapping
  • 可以看到誰對應哪個遠端帳號
  • 判斷是否有 NULL(代表所有人共用)
EXEC sp_helplinkedsrvlogin;

2. 移除目標使用者的既有 mapping#

  • 針對所有 LinkServer
  • 刪除該 User 的登入對應
  • 避免舊設定干擾
EXEC sp_droplinkedsrvlogin
@rmtsrvname = N'LinkServerName',
@locallogin = N'UserA';

3. 建立「假帳號」強制登入失敗#

  • 核心做法:指定一組不存在的帳號
  • 當 User 呼叫 LinkServer 時 → 一定登入失敗
  • 等同「軟性 DENY」
EXEC sp_addlinkedsrvlogin
@rmtsrvname = N'LinkServerName',
@useself = N'False',
@locallogin = N'UserA',
@rmtuser = N'FakeDenyUser',
@rmtpassword = N'WrongPassword';

補充#

  • 沒有 DENY USE LINKSERVER 這種權限,只能用 mapping 控制
  • @locallogin = NULL 代表所有人共用,需特別注意覆蓋順序
  • 此方法不影響其他使用者(只針對指定帳號)

指令 / 範例整理#

Click to expand
-- 檢視權限
EXEC sp_helplinkedsrvlogin;
-- 動態產生:刪除 + 建立 Fake Mapping
DECLARE @UserName sysname = N'UserA';
DECLARE @FakeUser sysname = N'FakeDenyUser';
DECLARE @FakePassword nvarchar(200) = N'WrongPassword';
DECLARE @SQL nvarchar(max) = N'';
-- 1. 刪除 mapping
SELECT
@SQL = @SQL +
N'BEGIN TRY
EXEC sp_droplinkedsrvlogin
@rmtsrvname = N''' + REPLACE(name, '''', '''''') + ''',
@locallogin = N''' + REPLACE(@UserName, '''', '''''') + ''';
END TRY
BEGIN CATCH
END CATCH;' + CHAR(13) + CHAR(10)
FROM sys.servers
WHERE is_linked = 1;
-- 2. 建立 Fake mapping
SELECT
@SQL = @SQL +
N'EXEC sp_addlinkedsrvlogin
@rmtsrvname = N''' + REPLACE(name, '''', '''''') + ''',
@useself = N''False'',
@locallogin = N''' + REPLACE(@UserName, '''', '''''') + ''',
@rmtuser = N''' + REPLACE(@FakeUser, '''', '''''') + ''',
@rmtpassword = N''' + REPLACE(@FakePassword, '''', '''''') + ''';'
+ CHAR(13) + CHAR(10)
FROM sys.servers
WHERE is_linked = 1;
-- Debug
PRINT @SQL;
-- 執行
EXEC sp_executesql @SQL;

收尾#

LinkServer 沒有權限控管?那就用「讓他永遠連不上」這招,乾脆俐落。 實務建議:權限設計一開始就分帳號,不然後面都只能補破網。

如何禁止特定帳號使用 LinkServer?用假帳號直接封鎖
https://joyceowo.github.io/posts/33ca78ea09fa8096b44ccfaf8486be0c/
作者
JoyceOwO
發佈於
2026-04-08
許可協議
CC BY-NC-SA 4.0