Sql-Server

沒有權限的使用者可以使用連結伺服器

  • February 3, 2016

我有使用者看到他們不應該看到的連結伺服器。

連結伺服器被定義為只有我可以訪問它,但每個人都可以看到和使用它。

我使用以下步驟創建了新的連結伺服器:

  1. 將 SSMS 對象資源管理器連接到 SQL Server 實例
  2. 展開Server Objects,右鍵點擊Linked Servers並左鍵點擊New Linked Server...
  3. 在選項卡下General選擇並寫下伺服器的名稱SQL Server``Server type
  4. Security上半部分的選項卡下點擊Add,選擇“sa”作為Local Login,輸入Remote User名稱和Remote Password
  5. Security下部的選項卡下(下For a login not defined in the list above, connections will:)選擇第一個選項:Not be made
  6. 點擊OK開始測試

現在唯一應該看到連結伺服器的人是我(“sa”),但不知何故其他使用者可以看到並使用它。

注意1:可以使用連結伺服器的使用者對遠端伺服器具有權限,他們看不到他們不應該看到的數據,他們只能在他們不應該看到的時候從連結伺服器訪問它。

注 2:我是這sysadmin兩個實例中唯一的一個。

無法“隱藏”連結伺服器或阻止未經授權的使用者嘗試使用它。您所能控制的只是他們是否真的可以訪問另一端。連結伺服器本身並不是一個實際的對象。就像同義詞一樣,您不授予對別名的訪問權限,而只是授予它引用的事物。

試一試,您會發現您的一些假設(例如,“登錄…無法在對象資源管理器中看到連結伺服器”)是錯誤的。我這樣做了:

  1. 創建了一個登錄名,並且沒有授予任何權限,只是 CONNECT / public 角色。
  2. 創建了一個連結伺服器,並且沒有將此登錄名添加到登錄名列表中。
  3. 打開一個新的 Management Studio 實例,並使用此登錄名進行連接。
  4. 我能夠在伺服器對象 > 連結伺服器下看到所有連結伺服器。
  5. 我還能夠查詢sys.servers以查看連結伺服器的列表。

我能夠執行以下查詢沒問題:

SELECT name FROM [linked server].master.sys.objects;

但是,我無法對非系統數據庫執行查詢,因為我沒有授予對任何非系統數據庫或內部對象的顯式訪問權限。例如:

SELECT SalesOrderID FROM [linked server].AdventureWorks2012.Sales.SalesOrderHeader;

產生了這個錯誤:

消息 7314,級別 16,狀態 1,第 1 行

連結伺服器“連結伺服器”的 OLE DB 提供程序“SQLNCLI11”不包含表“AdventureWorks2012”.“Sales”。“SalesOrderHeader”。該表不存在或目前使用者對該表沒有權限。

我希望您可以通過明確拒絕訪問連結伺服器上的特定對象(或DENY CONNECT SQL完全拒絕該登錄)來獲得更多限制性結果,但這並不限制其對連結伺服器的影響;它也會影響直接連接。

無論如何,我看不到您要完成的工作的重點:

  1. 如果使用者在另一端沒有訪問權限,讓他們嘗試有什麼害處?(與一開始就試圖阻止他們嘗試相比,您可能會更幸運地告訴他們不要這樣做並審核他們。)
  2. 如果使用者確實可以訪問另一端,為什麼他們不能使用連結伺服器?

您可以使用第一個選項“Not be made with”登錄映射,如下所示:

在此處輸入圖像描述

這是映射登錄的結果:

在此處輸入圖像描述

這是另一個帳戶發生的情況

在此處輸入圖像描述

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