web-dev-qa-db-ja.com

SQL Serverログインアクセスを1つのデータベースのみに制限する

SQL Server約50個のデータベースが存在するサーバー。

データベースにアクセスしたいクライアントのために、新しいLoginを作成したいと思います。

しかし、他の49データベースへのアクセスを許可したくありません。

これどうやってするの?

31
Curt
  1. Management Studioを使用してSQLサーバーインスタンスに接続する
  2. Goto Security-> Logins->(右クリック)新規ログイン
  3. ユーザーの詳細を入力します
  4. [ユーザーマッピング]で、ユーザーがアクセスおよび構成できるデータベースを選択します

更新:

また、Security -> Server Roles、およびpublicの場合は、TSQL Default TCP/TSQL Default VIA/TSQL Local Machine/TSQL Named Pipesおよびconnectパーミッションを削除します

24
Irfy

これは私たちがとてもやりたいことだと思います。

--Step 1: (create a new user)
create LOGIN hello WITH PASSWORD='foo', CHECK_POLICY = OFF;


-- Step 2:(deny view to any database)
USE master;
GO
DENY VIEW ANY DATABASE TO hello; 


 -- step 3 (then authorized the user for that specific database , you have to use the  master by doing use master as below)
USE master;
GO
ALTER AUTHORIZATION ON DATABASE::yourDB TO hello;
GO

以前にユーザーを作成し、そのデータベースに割り当てた場合

USE [yourDB] 
CREATE USER hello FOR LOGIN hello WITH DEFAULT_SCHEMA=[dbo] 
GO

以下を実行して親切に削除し、手順に従ってください

   USE yourDB;
   GO
   DROP USER newlogin;
   GO

詳細については、リンクを参照してください。

Microsoft Sql Server 2008R2以降でのログイン用データベースの非表示

51
kta

これを行う方法を考えている他の人のために、SQL Server 2008 R2以降用の次のソリューションがあります:

USE master
go
DENY VIEW ANY DATABASE TO [user]
go

これにより、上記の要件に正確に対応します。

2
mhickin

これは、正しい答えとして選択されたものにジャンプすることです。完了していない場合でも、ユーザーがデータベースの残りの部分にアクセスできるという1つの欠落したステップがあります。まず、@ DineshDBが示唆したとおりに実行します

  1. Connect to your SQL server instance using management studio
   2. Goto Security -> Logins -> (RIGHT CLICK) New Login
   3. fill in user details
   4. Under User Mapping, select the databases you want the user to be able to access and configure

不足している手順は次のとおりです。

5. Under user mapping, ensure that "sysadmin" is NOT CHECKED and select "db_owner" as the role for the new user.

以上です。

0
OneGhana