web-dev-qa-db-fra.com

Ajouter IIS 7 Identités AppPool en tant que connexions SQL Server

J'utilise un site Web IIS 7 avec un AppPool de Mode Pipeline intégré . Les AppPools NE s'exécutent PAS sous NetworkService, etc. (IIS AppPool\MyAppPool).

C'est ce qu'on appelle un compte de service ou un compte virtuel ..__ (un compte d'utilisateur, qui n'est pas un compte complet ...)

J'aimerais donner à ce compte de service (IIS AppPool\MyAppPool) les autorisations nécessaires pour se connecter à mon serveur SQL Server 2008 Express (s'exécutant 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 indique que le compte est introuvable).

Existe-t-il une astuce, tout ce dont j'ai besoin pour que je puisse activer le fonctionnement des comptes virtuels?

Merci de votre aide!

207
Max

"IIS APPPOOL\AppPoolName" fonctionnera, mais comme mentionné précédemment, il ne semble pas être un nom AD valide. Par conséquent, lorsque vous le recherchez dans la boîte de dialogue "Sélectionner un utilisateur ou un groupe", il n'apparaîtra pas (en réalité , il le trouvera, mais il pensera qu’il s’agit d’un compte système réel et essaiera de le traiter comme tel ... ce qui ne fonctionnera pas et vous indiquera le message d’erreur concernant son absence).

Voici comment je l'ai fait fonctionner: 

  1. Dans SQL Server Management Studio, recherchez le dossier Security (le dossier de sécurité au même niveau que les dossiers Databases, Server Objects, etc., et non le dossier de sécurité dans chaque base de données).
  2. Faites un clic droit sur les connexions et sélectionnez "Nouvelle connexion"
  3. Dans le champ Nom de connexion, tapez IIS APPPOOL\YourAppPoolName - ne cliquez pas sur Rechercher.
  4. Entrez les autres valeurs de votre choix (type d’authentification, base de données par défaut, etc.)
  5. Cliquez sur OK

Tant que le nom AppPool existe réellement, l'identifiant doit maintenant être créé.

343
dp.
CREATE LOGIN [IIS APPPOOL\MyAppPool] FROM WINDOWS;
CREATE USER MyAppPoolUser FOR LOGIN [IIS APPPOOL\MyAppPool];
54
Ryan Prechel

En parallèle, 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 le suggère ce message 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 "Service NT\MyService" ou "IIS AppPool\MyAppPool" (car il s’agit en réalité de groupes et d'utilisateurs non). C’est aussi la raison pour laquelle les processus s’authentifient sur le réseau en tant que machine de la même manière que le compte NETWORK SERVICE.

Pour sécuriser l’accès, vous ne devez pas vous fier à ce que les comptes ne disposent pas des privilèges NETWORK SERVICE, mais accorder plus d’autorisations spécifiquement pour "NT Service\MyService" ou "IIS AppPool\MyAppPool" et supprimer les autorisations de "Utilisateurs" si nécessaire.

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

6
Steven

Si vous rencontrez des ordinateurs, vous devez utiliser soit NETWORK SERVICE, LOCAL SYSTEM, un compte de domaine ou un compte de service géré SQL 2008 R2 (si vous en avez un) (ce que je préfère si vous disposiez d'une telle infrastructure). . Vous ne pouvez pas utiliser un compte qui n'est pas visible pour le domaine Active Directory.

5
Dave Markle

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 de faire fonctionne bien dans un scénario de machine silo, mais vous devrez apporter des modifications si vous passez à une autre machine pour le serveur de base de données.

2
keithwarren7

Je l'ai compris par essais et erreurs ... la vraie faille dans l'armure était un paramètre peu connu dans IIS dans le Configuration Editor du site Web dans 

Section: system.webServer/security/authentication/windowsAuthentication 

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

appelé useAppPoolCredentials (qui est défini par défaut sur False. Réglez-le sur True et la vie redeviendra grande !!! J'espère que cela évitera des douleurs au prochain gars .... 

enter image description here

0
Dan B

Dans mon cas, le problème était que j'ai commencé à créer un exemple de projet MVC Alloy à l'aide de l'extension Visual Studio/Episerver et que cela fonctionnait correctement lorsqu'il était exécuté à l'aide de Visual Studio iis express. Cependant, par défaut, il pointe la base de données SQL vers LocalDB et, lorsque j'ai déployé le site en local IIS, il a commencé à donner aux erreurs certaines des erreurs initiales que j'ai résolues en: 1.ajout de la liaison d'URL du site local vers C:/Windows/System32/drivers/etc/hosts 2. Ensuite, en éditant application.config, localisez l’emplacement du fichier en cliquant avec le bouton droit de la souris sur IIS dans le coin inférieur droit de l’écran lors de l’exécution du site à l’aide de Visual studio et en y ajoutant la liaison pour les URL locales iis . 3. Enfin, je me suis retrouvé coincé avec "impossible d'accéder aux erreurs de base de données" pour lequel j'ai créé une nouvelle base de données vierge dans Sql Express et modifié la chaîne de connexion dans Web Config pour pointer vers ma nouvelle base de données, puis dans la console du gestionnaire de packages (à l'aide de Visual Studio) exécutée avec Episerver DB. des commandes telles que - 1. initialize-epidatabase 2. update-epidatabase 3. Convert-EPiDatabaseToUtc

0
arokanika

Regardez: http://www.iis.net/learn/manage/configuring-security/application-pool-identities

USE master
GO
sp_grantlogin 'IIS APPPOOL\<AppPoolName>'

USE <yourdb>
GO
sp_grantdbaccess 'IIS APPPOOL\<AppPoolName>', '<AppPoolName>'
sp_addrolemember 'aspnet_Membership_FullAccess', '<AppPoolName>'
sp_addrolemember 'aspnet_Roles_FullAccess', '<AppPoolName>'
0
Ricardo Yanez