権限のないユーザーが利用できるリンクサーバー


9

リンクされているサーバーが表示されるはずのないユーザーがいます。

リンクサーバーは、私だけがアクセスできるように定義されていますが、誰でも見ることができます。

次の手順で新しいリンクサーバーを作成しました。

  1. SSMSオブジェクトエクスプローラーをSQL Serverインスタンスに接続する
  2. 展開Server Objects、右クリックLinked Servers、左クリックNew Linked Server...
  3. Generalタブの下でサーバー名を選択SQL ServerServer typeて書き込みます
  4. Security上部のタブの下でをクリックしAdd、「sa」を選択しLocal LoginRemote 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
リンクサーバーを実際に非表示にすることはできませんが、リンクサーバーを使用しようとしたときに、現在のログインコンテキストの反対側にアクセス許可がない場合は
Aaron Bertrand

@AaronBertrandリンクサーバーにアクセスを提供しないだけで、リンクサーバーを非表示にできます。許可されたログインのリストに定義されておらず、sysadminではないログインは、オブジェクトエクスプローラーでリンクサーバーを表示できません。
Roi Gavish 2013年

@AaronBertrand現在のログインコンテキストにもう一方の端でアクセス許可がある場合、許可されていない場合でも、リンクサーバー経由で接続することはできません。
Roi Gavish 2013年

1
いいえ、そのようにリンクサーバーを非表示にすることはできません。これを試しましたか?
アーロンバートランド

回答:


7

「隠す」リンクサーバーまたは権限のないユーザーを防ぐ方法はありませんしようとし、それを使用することは。あなたが制御できるのは、彼らが実際に反対側でアクセスできるかどうかです。リンクサーバー自体は実際のオブジェクトではありません。同義語のように、エイリアスへのアクセスを許可するのではなく、エイリアスが参照するものへのアクセスのみを許可します。

試してみると、いくつかの仮定(たとえば、「ログイン...オブジェクトエクスプローラーでリンクサーバーを表示できない」)が誤っていることがわかります。これは私がしました:

  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. ユーザー反対側にアクセスできる場合、リンクサーバーを使用できないのはなぜですか?

2

次のようなログインマッピングの最初のオプション「で作成されない」を使用できます。

ここに画像の説明を入力してください

マッピングされたログインの結果は次のとおりです。

ここに画像の説明を入力してください

そして、これは別のアカウントで何が起こるかです

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.