リンクされているサーバーが表示されるはずのないユーザーがいます。
リンクサーバーは、私だけがアクセスできるように定義されていますが、誰でも見ることができます。
次の手順で新しいリンクサーバーを作成しました。
Server Objects
を展開し、Linked Servers
を右クリックして、New Linked Server...
を左クリックします。General
タブの下で、SQL Server
にServer type
を選択し、サーバーの名前を入力しますSecurity
タブでAdd
をクリックし、Local Login
として「sa」を選択して、Remote User
の名前とRemote Password
を入力しますSecurity
タブの下(For a login not defined in the list above, connections will:
の下)で、最初のオプションを選択します:Not be made
OK
をクリックして、テストを開始しますこれで、リンクサーバーを表示することになっているのは私( "sa")だけですが、どういうわけか他のユーザーはそれを表示して使用できます。
注1:リンクサーバーを使用できるユーザーには、リモートサーバーに対するアクセス許可があり、表示すべきでないデータは表示されません。リンクサーバーからアクセスできないはずのデータにアクセスできます。
注2:両方のインスタンスで唯一のsysadmin
です。
リンクサーバーを "非表示"にしたり、許可されていないユーザーが試行を使用したりするのを防ぐ方法はありません。制御できるのは、相手が実際にアクセスできるかどうかだけです。リンクサーバー自体は実際のオブジェクトではありません。同義語のように、エイリアスへのアクセスを許可するのではなく、エイリアスが参照するものへのアクセスのみを許可します。
試してみると、いくつかの仮定(たとえば、「ログイン...オブジェクトエクスプローラーでリンクサーバーを表示できない」)が誤っていることがわかります。これは私がしました:
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
で完全に)、より制限的な結果が得られると思いますが、これはリンクサーバーへの影響を制限するものではありません。直接接続にも影響します。
いずれにせよ、私はあなたが達成しようとしていることの要点を見逃しています。