web-dev-qa-db-ja.com

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

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

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

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

  1. SSMSオブジェクトエクスプローラーをSQL Serverインスタンスに接続する
  2. Server Objectsを展開し、Linked Serversを右クリックして、New Linked Server...を左クリックします。
  3. Generalタブの下で、SQL ServerServer typeを選択し、サーバーの名前を入力します
  4. 上部のSecurityタブでAddをクリックし、Local Loginとして「sa」を選択して、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です。

9
Roi Gavish

リンクサーバーを "非表示"にしたり、許可されていないユーザーが試行を使用したりするのを防ぐ方法はありません。制御できるのは、相手が実際にアクセスできるかどうかだけです。リンクサーバー自体は実際のオブジェクトではありません。同義語のように、エイリアスへのアクセスを許可するのではなく、エイリアスが参照するものへのアクセスのみを許可します。

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

  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. ユーザーが反対側でアクセス権を持っていない場合、許可することの害は何ですかtry? (あなたが彼らに最初から試みないようにしようとするよりも、彼らにそうしないように言って監査するほうが幸運かもしれません。)
  2. ユーザーdoesが反対側にアクセスできる場合、リンクサーバーを使用できないのはなぜですか?
7
Aaron Bertrand

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

enter image description here

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

enter image description here

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

enter image description here

2
PollusB