Ajouter des identités IP 7 AppPool en tant que connexions SQL Server

234

J'exécute un site Web IIS 7 avec un AppPool de mode Pipeline intégré . L'AppPools ne s'exécute PAS sous NetworkService, etc. identité (par objectif), mais utilise sa propre identité AppPool (IIS AppPool \ MyAppPool).

Il s'agit d'un soi-disant compte de service ou compte virtuel. (un compte utilisateur, qui n'est pas un compte complet ...)

Je voudrais donner à ce compte de service (IIS AppPool \ MyAppPool) les autorisations pour me connecter à mon SQL Server 2008 Express (exécuté en mode d'authentification mixte).

Alors que SQL Server peut ajouter n'importe quel compte d'utilisateur normal, le compte virtuel IIS AppPool \ MyAppPool ne peut pas être ajouté aux ouvertures de session valides (SQL Server dit que le compte est introuvable).

Y a-t-il une astuce, tout ce dont j'ai besoin pour activer le fonctionnement des comptes virtuels? (le processus w3wp.exe s'exécute sous cette identité selon taskmgr, mais je ne peux pas non plus utiliser le compte en sécurité NTFS ...)

Merci de votre aide!

Max
la source

Réponses:

382

Le "IIS APPPOOL \ AppPoolName" fonctionnera, mais comme mentionné précédemment, il ne semble pas être un nom AD valide. Lorsque vous le recherchez dans la boîte de dialogue "Sélectionner un utilisateur ou un groupe", il n'apparaîtra pas (en fait , il le trouvera, mais il pensera que c'est un compte système réel, et il essaiera de le traiter comme tel ... ce qui ne fonctionnera pas, et vous donnera le message d'erreur à ce sujet comme étant introuvable).

Comment je l'ai fait fonctionner:

  1. Dans SQL Server Management Studio, recherchez le dossier Sécurité (le dossier de sécurité au même niveau que les dossiers Bases de données, Objets serveur, etc. ... pas le dossier de sécurité dans chaque base de données individuelle)
  2. Cliquez avec le bouton droit sur les connexions et sélectionnez "Nouvelle connexion"
  3. Dans le champ Nom de connexion, tapez IIS APPPOOL \ YourAppPoolName - ne cliquez pas sur recherche
  4. Remplissez les autres valeurs que vous souhaitez (par exemple, type d'authentification, base de données par défaut, etc.)
  5. Cliquez sur OK

Tant que le nom AppPool existe réellement, la connexion doit maintenant être créée.

dp.
la source
4
Désolé de ressusciter un ancien message, mais quelqu'un sait-il si cela a des implications en termes de sécurité dans un environnement en direct?
dooburt
34
Microsoftian incroyablement utile, mais époustouflant (et insensé).
Evan Nagle
16
Sensationnel. "ne cliquez pas sur la recherche" à l'étape 3 semble faire une différence (?)
Jedidja
16
Cela n'échouera-t-il pas si l'instance de serveur SQL se trouve sur un autre serveur? Par exemple - comment le SQL1savoir sur le local / virtuel IIS AppPool\MyAppPoolsur WEB1?
one.beat.consumer
3
Existe-t-il une solution si votre serveur Web et SQL Server sont sur des machines différentes !! ?? Je peux trouver la connexion, mais je ne peux pas créer la nouvelle connexion SQL. (Si je ne fais pas de vérification des noms ... ça ne marche toujours pas)
Dan B
63
CREATE LOGIN [IIS APPPOOL\MyAppPool] FROM WINDOWS;
CREATE USER MyAppPoolUser FOR LOGIN [IIS APPPOOL\MyAppPool];
Ryan Prechel
la source
1
Bien - alors que la réponse acceptée est correcte - j'ai réussi à me mettre dans une situation où Management Studio ne fonctionnait pas, donc cette solution TSQL brute était ce dont j'avais besoin.
Andrew Patterson
4
Remarque pour les noobs comme moi: assurez-vous d'exécuter cette requête sur la base de données à laquelle vous souhaitez accéder avec le pool d'applications IIS, la deuxième instruction est au niveau de la base de données. Vous devrez peut-être faire de l'utilisateur un membre de certains rôles de base de données et lui accorder des autorisations sur les schémas tels que dbo.
MarioDS
Une fois que j'ai découvert qu'il n'était pas possible d'ajouter des connexions IIS APPPOOL via l'interface graphique SSMS, j'ai exécuté votre script. MERCI! Cela UTILISÉ pour être possible - pas dans SSMS 18! Je suppose que c'est maintenant une "fonctionnalité"
MC9000
6

Si vous traversez des machines, vous devez utiliser le SERVICE RÉSEAU, le SYSTÈME LOCAL, un compte de domaine ou un compte de service géré SQL 2008 R2 (si vous l'avez) (ce qui est ma préférence si vous aviez une telle infrastructure) . Vous ne pouvez pas utiliser un compte qui n'est pas visible pour le domaine Active Directory.

Dave Markle
la source
6

En tant que note latérale, les processus qui utilisent des comptes virtuels (NT Service \ MyService et IIS AppPool \ MyAppPool) sont toujours en cours d'exécution sous le compte "NETWORK SERVICE" comme ce post le suggère http://www.adopenstatic.com/cs/blogs/ken/ archive / 2008/01/29 / 15759.aspx . La seule différence est que ces processus sont membres des groupes "NT Service \ MyService" ou "IIS AppPool \ MyAppPool" (car ce sont en fait des groupes et non des utilisateurs). C'est également la raison pour laquelle les processus s'authentifient sur le réseau comme la machine de la même manière que le compte NETWORK SERVICE.

Le moyen de sécuriser l'accès n'est pas de dépendre que ces comptes ne disposent pas des privilèges NETWORK SERVICE mais d'accorder plus d'autorisations spécifiquement à "NT Service \ MyService" ou "IIS AppPool \ MyAppPool" et de supprimer les autorisations pour "Users" si nécessaire.

Si quelqu'un a des informations plus précises ou contradictoires, veuillez poster.

Steven
la source
2

C'est peut-être ce que vous cherchez ...

http://technet.microsoft.com/en-us/library/cc730708%28WS.10%29.aspx

Je conseillerais également à plus long terme de considérer un utilisateur de domaine à droits limités, ce que vous essayez fonctionne très bien dans un scénario de machine silo, mais vous devrez apporter des modifications si vous passez à une autre machine pour le serveur DB.

keithwarren7
la source
0

Je l'ai compris par essais et erreurs ... la véritable faille dans l'armure était un paramètre peu connu dans IIS dans Configuration Editorle site Web de

Section: system.webServer/security/authentication/windowsAuthentication

From: ApplicationHost.config <locationpath='ServerName/SiteName' />

appelé useAppPoolCredentials(qui est défini Falsepar défaut. Réglez-le sur Trueet la vie redevient belle !!!

entrez la description de l'image ici

Dan B
la source
J'ai suivi le même processus, mais le problème n'a pas été résolu. Vous devez avoir fait autre chose aussi, pouvez-vous partager?
RSB
@RSB - avez-vous suivi toutes les autres étapes? avez-vous configuré les pools d'applications et leur avez-vous accordé des autorisations sur les fichiers où se trouve votre site Web? Avez-vous ajouté le nom du serveur en tant que connexion avec des autorisations sur SQL Server? Avez-vous appliqué le pool d'applications à votre serveur SQL avec des autorisations? Avez-vous modifié IIS pour utiliser WindowsAuthentication? Quelles erreurs obtenez-vous? Cela fonctionne-t-il dans votre environnement de développement et non en production?
Dan B
J'ai configuré appPool, mais comment leur donner l'autorisation d'accéder aux fichiers sur lesquels se trouve le site Web? Comment ajouter le nom du serveur en tant que login avec des autorisations sur le serveur SQL? J'ai également ajouté appPool à SQL Server avec des autorisations. Comment modifier IIS pour utiliser WindowsAuthentocation. Cela fonctionne dans mon environnement de développement lorsque IIS et le serveur SQL sont sur la même machine, mais cela donne error-System.ComponentModel.Win32Exception: erreur d'accès refusé lorsque les serveurs IIS et Sql sont sur une machine différente. Veuillez suggérer.
RSB
si vous me donnez votre e-mail, je vous enverrai un document que j'ai fait sur la façon de tout faire .... il y a trop de mucj pour l'ajouter ici ...
Dan B
@RSB Je vous ai envoyé un e-mail. Bonne chance.
Dan B
0

Dans mon cas, le problème était que j'ai commencé à créer un projet exemple d'alliage MVC à partir de zéro en utilisant l'extension Visual Studio / Episerver et cela a bien fonctionné lorsqu'il était exécuté à l'aide de Visual Studio iis express local. Cependant, par défaut, il pointe la base de données SQL vers LocalDB et lorsque j'ai déployé le site sur IIS local, il a commencé à donner des erreurs certaines des erreurs initiales que j'ai résolues en: 1. ajoutant la liaison d'URL du site local à C: / Windows / System32 / drivers / etc / hosts 2. Ensuite, en modifiant le fichier application.config a trouvé l'emplacement du fichier en cliquant avec le bouton droit sur IIS express dans le coin droit de l'écran lorsque vous exécutez le site à l'aide de Visual studio et en y ajoutant une liaison pour l'URL iis locale. 3. Enfin, je suis resté coincé avec "impossible d'accéder aux erreurs de base de données"

arokanika
la source