Agregue identidades de IIS 7 AppPool como inicios de sesión de SQL Server

234

Estoy ejecutando un sitio web de IIS 7 con un AppPool de modo de canalización integrado . Los AppPools NO se ejecutan bajo la identidad de NetworkService, etc. (por propósito), pero usa su propia Identidad de AppPool (IIS AppPool \ MyAppPool).

Esta es una llamada cuenta de servicio o cuenta virtual. (una cuenta de usuario, que no es una cuenta completa ...)

Me gustaría dar a esta cuenta de servicio (IIS AppPool \ MyAppPool) permisos para conectarse a mi SQL Server 2008 Express (que se ejecuta en modo de autenticación mixto).

Si bien SQL Server puede agregar cualquier cuenta de usuario normal, la cuenta virtual IIS AppPool \ MyAppPool no se puede agregar a los inicios de sesión válidos (SQL Server dice que no se puede encontrar la cuenta).

¿Hay algún truco que necesito para que las cuentas virtuales funcionen? (El proceso w3wp.exe se ejecuta con esta identidad según taskmgr, pero tampoco puedo usar la cuenta en seguridad NTFS ...)

¡Gracias por tu ayuda!

Max
fuente

Respuestas:

382

El "IIS APPPOOL \ AppPoolName" funcionará, pero como se mencionó anteriormente, no parece ser un nombre AD válido, por lo que cuando lo busca en el cuadro de diálogo "Seleccionar usuario o grupo", no aparecerá (en realidad , lo encontrará, pero pensará que es una cuenta real del sistema, e intentará tratarlo como tal ... lo que no funcionará y le dará el mensaje de error acerca de que no se ha encontrado).

Cómo lo puse a trabajar es:

  1. En SQL Server Management Studio, busque la carpeta Seguridad (la carpeta de seguridad en el mismo nivel que las carpetas Bases de datos, Objetos del servidor, etc., no la carpeta de seguridad dentro de cada base de datos individual)
  2. Haga clic derecho en los inicios de sesión y seleccione "Nuevo inicio de sesión"
  3. En el campo Nombre de inicio de sesión, escriba IIS APPPOOL \ YourAppPoolName ; no haga clic en buscar
  4. Rellene cualquier otro valor que desee (es decir, tipo de autenticación, base de datos predeterminada, etc.)
  5. Haga clic en Aceptar

Mientras el nombre de AppPool realmente exista, el inicio de sesión ahora debe crearse.

dp.
fuente
44
Lamento resucitar una publicación anterior, pero ¿alguien sabe si hacer esto tiene implicaciones de seguridad en un entorno en vivo?
dooburt
34
increíblemente útil, pero alucinante (y asquerosamente) Microsoftian.
Evan Nagle
16
Guau. "no haga clic en buscar" en el paso 3 parece hacer la diferencia (?)
Jedidja
16
¿No fallará esto si la instancia del servidor SQL está en otro servidor? Por ejemplo - ¿cómo el SQL1conocimiento acerca de lo local / virtuales IIS AppPool\MyAppPoolen WEB1?
one.beat.consumer
3
¡¿Existe alguna solución si su servidor web y SQL Server están en máquinas diferentes? Puedo encontrar el inicio de sesión, pero no puedo crear el nuevo inicio de sesión SQL. (Si no hago un cheque de nombres ... todavía no funciona)
Dan B
63
CREATE LOGIN [IIS APPPOOL\MyAppPool] FROM WINDOWS;
CREATE USER MyAppPoolUser FOR LOGIN [IIS APPPOOL\MyAppPool];
Ryan Prechel
fuente
1
Agradable, aunque la respuesta aceptada es correcta, logré ponerme en una situación en la que Management Studio no funcionaba, por lo que esta solución TSQL sin procesar era lo que necesitaba.
Andrew Patterson
44
Nota para los novatos como yo: asegúrese de ejecutar esta consulta en la base de datos a la que desea acceder con el grupo de aplicaciones IIS, la segunda declaración está en el nivel de la base de datos. Es posible que deba hacer que el usuario sea miembro de ciertas funciones de la base de datos y otorgarle permisos en los esquemas como dbo.
MarioDS
Una vez que descubrí que no es posible agregar inicios de sesión de APPISOL IIS a través de la GUI de SSMS, ejecuté su script. ¡GRACIAS! Solía ​​ser posible, ¡no en SSMS 18! Supongo que esto es ahora una "característica"
MC9000
6

