web-dev-qa-db-fra.com

Syntaxe GRANT pour le domaine\utilisateur

J'essaie de donner à un utilisateur Active Directory l'accès à une seule table spécifique. Je veux qu'ils puissent insérer, mettre à jour, supprimer, etc., mais uniquement pour cette table. Je connais cette commande:

GRANT Insert, Select on Tablename to user

Mais je n'arrive pas à comprendre comment faire fonctionner "domaine\utilisateur" en termes de syntaxe. J'ai essayé:

GRANT Insert, Select on Tablename to domain\user

Mais je reçois:

Msg 102, Niveau 15, Etat 1
Syntaxe incorrecte près de '\'.

21
bvankampen

En supposant que vous ayez créé un utilisateur dans cette base de données associé à la connexion AD, par exemple.

CREATE LOGIN [domain\user] FROM WINDOWS;
GO
USE your_database;
GO
CREATE USER [domain\user] FROM LOGIN [domain\user];
GO

Ensuite, vous devez simplement suivre la même syntaxe. Étant donné que \ n'est pas un caractère standard pour un identifiant, vous devez échapper le nom avec [square brackets]:

GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Tablename TO [domain\user];
31
Aaron Bertrand

Il est recommandé de créer un rôle et d'ajouter des utilisateurs à ce rôle. Puis accordez des autorisations à ce rôle. 

USE database_name
GO

--1)create role 
CREATE ROLE role_name
GO

--2 create user
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'domain\user')
BEGIN
    CREATE USER [domain\user] FOR LOGIN [domain\user]
END;
GO

-- 3 Add user to the role
ALTER ROLE [role_name] ADD MEMBER [domain\user]
GO

--4 Grant permissions to the role
GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Tablename TO [role_name];
0
rjose