SQL Server
約50個のデータベースが存在するサーバー。
データベースにアクセスしたいクライアントのために、新しいLogin
を作成したいと思います。
しかし、他の49データベースへのアクセスを許可したくありません。
これどうやってするの?
更新:
また、Security -> Server Roles
、およびpublic
の場合は、TSQL Default TCP/TSQL Default VIA/TSQL Local Machine/TSQL Named Pipes
およびconnect
パーミッションを削除します
これは私たちがとてもやりたいことだと思います。
--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
詳細については、リンクを参照してください。
これを行う方法を考えている他の人のために、SQL Server 2008 R2以降用の次のソリューションがあります:
USE master
go
DENY VIEW ANY DATABASE TO [user]
go
これにより、上記の要件に正確に対応します。
これは、正しい答えとして選択されたものにジャンプすることです。完了していない場合でも、ユーザーがデータベースの残りの部分にアクセスできるという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.
以上です。