Si va a través de máquinas, debe estar utilizando SERVICIO DE RED, SISTEMA LOCAL, una cuenta de dominio o una Cuenta de servicio administrado de SQL 2008 R2 (si la tiene) (que es mi preferencia si tuviera dicha infraestructura) . No puede usar una cuenta que no sea visible para el dominio de Active Directory.

Dave Markle
fuente
6

Como nota al margen, los procesos que utilizan cuentas virtuales (NT Service \ MyService e IIS AppPool \ MyAppPool) todavía se ejecutan en la cuenta "NETWORK SERVICE", ya que esta publicación sugiere http://www.adopenstatic.com/cs/blogs/ken/ archivo / 2008/01/29 / 15759.aspx . La única diferencia es que estos procesos son miembros de los grupos "NT Service \ MyService" o "IIS AppPool \ MyAppPool" (ya que en realidad son grupos y no usuarios). Esta es también la razón por la cual los procesos se autentican en la red como la máquina de la misma manera que la cuenta de SERVICIO DE RED.

La forma de asegurar el acceso no es depender de que estas cuentas no tengan privilegios de SERVICIO DE RED, sino otorgar más permisos específicamente a "NT Service \ MyService" o "IIS AppPool \ MyAppPool" y eliminar permisos para "Usuarios" si es necesario.

Si alguien tiene información más precisa o contradictoria, publique.

Steven
fuente
2

Esto puede ser lo que estás buscando ...

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

También recomendaría a largo plazo que considere un usuario de dominio con derechos limitados, lo que está intentando funciona bien en un escenario de máquina de silos, pero tendrá que hacer cambios si se muda a otra máquina para el servidor de base de datos.

keithwarren7
fuente
0

Lo descubrí a través de prueba y error ... la verdadera grieta en la armadura era una configuración poco conocida en IIS en Configuration Editorel sitio web en

Section: system.webServer/security/authentication/windowsAuthentication

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

llamado useAppPoolCredentials(que está configurado Falsede forma predeterminada. ¡Ajústelo a esto Truey la vida se volverá genial otra vez! Espero que esto ahorre dolor para el próximo tipo ...

ingrese la descripción de la imagen aquí

Dan B
fuente
Seguí el mismo proceso, pero el problema no se resolvió. Debes haber hecho otra cosa también, ¿puedes compartir?
RSB
@RSB: ¿siguió todos los demás pasos? ¿configuró los grupos de aplicaciones y les dio permisos para los archivos donde se encuentra su sitio web? ¿Agregó el nombre del servidor como inicio de sesión con permisos para el servidor SQL? ¿Aplicaste el AppPool a tu servidor SQL con permisos? ¿Modificó IIS para usar la autenticación de Windows? ¿Qué errores tienes? ¿Funciona en su entorno de desarrollo y no en la producción?
Dan B
Configuré appPool, pero ¿cómo darles permiso para los archivos donde se encuentra el sitio web? ¿Cómo agregar el nombre del servidor como inicio de sesión con permisos para el servidor SQL? También agregué appPool a SQL Server con permisos. Cómo modificar IIS para usar WindowsAuthentocation. Funciona en mi entorno de desarrollo cuando IIS y el servidor sql están en la misma máquina, pero da error-System.ComponentModel.Win32Exception: Error de acceso denegado cuando IIS y el servidor SQL están en una máquina diferente. Por favor recomiende.
RSB
si me das tu correo electrónico, te enviaré un documento que hice sobre cómo hacerlo todo ... hay demasiado para agregarlo aquí ...
Dan B
@RSB Te envié un correo electrónico. Buena suerte.
Dan B
0

En mi caso, el problema fue que comencé a crear un proyecto de muestra MVC Alloy desde cero usando la extensión Visual Studio / Episerver y funcionó bien cuando se ejecutó usando Visual Studio iis express local. Sin embargo, de manera predeterminada, señala la base de datos sql a LocalDB y cuando implementé el sitio en IIS local, comenzó a dar algunos de los errores iniciales que resolví: 1.añadiendo el enlace de URL del sitio local a C: / Windows / System32 / drivers / etc / hosts 2. Luego, editando la aplicación.config encontró la ubicación del archivo haciendo clic con el botón derecho en IIS express en la esquina inferior derecha de la pantalla al ejecutar el sitio usando Visual studio y agregando enlaces allí para la url iis local. 3. Finalmente me quedé atrapado con "no puedo acceder a los errores de la base de datos"

arokanika
fuente