Je souhaite utiliser la sécurité intégrée avec mon application interne qui est entièrement sur un domaine. Malheureusement, je n'ai jamais réussi à faire fonctionner cela correctement. Je voudrais attribuer à un groupe Exchange (Active Directory) entier un rôle dans SQL Server pour l'accès en lecture/écriture à certaines tables. De cette façon, je n'aurais pas à créer un opérateur à chaque embauche ou à supprimer un opérateur à chaque licenciement. Est-ce possible? Quelles mesures devrais-je prendre pour ce faire?
Exemple de script
USE master;
GO
CREATE LOGIN [MYDOMAIN\APPLICATION SUPPORT] FROM WINDOWS;
GO
USE mydb;
GO
CREATE USER [MYDOMAIN\APPLICATION SUPPORT] FROM LOGIN [MYDOMAIN\APPLICATION SUPPORT];
GO
CREATE ROLE rSupport;
GO
EXEC sp_addrolemember 'rSupport', 'MYDOMAIN\APPLICATION SUPPORT';
GO
GRANT SELECT, INSERT,UPDATE, etc ON Mytable TO rSupport;
GO
sp_addrolemember
est déconseillé à partir de SQL Server 2012, où ALTER ROLE
doit être utilisé à la place.
De marc_s réponse "Comment ajouter un groupe d'utilisateurs Active Directory en tant que connexion dans SQL Server" :
Dans SQL Server Management Studio, accédez à Object Explorer > (your server) > Security > Logins
et cliquez avec le bouton droit sur New Login
:
Ensuite, dans la boîte de dialogue qui apparaît, choisissez les types d'objets que vous souhaitez voir (Groups
est désactivé par défaut - vérifiez-le!) Et choisissez l'emplacement où vous souhaitez rechercher vos objets (par exemple, utilisez Entire Directory
), puis recherchez votre groupe AD.
Vous disposez désormais d'une connexion SQL Server standard, tout comme lorsque vous en créez une pour un seul utilisateur AD. Donnez à cette nouvelle connexion les autorisations sur les bases de données dont elle a besoin, et c'est parti!
Tout membre de ce groupe AD peut désormais se connecter à SQL Server et utiliser votre base de données.
L'octroi des autorisations dans SQL Server à un groupe AD est relativement simple. Cela peut être fait via T-SQL ou Management Studio.
Par exemple, si vous avez un groupe AD appelé MYDOMAIN\APPLICATION SUPPORT
, vous devez créer la connexion au niveau du serveur, puis utiliser des mappages vers des bases de données individuelles pour accorder des autorisations légèrement plus précises, comme un lecteur de données.
Idéalement, tous les accès aux applications doivent se faire par le biais de procédures stockées *, de sorte que seules les autorisations sur ces procédures stockées dans cette base de données sont requises.
* Du point de vue de la sécurité, pour permettre à un utilisateur particulier de voir des données spécifiques, vous pouvez créer une procédure et accorder à l'utilisateur exécuter l'autorisation sur cette procédure, et rien d'autre. Permettre à l'utilisateur d'interroger directement signifierait donner sélectionner l'autorisation sur toutes les tables impliquées. Il est également plus facile de travailler avec des procédures et de déboguer.
Les procédures stockées résument l'accès à la table et limitent l'accès. Pour les types DBA, c'est comme "laissez-moi voir toutes vos variables d'instance: je ne veux pas utiliser de méthodes, de getters ou de setters".
Si l'utilisateur est membre d'un DOMAIN\SecurityGroup disposant des droits Sysadmin en SQL, celui-ci sera utilisé lors de l'accès aux bases de données. Sinon, vous devez regarder quels DOMAIN\SecurityGroup (s) ont donné l'autorité dans chaque base de données. Si l'utilisateur est membre de 2 groupes de sécurité, SecGroupA ayant l'autorité de sélection et SecGroupB ayant l'autorité d'insertion, l'utilisateur peut sélectionner et insérer.