2012-06-24 12 views
6

He creado un sitio web ASP.NET MVC 2 que estoy hospedando con Rackspace Cloud Server usando IIS 7.0.¿Cómo configurar SQL Server/IIS 7.0 para permitir que el sitio web ASP.NET MVC acceda a la base de datos?

Cuando intento probar el sitio web en localhost con IIS 7.0 en el servidor, aparece una página de error. Esto viene de los registros de SQL (que estoy utilizando SQL Web Edition):

Error: 18456, Severity: 14, State: 11 
Login failed for user 'IIS APPPOOL\DefaultAppPool'. Reason: Token-based server access validation failed with an infrastructure error. Check for previous errors. [CLIENT: <local machine>] 

Mi sitio web funciona bien en mi PC de casa por lo que el tema es algo que ver con la conexión con la base de datos.

Después de haber investigado el código del mensaje de error, sugiere que tengo un inicio de sesión DB válido, pero el acceso al servidor ha fallado. Hice un montón de lectura en torno a esto en diversos foros y aquí es lo que he intentado, ninguno de los cuales han resuelto el problema (incl stackoverflow/ServerFault.):

  1. Configurar nuevo inicio de sesión utilizando autenticación de SQL Server. Creé un nuevo inicio de sesión en SQL y otorgué derechos de acceso correctos a mi base de datos. Utilicé la siguiente cadena de conexión en la configuración web:

    Fuente de datos = myServer; Catálogo inicial = myDB; Id. De usuario = miNombre de usuario; Contraseña = myPassword;

  2. Crear nuevo usuario como IIS APPPOOL\DefaultAppPool. Creé un nuevo inicio de sesión en SQL con los derechos de acceso correctos y la autenticación de Windows utilizada. Cadena de conexión de la siguiente manera:

    Servidor = myServer; Base de datos = myDataBase; Trusted_Connection = True;

  3. Utilice el inicio de sesión de red existente NT AUTHORITY\NETWORK SERVICE. Asigné este usuario a mi base de datos con los derechos de acceso correctos. Cadena de conexión de la siguiente manera:

    Servidor = myServer; Base de datos = myDataBase; Trusted_Connection = True;

Estas parecen ser las principales opciones cuando leo el material en línea. Por último, aquí como en algunas otras cosas que pueden ser útiles:

  • Ajuste SQL para Ejecutar como administrador no ha solucionado el problema
  • Apagar UAC no ayudó
  • Mi grupo de aplicaciones está utilizando ApplicationPoolIdentity (mejor por razones de seguridad)

En resumen, mi sitio web no se iniciará porque no puede obtener un objeto del DB, por lo que arroja un error. El problema es que los derechos de acceso al servidor no están configurados correctamente. No puedo determinar qué configuración de inicio de sesión/conexión de conexión/derechos de acceso de dominio necesito.

Esto me ha molestado por 3 semanas. ¿Puedes dedicar 5 minutos a ayudarme, por favor?

+0

¿Puedes publicar tu cadena de conexión actual? Supongo que se está conectando con Integrated Security, por lo tanto, AppPoolIdentity se usa para conectarse a SQL Server. Además, mencione si sus servidores web y sql se están ejecutando en una configuración de Active Directory. –

+0

Usando: 'Source = SetsOfSix; Catálogo inicial = SetsOfSix; Seguridad integrada = SSPI; '. Déjame ver pregunta sobre la configuración del directorio activo ... –

+0

En IIS 'Servicios de dominio de Active Directory' no está instalado. ¿Cómo verificaría si los servidores web y sql se están ejecutando en la configuración de Active Directoty? –

Respuesta

8

Como sus servidores (web y SQL) no son parte de un dominio, no puede usar la Autenticación de Windows (Seguridad integrada) para conectarse a SQL Server.

En IIS, al tener Integrated Security=SSPI en una cadena de conexión, el usuario real utilizado para conectarse a SQL Server es la identidad del grupo de aplicaciones.

Debería ir con su opción 1, lo que significa Configurar nuevo inicio de sesión utilizando la Autenticación de SQL Server.

Por lo tanto, los pasos serían:

  1. Crea tu usuario myUsername SQL Server.
  2. En el cuadro de diálogo de propiedades del usuario, vaya a la sección Securables y asegúrese de que Public esté marcado.
  3. A continuación, vaya a la sección User mapping (en el lado izquierdo). Busque su (s) base (s) de datos en la lista y compruébelo. Abajo, en la lista Database role membership, asegúrese de marcar public, db_datareader y db_datawriter.
  4. Ahora otorgue sus derechos de usuario para ejecutar procedimientos almacenados. Como sa, en Management Studio, ejecute:

    GRANT EXECUTE TO myUserName;

  5. Ya ha terminado.

En cuanto a la seguridad, posteriormente se pueden refinar los derechos de myUserName a no ser capaz, por ejemplo, para eliminar tablas u otros objetos.

En su aplicación se debe utilizar ahora la cadena de conexión en el punto 1.

Si tiene cualquier otro problema, emvía el mensaje de error.

+0

Gracias. El bit que me faltaba era (a) configurar 'GRANT EXECUTE' y (b) en mi LINQ-to-SQL. Tenía una referencia de cadena de conexión incorrecta. Reparar el problema resuelto. Tu ayuda me hizo buscar en el lugar correcto. –

Cuestiones relacionadas