Pregunta

Extraje un archivo ASPNETDB.MDF de un servidor para un sitio ASP usando la autenticación de formularios en mi máquina local. Agregué un nuevo usuario al archivo de la base de datos usando la herramienta de configuración del sitio web ASP.NET. Subí el archivo MDF al servidor y ahora recibo la siguiente excepción cada vez que intento iniciar sesión como cualquier usuario:

No se puede abrir la base de datos de usuario por defecto. Error de inicio de sesión.
Error de inicio de sesión para el usuario 'AUTORIDAD NT \ SERVICIO DE RED'

He estado buscando en Google y leído todas las otras soluciones a este problema aquí también en SO y no he encontrado nada que funcione.

El servidor tiene SQL Server 2008 y eso es lo que estoy usando en mi máquina local con VS 2008 Professional.

Mi cadena de conexión es (saltos de línea agregados para legibilidad):

<add name="ASPNETDBConnectionString1" 
     connectionString="Data Source=.\SQLEXPRESS;
                       AttachDbFilename=|DataDirectory|\ASPNETDB.MDF;
                       Integrated Security=True;User Instance=True" 
     providerName="System.Data.SqlClient"
/>

Soy nuevo en SQL Server, así que estoy bastante seguro de haber estropeado algo en alguna parte.

Cualquier ayuda es muy apreciada.

¿Fue útil?

Solución

Todas las preguntas sobre quién o qué o por qué con respecto a la configuración a un lado ...

Su problema puede deducirse de la cadena de conexión. Eso funcionará localmente contra sql express pero no contra sql propiamente dicho en el servidor.

La primera pista es que solo SqlExpress habilita las instancias de usuario. En SQL propiamente dicho, deberá adjuntar el mdf.

Si esa cadena de conexión funciona en su máquina mientras está en VS 2008, tiene instalado SQL EXPRESS. Si esa cadena de conexión funciona en el servidor, entonces el servidor tiene instalado SQL EXPRESS.

Si el servidor NO tiene Sql Express instalado y configurado para permitir instancias de usuario, como espero que no, esa cadena de conexión dará como resultado la excepción de falla de inicio de sesión que está experimentando.

También me pregunto acerca de su copia a / desde. Por lo general, se denegará el acceso a un mdf activo, incluso para copiar.

Confirme las versiones SQL tanto del lado del cliente como del servidor e intente encontrar una copia anterior de ambos archivos web.config para comparar las cadenas de conexión.

Otros consejos

Creo que su problema es que no está haciendo un seguimiento de la diferencia entre un inicio de sesión de la base de datos y un usuario de la base de datos. Un inicio de sesión le da acceso a SQL Server ( en general). Un usuario de la base de datos es un inicio de sesión al que se le ha dado acceso a una base de datos específica. Cuando copia archivos de un lado a otro como lo ha hecho, puede invalidar el identificador subyacente para una cuenta de inicio de sesión (especialmente las cuentas de Windows).

Sugeriría que use una cuenta SQL para iniciar sesión en su servidor SQL (en lugar de una cuenta de Windows) y coloque las credenciales en el archivo web.config. Simplemente descubrí que esto es mucho más fácil de configurar, usar y cambiar que un inicio de sesión de cuenta de Windows. Una vez que haya configurado su inicio de sesión, asegúrese de que también tenga acceso de usuario a la base de datos en el servidor que desea usar. Usted puede aún encontrarse con problemas de transferencia (aunque son menos probables), pero solucionarlos es bastante más fácil.

Nota importante: otros no están de acuerdo, argumentando que las cuentas de Windows son más seguras, por lo que es posible que desee informarse sobre este tema.

Su descripción del problema está incompleta o no es coherente con el error. Deberá proporcionar un poco más de información para una mejor respuesta, pero aquí está mi respuesta preliminar.

El error indica que su aplicación está utilizando autenticación integrada a SQL. Por lo tanto, sería útil ver la cadena de conexión. Es probable que diga 'SSPI' en alguna parte. Lo que esto significa es que el usuario que el contenedor de la aplicación se está ejecutando como (SERVICIO DE RED) está intentando conectarse a la base de datos, y no puede porque no tiene el permiso para hacerlo.

Entonces, o cambió la cadena de conexión como parte de lo que hizo, o NETWORK SERVICE era anteriormente un usuario de la base de datos (no es una buena idea, creo).

Hay otras posibles configuraciones relacionadas con la seguridad en juego en su web.config. Su aplicación parece utilizar la autenticación de formularios. Si IIS está configurado para permitir el acceso anónimo, y su web.config está configurado para suplantar, entonces eso también podría hacer que el SERVICIO DE RED intente conectarse a SQL.

¿Cómo se supone que se conecta la aplicación? ¿Tiene una cuenta de servicio (una cuenta de usuario único) que todos los usuarios que se autentican a través de la autenticación de formularios deben usar para las operaciones de la base de datos? Si es así, debe cambiar la cadena de conexión de la base de datos para que contenga un usuario y una contraseña.

Para solucionar esto, debe verificar su cadena de conexión, cualquier configuración relacionada con la autenticación de formularios en web.config y la configuración de seguridad en IIS. Creo que nada de esto tiene que ver con el hecho de que haya agregado un usuario.

Editar: Entonces está utilizando Seguridad Integrada, como sospechaba. Esto no funcionará con Forms Auth, porque mientras un usuario se autentica en su aplicación con su ID de usuario, su aplicación se autentica en la base de datos con autenticación integrada, es decir, SERVICIO DE RED. Necesitas una cuenta de servicio de base de datos, imo, y no sé cómo puede haber funcionado antes si no cambiaste la cadena de conexión.

¿Puedes intentar cambiar esto? Grupos de aplicaciones- > Configuración avanzada - > Modelo de proceso - > Identidad ?

Obtuve el mismo error y arreglo al cambiar el modelo de proceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top