form - IIS7, SQL 2008 y ASP.NET MVC security
sms asp net mvc (15)
Bueno ... cambiar la propiedad ApplicationPoolIdentity y configurarla en el servicio de red parece haber solucionado mis problemas. No estoy seguro de si esa es la forma "correcta" de hacer las cosas o no (como en, no estoy seguro de si esa es la manera recomendada de hacer cosas en IIS7 o no), pero al menos parece estar funcionando y me ha superado este cuelgue por ahora. Gracias.
Tengo una aplicación ASP.NET MVC en la que estoy trabajando. Lo he estado desarrollando en Windows Server 2003 con IIS6 y SQL 2008 Express, y todo funcionaba muy bien. Hace poco decidí probar la versión beta de Windows 7, así que ahora estoy usando IIS7 y me he encontrado con un problema de conectividad con mi base de datos que parece que no puedo resolver.
Puedo ejecutar / depurar la aplicación muy bien, pero cada vez que intento acceder a una página que necesita acceder a la base de datos, aparece el siguiente error:
"No se puede abrir la base de datos" MyDatabaseName "solicitada por el inicio de sesión. Error de inicio de sesión. Error de inicio de sesión del usuario ''IIS APPPOOL / MyApplicationName''."
Obviamente, tengo una configuración de configuración de seguridad incorrecta, pero parece que no puedo encontrar ninguna buena documentación sobre cómo configurarla correctamente. Intenté dar permisos de SERVICIO DE RED en la base de datos, pero eso no pareció funcionar. ¿Alguien sabe lo que tengo que hacer para otorgar permisos "IIS APPPOOL / MyApplicationName" a esta base de datos? ¿Me estoy perdiendo algo obvio?
Gracias...
Este error generalmente significa que el usuario que su sitio está ejecutando como (o más al punto del grupo de aplicaciones), no tiene permisos para usar el DB. Puede verificar en IIS en qué usuario se está ejecutando el grupo y darles permisos, o en su lugar cambiar su cadena de conexión SQL para no usar autenticación de confianza y proporcionar las credenciales de un usuario que tiene permiso en la cadena de conexión.
Editar: si hace clic con el botón derecho en la sección Identidad del grupo y va a Propiedades, debería aparecer un cuadro que le permite elegir entre 3 cuentas de sistema integradas o especificar su propia cuenta. O conceda permiso a una de las cuentas integradas para el DB, o use una cuenta que tenga permiso. O déjalo tal como está y cambia la cadena de conexión.
Estoy familiarizado con la idea de otorgar permisos al usuario con el que se ejecuta la aplicación ... mi problema es que en IIS7, el "usuario" parece ser virtual o algo así. Antes de cambiar la propiedad "Identidad" de las propiedades del Grupo de aplicaciones al SERVICIO DE RED, se configuró como "IdentidadPozo de aplicación", y el error que recibía era que "APLICACIÓN IIS / Nombre de aplicación MyA" no tenía acceso a la base de datos. Cuando intenté agregar el usuario "IIS APPPOOL / MyApplicationName" a la base de datos, no parecía existir ... no es que pudiera encontrarlo de todos modos.
Por lo tanto, mi problema final no es comprender o no poder encontrar una buena documentación sobre cómo funciona el modelo de seguridad de IIS7. Cuando creé la aplicación, parecía crear una AppPool con el mismo nombre solo para esta aplicación. No sé exactamente qué cambios necesito hacer para dar a la aplicación y / o al usuario que ejecuta bajo privilegios a la base de datos, teniendo en cuenta el hecho de que el usuario que ejecuta la AppPool no parece existir en realidad .
Como mencioné, cambiar la Identidad de la AppPool a NETWORK SERVICE parece haber funcionado por el momento, pero estoy tratando de averiguar cuál es la mejor práctica para este tipo de cosas en IIS7. Gracias.
deja los problemas difíciles para alguien más -
crea un usuario sql y usa SQL Auth. :RE
Si observa la descripción del campo, indica que la cuenta recomendada es la que se ejecuta en la cuenta "Servicios de red". No estoy seguro de por qué en Win7 se establece de forma predeterminada en la configuración de ApplicationPoolIdentity.
Aquí hay un artículo que explica por qué AppPoolIdentities está en uso; básicamente, se trata de seguridad mejorada: http://learn.iis.net/page.aspx/624/application-pool-identities/
(Ese artículo afirma que puedo usar estas cuentas virtuales como cualquier cuenta normal pero en mi Windows Server 2008 que parece no ser posible; agregar, por ejemplo, IIS AppPool / DefaultAppPool solo produce un error: "El siguiente objeto no es de un dominio enumerado en el cuadro de diálogo Seleccionar ubicación, y por lo tanto no es válido. ")
Tengo exactamente el mismo problema. Estoy ejecutando Windows 7 RC. Cuando intento usar un archivo .mdf (ubicado en App_Data), ahora hay una manera de hacer que funcione. Intenté cambiar la identidad de la AppPool para LocalSystem, pero simplemente no funcionará.
Si uso una base de datos "estándar", funcionará si utilizo LocalSystem, pero no funcionará con la famosa ''IIS APPPOOL / DefaultAppPool''.
Me resulta un poco molesto no encontrar ninguna información al respecto, parece que el usuario ''IIS APPPOOL / DefaultAppPool'' es totalmente inútil si está utilizando una base de datos de cualquier tipo ...
Lo tengo en ejecución, pero también estoy un poco frustrado por no entender el modelo de seguridad, como lo dice ryexley.
El error significa que la aplicación web no tiene acceso a su base de datos. En Windows 7 / IIS 7, de forma predeterminada cada grupo de aplicaciones tiene su propio usuario. Parece que la idea es mejorar la seguridad restringiendo lo que esa aplicación web puede hacer (en caso de que se vea comprometida y controlada desde el exterior). Puede cambiar el usuario con el que se ejecuta el grupo de aplicaciones, pero eso será contrario a su propio propósito. Una mejor forma parece darle al usuario del conjunto los permisos necesarios (y no un poco más).
En SQL Management Studio, conéctese al servidor al que desea que se conecte su aplicación web (probado con SQL Server 2008). Ir
Security -> Log ins
clic derecho, Nuevo inicio de sesión. En el formulario que aparece, deje todo como predeterminado excepto nombre de usuario, donde debe escribir el nombre de usuario que la aplicación web está tratando de usar, en este caso ''IIS APPPOOL / MyApplicationName''. Tenga en cuenta que la función de búsqueda de ese cuadro de diálogo no puede encontrar o verificar como válido ese usuario, pero sin embargo, funciona.
Todavía en el SQL Management Studio conectado al servidor vaya a
Databases -> *YOUR-DATABASE* -> Security -> Users
clic derecho y Nuevo Usuario. No estoy seguro de si el campo de nombre de usuario tiene algún efecto, simplemente configuré la última parte del nombre de usuario, como MyApplicationName. Luego, establecí el nombre de inicio de sesión en IIS APPPOOL / MyApplicationName. Puede hacer clic en el botón ... y usar el control y buscar, esta vez funciona. Si no haces el paso anterior, el usuario no estará presente aquí. Luego, dele los permisos que desee a este usuario, como db_datareader.
Y eso es todo, has dado permiso. Si tu problema fue la falta de permisos, entonces debería resolverse (o al menos, lo resolví de esa manera).
Tengo una cantidad total de 2 horas de experiencia con IIS y unas tres semanas con SQL Server y menos de dos meses con las tecnologías de Microsoft, así que tome mi consejo con un grano de sal, puedo estar totalmente equivocado . (Si otra persona puede confirmar que estos son los pasos correctos, puede quitar la última advertencia).
Si sigues el consejo del Sr. Fernández, conseguirás que todo funcione. Esta es la nueva forma de otorgar menos privilegios a un sitio.
Así que no hagas lo más fácil y menos seguro (SERVICIO DE RED). Hacer lo correcto. Desplazarse hacia arriba. ;)
Si NO está utilizando ActiveDirectory, entonces ignore todas las otras soluciones anteriores. La confusión proviene de la nueva configuración predeterminada de ApplicationPoolIdentity en IIS 7.5 (MS sigue cambiando los mecanismos de identidad)
- Abra SQL Management Studio , conéctese a su máquina local como administrador.
- Expanda la rama de Seguridad .
- Haga clic derecho en Logins y seleccione New Login
- En el campo Nombre de inicio de sesión , escriba " IIS APPPOOL / MyApplicationName ". NO haga clic en el botón de búsqueda. El perfil de usuario no existe realmente en la máquina local, se crea dinámicamente a pedido.
Uso de Trusted Connection en Windows Modo autenticado: SO: Windows 7 32 bit IIS 7, Sql Server 2008 R2 Express Cadena de conexión: cn.open "Provider = SQLOLEDB.1; Integrated Security = SSPI; Persist Security Info = False; Initial Catalog = test ; Fuente de datos = mycomputername / sqlexpress; " (si el nombre de instancia es sqlexpress o cualquier nombre de instancia que haya utilizado)
Si no puede conectar el servidor sql usando la conexión autenticada en el modo de Windows al servidor sql 2008.
NT AUTHORITY / IUSR Account puede no tener permiso en el servidor sql para autorizar la conexión con la base de datos.
Conecte el servidor Sql usando el modo de autenticación de Windows. Expandir Nodo de seguridad. Seleccione NT AUTHORITY / IUSR (SI NO HAY LUEGO AÑADIR NUEVO INGRESO PARA ESO) Haga clic en "User Mapping" en Seleccionar una página en la ventana de propiedades de Log-in. Seleccione la base de datos que está intentando conectar. Seleccione los siguientes permisos de "Membresía de la función de base de datos para: ......" 1. db_datareader ''esto permite abrir la conexión 2. db_datawriter'' esto permite recuperar registros de datos de la tabla de datos
El primer paso es verificar en qué cuenta se está ejecutando su sitio web. Crea una página aspx simple con:
<%@ Page Language="C#" %>
<% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name); %>
Si está utilizando la autenticación de Windows, la cuenta de WindowsIdentity deberá tener un inicio de sesión en su SQL Server. En Seguridad -> Inicios de sesión -> Inicio de sesión nuevo, querrá agregar el nombre que haya sido mostrado por WindowsIdentity y asegúrese de que esté seleccionada la autenticación de Windows.
Si alguna vez mueve su base de datos a una máquina separada, tendrá que crear una cuenta de dominio y usar suplantación en su web.config. Google <identity impersonate="true">
para más información.
sí, el método de identidad del grupo de aplicaciones no funciona como dicen (no en IIS7 de todos modos) se supone que debe hacerlo. Creo que hay hackers en MS que complican esta seguridad a propósito, por lo que tomas el camino de menor resistencia y dejas tu sistema menos seguro (para que puedan piratearlo más tarde). - Es una broma, pero en realidad, su modelo de seguridad es pura locura, no hay instrucciones sencillas (paso a paso) en ninguna parte de MSDN - ¡nada, zip!
Erick Falsken tiene razón, sin embargo, le faltan las asignaciones de usuario. Así que haga clic derecho en la nueva IIS APPPOOL / DefaultAppPool, haga clic en Propiedades y luego marque las casillas para: 1) bases de datos master y yourdatabase 2) db_owner and public
Enfrenté el mismo problema entre (SQL2008 que está instalado en el servidor independiente Win-server2003) y (IIS6 con ASP.NET3.5 que están instalados en el servidor autónomo Win-server2003).
Donde, IIS intenta acceder a SQL2008 usando algún usuario en el dominio "dominio / nombre de usuario".
Eliminé la siguiente opción de connectionstring, y todo funciona bien ahora.
Integrated Security=True;