2009-06-01 17 views
34

SQL Server 2005/2008にログインするときにアクセス権のないデータベースを隠すにはどうすればよいですか?現在、ユーザーが接続すると、サーバー上のすべてのデータベースが表示されます。つまり、リストをスキャンしてデータベースを検索する必要があります。Management StudioからSQLデータベースを隠す

答えて

13

あなたは

+5

注:データベースのDBOのログインこのユーザを作ることができない場合、これはあなたのために動作しない場合があります管理者に尋ねたり、複数のログインをこのようにしたい場合は、1つのログインのみがデータベースの実際のDBOになる可能性があります。 –

0

は、データベースaを制限するMS SQL 2005と2008のサーバー側の設定があるように見えるの許可役割PUBLICから「任意のデータベースを表示」(以降のSQL Server 2005)を取り消す必要があるだろうユーザーに表示されることがあります。 sql-server-performance.com

SQL Server 2005では、作成された新しいサーバー側の役割が可能です。 VIEW ANY DATABASE権限は、サーバーレベルの新しい権限です。この権限で付与されたログインでは、ログインが特定のデータベースを所有しているか実際に使用できるかにかかわらず、すべてのデータベースを記述するメタデータが表示されます。注意:デフォルトでは、VIEW ANY DATABASE権限はpublicロールに付与されています。したがって、既定では、SQL Server 2005のインスタンスに接続するすべてのユーザーは、インスタンス内のすべてのデータベースを参照できます。

19

これは実際には意味をなさないやり方ではありません。公開ロールからすべてのデータベースを取り消しますが、ユーザーはデータベースのデータベース所有者である必要があります。または表示できませんが、引き続きアクセスできます。問題は、データベースエンジンセキュリティの欠点であり、SQL Serverの現在または将来のリリースでは修正されない可能性があります。 Erland Sommarskog氏はこれまでに次の接続項目を開いていましたが、最近Twitterで、SQL MVPでMicrosoftと話し合いました。投票接続し、助けることが優先順位のよりMicrosoftが修正するために作る:基本的に権限はデータベースレベルで保存されている

Connect Feedback

を、それは、ユーザが接続しているかどうかを判断するために、各データベースを列挙が必要となりますオブジェクトエクスプローラにデータベースを表示する権利があります。これは、実行するには高価なタスクであり、以前のEMはこれまでどのように操作していましたか。提案する解決策は、この情報がサーバーレベルでも維持されることです。これは大きな変更です。

+2

+1、これはこれまでのところ最も完全で徹底的な答えと思われます。 – stakx

+0

8年以上経ってもACTIVEと表示されていますが、Connectリンクで投票してください – BiLaL

48

1 DBにしかアクセスできない、そのDBだけを見ることができるユーザーアカウントを作成する方法を理解してから、時間がたっています。私はそれを考え出したと思う!

  1. ユーザーアカウントを作成します(提案された解決策そうでなければ、最終的にエラーメッセージ15110、レベル16、状態1を取得しますが、そのいずれかのデータベースにマッピングされていないことを確認し、注意してください)

    USE [master] 
    GO 
    CREATE LOGIN [us4] 
        WITH PASSWORD=N'123', 
        DEFAULT_DATABASE=[master], 
        CHECK_EXPIRATION=OFF, 
        CHECK_POLICY=OFF 
    
  2. SQL(SQLSERVER名)の上部を右クリック>プロパティ>権限>ユーザーアカウントをクリックし、拒否を選択してデータベースを表示します。

    [マスター] を使用GO は右新たに作成したDB、プロパティ、ファイルをクリックし、新しく作成したアカウントに所有者を変更[US4]

  3. を視野に任意のデータベースを拒否します。彼はマスター、tempdbのを見てますでしょうにユーザがログインすると、この時点で

    USE [dbname] 
    GO 
    EXEC dbo.sp_changedbowner @loginame = N'us4', @map = false 
    

を:(重要な注意 ALTER ROLEは、[db_ownerロール] MEMBERは[US4] 動作しないADD)彼がDB所有者である新しいDBも見てください。あなたはTools> Optionに行き、マスタ、tempdbなどを表示しないようにシステムオブジェクトを隠すオプションを有効にすることができます。このオプションはメッセージ15110に

Msg 15110, Level 16, State 1, Line 1 
The proposed new database owner is already a user or aliased in the database. 

提案されたソリューションを動作しない場合にも、SP1が必要になる場合があります単にデータベース・セキュリティ・ノードからユーザーを削除し、エラーの上解決すると助け再び

希望をしてみてください。.. 。

ニキル

+5

これはいいですが、そのユーザーをdbの所有者にしたくない場合でも、それを見ることができますSSMSで? – friism

+0

私はこれを長い間探してきました、ありがとう! –

+0

クールこれは私のために働いた... friism - あまりにもマイクロ管理行くIMO;)あなたはIEのテーブルドロップ/追加、切り捨てなどが必要なものを否定することによって、このコンセプトを微調整することはできません... – bbqchickenrobot

1
USE master; GO 

DENY VIEW ANY DATABASE TO [loginname]; GO 

USE [your db]; GO 

DROP USER [loginname]; GO 

USE master; GO 

ALTER AUTHORIZATION ON DATABASE::[your db]TO [loginname]; GO 
+0

このコードの内容を説明できますかそれが他の回答とどのように異なるか – userSteve

関連する問題