La connexion à SQL Server .NET à l'aide d'un Compte de Service d'Annuaire Active
J'ai Winforms application écrite en C# qui se connecte à une Base de données SQL Server. Lorsque je me connecte à SQL Server j'ai créer une chaîne de connexion qui peut contenir soit SQL Server détails de connexion ou de l'utilisation de l'Authentification Windows, dans ce cas, je omettre le nom d'utilisateur et mot de passe et utiliser le
"Integrated Security=SSPI"
paramètre dans la chaîne de connexion.
Maintenant, un utilisateur a demandé qu'ils ont la possibilité de se connecter à MS SQL Server à l'aide d'un Compte de Service d'Annuaire Active, par opposition à un Réseau de compte d'Utilisateur (qui est ce que je suppose que la connexion à l'aide de l'Authentification Windows va passer à travers.
Je ne suis pas familier avec les comptes de service ou Active Directory et je me demandais si quelqu'un pouvait me diriger dans la bonne direction. Est-il un moyen de construire une chaîne de connexion qui permet à mon application à se connecter à la base de données à l'aide d'un Compte de Service d'Annuaire Active?
OriginalL'auteur Russell | 2011-11-30
Vous devez vous connecter pour publier un commentaire.
Chaînes de connexion n'ont rien à voir avec cela.
Ce que cela signifie, c'est que l'utilisateur a demandé l'exécution de votre application en tant que compte de service, pas tant que l'utilisateur actuellement connecté. Un moyen facile de le faire est tout simplement de lancer l'application en vertu de l'
runas /netonly
:De cette façon, votre application fonctionne comme un compte de service de domaine sur le réseau et se connecter à SQL Server à l'aide de la
domain\serviceaccount
informations d'identification. Ce serait à même de satisfaire votre exigence du client, au moins sur une faible surface coup d'oeil.Si la solution de l'utilisation de runas n'est pas satisfaisante (client peut legitimatly se plaindre qu'il exige de l'utilisateur qu'démarrer l'application à savoir le domaine\serviceaccount mot de passe), alors les choses deviennent un peu plus compliquées. La bonne façon de le faire est o de diviser votre application en deux, une présentation de l'INTERFACE utilisateur de la couche .exe de l'application qui s'exécute sous le enregistré dans les informations d'identification utilisateur et la couche logique métier composant qui s'exécute comme un service, sous le nom de domaine\serviceaccount informations d'identification. Les deux composants communiquent à l'aide de votre CIP de choix (généralement WCF). Comme vous avez probablement réaliser, ce besoin s majeur réécriture de votre application.
Certains peuvent vous suggérons d'utiliser votre application à usurper l'identité de domaine\serviceaccount avant d'ouvrir les connexions à la base de données. Je déconseille vivement qu'en raison de la serviceaccount stockage de mot de passe/retrieveal mess. Depuis l'application sera nécessaire de connaître l'serviceaccount mot de passe afin de l'imiter, l'utilisateur connecté sur l'exécution de l'application, soit connaître ce mot de passe ou de pouvoir trouver facilement (il y a aucun moyen pour l'empêcher formulaire de trouver si l'application peut trouver). Depuis le domainservice mot de passe est accessible à l'utilisateur connecté de toute façon, il peut utiliser le
runas /netonly
solution. Et enfin expliquer pourquoi larunas
solution est juste un peu de fumée et de miroirs solution: la seule raison pour laquelle votre client peut avait demandé ce qu'il demande, c'est qu'il veut séparer les privilèges des utilisateurs connectés depuis les privilèges de l'application (c'est à dire. ne donnez pas de SQL serveur A accès à tous les employés). Depuis lerunas
solution (ainsi que l'usurpation de l'identité dans l'app) exiger de l'utilisateur connecté à connaître le mot de passe du service, de la séparation des privilèges n'a pas vraiment de se produire depuis hte de l'utilisateur connecté peut utiliser à tout moment, il souhaite que la passe du compte de service et d'élever ses privilèges pour accéder à la base de données SQL Server. Donc la seule solution vaut la peine de parler de la séparation de l'application en deux parties.OriginalL'auteur Remus Rusanu
Chaîne de connexion "Integrated Security=SSPI" va passer le courant d'identification de l'utilisateur de SQL Server. Toutefois, si l'utilisateur a besoin d'utiliser d'autres Utilisateurs Active Directory sans modifier la chaîne de connexion, utilisez Exécuter en tant Qu' des fonctionnalités proposées par le Système d'Exploitation. Si vous utilisez windows 7, appuyez sur la touche Maj et cliquez Droit sur l'exe et choisissez Exécuter en tant qu'utilisateur différent.
C'est juste un hack pas une bonne solution.
OriginalL'auteur Amit Rai Sharma
En règle générale, un compte active directory est le même que pour un compte d'utilisateur réseau. Il y a des exceptions, telles que les groupes de travail et non des réseaux de publicité, mais pour la plupart des situations, ils seront les mêmes.
Si vos utilisateurs sont sur un non-AD réseau, alors que vos utilisateurs se demandant quelque chose d'assez compliqué (cross-domaine de la confiance entre les différents types de réseau).
Toutefois, si vos utilisateurs sont en cours d'exécution dans un réseau de publicité, mais vous voulez vous connecter en tant qu'utilisateur différent du leur interactif de l'utilisateur (par exemple, ils sont connectés à leur machine MJames, mais que vous voulez enregistrer dans la base de données FJones), alors vous avez deux choix:
1) Dites-leur qu'ils doivent se connecter à leur ordinateur que l'utilisateur demandé.
2) inviter l'utilisateur à entrer leurs identifiants de connexion et que l'exécution d'une ANNONCE de connexion pour valider leurs informations d'identification, puis emprunter l'identité de cet utilisateur connecté à l'aide de l' .Net framework. Ce lien MSDN, bien que pour ASP.Net a la base des informations que vous avez besoin, en particulier la section sur
Impersonating by Using LogonUser
.Dans l'un des cas ci-dessus, votre
Integrated Security=SSPI
chaîne de commande argument se connecter à SQL Server en tant qu'utilisateur AD que votre utilisateur est actuellement connecté, soit directement sur la machine ou par le biais de l'emprunt d'identité.OriginalL'auteur competent_tech
"Integrated Security=SSPI" allons transmettre les informations d'identification de l'utilisateur actuellement connecté. Un compte de service est juste un autre utilisateur, même si vous allez effectivement avoir à préciser, dans la chaîne de connexion. Je suppose que, par défaut, vous voulez juste passer le long de l'utilisateur connecté à l'aide de "Integrated Security=SSPI", mais offrent la possibilité de spécifier des informations d'identification pour vous connecter avec, dans ce cas, vous devriez utiliser une chaîne de connexion qui spécifie le nom d'utilisateur et mot de passe.
OriginalL'auteur w.brian
C'est la chaîne de connexion, j'ai essayé et cela a fonctionné pour moi. Oui -
Integrated Security=SSPI
est nécessaire.OriginalL'auteur Shwe Khine
vous pouvez vous connecter avec un utilisateur spécifique à une base de données en définissant l'Identité de pool d'applications pour un utilisateur spécifique. Bien sûr, ce même utilisateur doit avoir tous les accès nécessaires à l'exécution de cette piscine.
OriginalL'auteur Allie