Après des heures à essayer de comprendre comment créer un compte d'utilisateur qui n'a accès qu'à 1 base de données et ne peut voir que cette base de données. Je pense que j'ai compris !!!!
-
Créez un compte utilisateur (assurez-vous qu'il n'est associé à aucune base de données, sinon vous obtiendrez l'erreur finale Msg 15110, niveau 16, état 1 et notez la solution proposée )
USE [master] GO CREATE LOGIN [us4] WITH PASSWORD=N'123', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
-
Cliquez avec le bouton droit sur la partie supérieure de SQL (Nom SQLSERVER)>
Properties
>Permissions
>Cliquez sur leuser account
, et sélectionnezDeny
pour afficher les bases de données.use [master] GO DENY VIEW ANY DATABASE TO [us4]
-
Cliquez avec le bouton droit sur la base de données nouvellement créée, Propriétés, Fichiers et modifiez le propriétaire du compte nouvellement créé. (remarque importante :
ALTER ROLE [db_owner] ADD MEMBER [us4]
ne fonctionne pas )USE [dbname] GO EXEC dbo.sp_changedbowner @loginame = N'us4', @map = false
À ce stade, une fois que l'utilisateur se connecte, il verra le maître, tempdb et verra également la nouvelle base de données dont il est propriétaire de la base de données. Vous pouvez aller dans Tools>Option
et activé l'option permettant de masquer les objets système afin de ne pas afficher le maître, tempdb, etc. Vous pouvez également avoir besoin du SP1 si cette option ne fonctionne pas
Msg 15110, Level 16, State 1, Line 1
The proposed new database owner is already a user or aliased in the database.
solution proposée au Msg 15110 : pour résoudre l'erreur ci-dessus, supprimez simplement l'utilisateur du nœud de sécurité de la base de données et réessayez
J'espère que ça aide...
Nikhil