web-dev-qa-db-fra.com

Restreindre l'accès à la connexion SQL Server à une seule base de données

J'ai un SQL Server serveur qui contient environ 50 bases de données.

Je souhaite créer un nouveau Login pour un client qui souhaite avoir accès à sa base de données.

Mais je ne veux pas leur donner accès aux autres 49 bases de données.

Comment puis-je faire ceci?

31
Curt
  1. Connectez-vous à votre instance SQL Server à l'aide de Management Studio
  2. Goto Security -> Logins -> (CLIC DROIT) Nouvelle connexion
  3. remplir les détails de l'utilisateur
  4. Sous User Mapping, sélectionnez les bases de données auxquelles vous souhaitez que l'utilisateur puisse accéder et configurer

MISE À JOUR:

Vous voudrez également aller à Security -> Server Roles, et pour public vérifiez les autorisations pour TSQL Default TCP/TSQL Default VIA/TSQL Local Machine/TSQL Named Pipeset supprimez l'autorisation connect

24
Irfy

Je pense que c'est ce que nous aimons beaucoup faire.

--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

Si vous avez déjà créé un utilisateur et affecté à cette base de données avant de le faire

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

puis supprimez-le en faisant ci-dessous et suivez les étapes

   USE yourDB;
   GO
   DROP USER newlogin;
   GO

Pour plus d'informations, veuillez suivre les liens:

Masquage des bases de données pour une connexion sur Microsoft SQL Server 2008R2 et supérieur

51
kta

Pour quiconque se demande comment faire cela, j'ai la solution suivante pour SQL Server 2008 R2 et versions ultérieures:

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

Cela répondra exactement à l'exigence décrite ci-dessus.

2
mhickin

c'est pour compléter ce qui a été sélectionné comme la bonne réponse. Il manque une étape qui, lorsqu'elle n'est pas terminée, l'utilisateur pourra toujours accéder au reste de la base de données. Tout d'abord, faites comme suggéré par @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

l'étape manquante est ci-dessous:

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

Et c'est tout.

0
OneGhana