Error de inicio de sesión para el usuario - Error 18456 - Gravedad 14, Estado 38

23

Mensaje que muestra el Visor de archivos de registro de SQL Server:

Login failed for user [User]
Error: 18456, Severity: 14, State 38

Lo que realmente significa:

Failed to open the explicitly specified database

Mi pregunta:

¿Hay una lista en alguna parte de todas las variaciones de los errores 18456 (error de inicio de sesión), para cada combinación de gravedad y estado, con el texto descriptivo útil?

He tenido un Google pero no puedo encontrar nada más que combinaciones específicas.

Pete Oakey
fuente

Respuestas:

25

Códigos estatales y su significado.

1      'Account is locked out'
2      'User id is not valid'
3-4    'Undocumented'
5      'User id is not valid'
6      'Undocumented'
7      'The login being used is disabled'
8      'Incorrect password'
9      'Invalid password'
10     'Related to a SQL login being bound to Windows domain password policy enforcement.
        See KB925744.'
11-12  'Login valid but server access failed'
16     'Login valid, but not permissioned to use the target database'
18     'Password expired'
27     'Initial database could not be found'
38     'Login valid but database unavailable (or login not permissioned)'

Información más detallada está disponible en el blog de Aaron Bertrand .

Pete Oakey
fuente
@PeteOakly está en el camino correcto aquí para el estado 38. Vea la publicación a continuación sobre una base de datos que falta como una de las razones para el estado 38.
John Dyer
4

Tuve el mismo error con el código de estado 38 causado por un error tipográfico del nombre de la base de datos en la cadena de conexión.

Rob Bowman
fuente
2

Esto es lo que encontré cuando resolví este error: había creado algunas conexiones SQL usando el inicio de sesión de Windows y no el nombre de usuario y la contraseña. No estoy seguro de qué o cómo sucedió, pero sucedió. Los eliminé y luego reconstruí mis modelos de entidad. Usé otra cadena de conexión que sabía que era buena, y todo es alegría. La clave es Persist Security Info = True, que no funcionará en una red o sitio web externo

Bill W.
fuente
2

Tenía 18456 con el estado 38 también. Resultó que la cadena de conexión tenía 'seguridad integrada = verdadero', que no era lo que quería. La cadena de conexión contenía el ID de usuario y la contraseña que se iban a utilizar. Cuando cambié la configuración a falso, todo estaba bien.

Dick Vandenberg
fuente
2

Recibí este error al intentar iniciar sesión en un servidor SQL con varias instancias. La cadena de conexión no nombró una instancia. Una vez que nombré la instancia (SERVERNAME \ INSTANCENAME), logré conectarme al servidor.

Nasser
fuente
2

@Pete Oakly está en el camino correcto con la lista de códigos de estado. Específicamente, este es el código en el que todos estamos interesados:

38 'Inicio de sesión válido pero base de datos no disponible (o inicio de sesión no autorizado)'

Mi problema comenzó en un registro de error de C #:

Excepción | PublicaciónExcepción | 000161 | 29/10/2018 | 11: 06: 40.210 | 16284 | InnerException | No se puede abrir la base de datos "InterestingDataBaseName" solicitada por el inicio de sesión. El inicio de sesión falló. Error de inicio de sesión para el usuario 'CORP \ anyuser'.

Mis ojos se centraron en la parte "Error de inicio de sesión" . Mi usuario era sa para este servidor de base de datos, ¿cómo podría fallar el inicio de sesión?

Me topé con esta publicación por un trío de programadores que tenía la respuesta: https://justaprogrammer.net/2012/12/09/a-misleading-sql-error-message-error-18456-severity-14-state-38 / /

No es el error de inicio de sesión per se, es la base de datos a la que estoy intentando acceder. ¡No existe!

¡Bingo! Había cambiado el nombre de la base de datos por otros motivos y no actualicé el archivo de configuración. Se corrigió el nombre de la base de datos y las cosas vuelven a funcionar como un encanto.

John Dyer
fuente
1

En nuestro caso en el Administrador de configuración de SQL Server | Configuración de red del servidor SQL | TCP / IP | IP | El puerto TCP NO se configuró.

Sin nosotros podríamos establecer una conexión ODBC e incluso usar una conexión remota de SQL Management Studio e iniciar sesión con el usuario. Sin embargo, cada vez que accedimos a la url de nuestra aplicación Tomcat, lanzó una conexión jdbc, luego detectamos en el registro de SQL Server el error: Error de inicio de sesión para el usuario 'xxxx': razón No se pudo abrir la base de datos explícitamente definida, error 18456, Gravedad 14 , Estado 38

Aquí un resumen de la cadena de conexión jdbc

"jdbc:sqlserver://10.10.10.10:1433;databaseName=zzzzzzz" username="yyyyyy" password="xxxxxx" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" defaultAutoCommit="true"/>
<Resource name="jdbc/application" 

Esto quiere decir que también en la configuración de red de SQL Server | Protocolos para <nombre de instancia> | Las canalizaciones con nombre deben estar HABILITADAS y el nombre de la tubería \\.\pipe\MSSQL$<instance name>\sql\query debe configurarse correctamente.

Sti
fuente
1

Bueno, este es un error relacionado con el permiso de la base de datos. Estoy agregando mi solución a esta pregunta porque es muy importante comprender el papel de DBA. Entonces, estas son mis sugerencias:

  • Ir al administrador del servidor
  • Seleccione Herramientas y luego Administración de computadoras
  • Verifique los usuarios y grupos locales
  • Verifique el nombre del administrador con la descripción 'Cuenta integrada para administrar la computadora / dominio'

Ahora, inicie sesión con ese nombre de usuario y podrá otorgar acceso al usuario. Para hacerlo:

Vaya a Seguridad , haga clic derecho en Inicios de sesión y seleccione Nuevo inicio de sesión

En la ventana de inicio de sesión, puede escribir el nombre de usuario o buscarlo. Seleccione el usuario de la lista y haga clic en Aceptar y en Aceptar nuevamente.

En la misma ventana de inicio de sesión, haga clic en Roles del servidor y otorgue el acceso al usuario seleccionado, como: sysadmin, serveradmin, decreator, etc. Haga clic en OK .

Si desea otorgar acceso a una base de datos individual, vaya a Asignación de usuarios y proporcione el acceso según sus requisitos.

Verifique el estado de la base de datos: Permiso: Conceder inicio de sesión: Habilitado

Haga clic en Aceptar

Priyanka
fuente
2
Esto podría ser una respuesta bastante buena si se pudiera poner el foco en la posibilidad de una falta de SQL Server de sesión a la base de datos del usuario relación o la posibilidad de que el Acceso al servidor SQL 's base de datos predeterminada ya no está disponible. Actualmente, su respuesta es solo una recomendación generalizada sobre cómo crear una cuenta. No estoy seguro de cómo la primera parte de su respuesta ayudaría a resolver el problema de OP. ¿Podrías explicar esa parte?
John aka hot2use