Azure SQL Database "Error al iniciar sesión para el usuario" en la aplicación, pero funciona bien en SSMS

14

Quería probar la función de usuarios de la base de datos contenida en Azure SQL Database V12, pero tengo un problema de autenticación que me parece extraño.

Creé una base de datos llamada Classifier. Agregué mi IP a las reglas del firewall para poder conectarme al servidor Azure db desde SSMS en mi estación de trabajo. Una vez que pude conectarme a través de SSMS para la administración, intenté agregar un usuario con una contraseña a la base de datos, de esta manera:

CREATE USER classifier WITH PASSWORD='thepassword'

También agregué este usuario a los roles de escritor y lector de datos:

exec sp_addrolemember 'db_datawriter', 'classifier'
exec sp_addrolemember 'db_datareader', 'classifier'

Después de esto, puedo conectarme a la base de datos con estas credenciales de SSMS:

ingrese la descripción de la imagen aquí

Pero aquí es donde las cosas salen mal: he probado varios conjuros de cadenas de conexión diferentes y parece que no puedo conectarme a una aplicación web en la que estoy trabajando. No funcionó en el entorno de Azure, por lo que estoy ejecutando en localhost con una cadena de conexión a la base de datos de Azure, y simplemente no se conecta. Aquí está la cadena de conexión que estoy usando en este momento:

<add name="Classifier" connectionString="Data Source=xxxxxxx.database.secure.windows.net;Initial Catalog=Classifier;User ID=classifier;Password=xxxxxxxxxxxxx;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient"/>

He intentado restablecer la contraseña (a través de SSMS) para el usuario y luego actualizar la cadena de conexión; También verifiqué dos veces la contraseña copiándola directamente de esta cadena de conexión y en el cuadro de diálogo de conexión en SSMS para asegurarme de que no tenía un error tipográfico allí.

Permití la auditoría en el servidor db de Azure con la esperanza de obtener algunos detalles de por qué está fallando, pero todo lo que obtengo es esto:

Err 18456, Nivel 14, Estado 1, Sever SQL Azure, Línea 1 Error de inicio de sesión para el usuario 'clasificador'

Y aquí es donde estoy atrapado. La mayor parte de lo que he podido encontrar a través de documentación o blogs indica que lo que hay que hacer es mirar los registros de SQL Server para ver cuál es el estado de error real que indicaría más estrechamente la naturaleza de la falla, pero desde entonces Estoy tratando con Azure, no hay forma de hacerlo (que yo sepa).

¿Qué podría hacer que la aplicación falle donde SSMS (y LinqPad y Visual Studio Server Explorer, por cierto) tiene éxito?

Ben Collins
fuente

Respuestas:

15

Descubrimos que con las bases de datos / usuarios contenidos debe especificar:

GRANT CONNECT TO [YOUR_USER]

De lo contrario, CONNECTparece ser revocado por defecto. Una vez que hicimos el cambio anterior, pudimos acceder a la base de datos.

HowardvanRooijen
fuente
Teníamos una cuenta existente que funcionaba y luego dejamos de funcionar. Tuve que otorgarle conexión nuevamente.
Shane Courtrille
En Azure, recibo un error, Cannot find the user 'myuser', because it does not exist or you do not have permission.aunque el nombre de usuario existe en Seguridad> Inicios de sesión, pero no en MyDatabse> Seguridad> Usuarios. Lo intenté CREATE USER [myuser] FOR LOGIN [myuser] WITH DEFAULT_SCHEMA=[mydb] GOpero obtuve un errorThe login already has an account under a different user name.
Korayem
Tuve un problema similar. En el entorno de desarrollo, todo funciona conectando a SQL Azure, pero una vez publicado, arroja ese error. Sin embargo, no puedo ejecutar el comando o crear el usuario, ¿alguien intenta algo diferente?
Ricker Silva
@dezso Estoy enfrentando un problema similar. Mi código ADO.NET y EF (DBContext) funciona bien en la máquina local (no lo he probado en Azure) Pero el código EF implementado usando IdentityDBConext falla. No estoy seguro de qué está mal o qué características de IdentityDBConext requieren acceso al servidor. Aquí está mi pregunta original stackoverflow.com/questions/40260720/…
Hiren Desai
5

Al cambiar nuestra API para conectarse a una base de datos de Azure a través de un nuevo usuario contenido, tuvimos que cambiar nuestra cadena de conexión para incluir:

Persist Security Info=True;

Si bien no entiendo por qué fue necesario este cambio, quería publicar aquí en caso de que ayude a alguien más en el futuro.

Originalmente vinimos a probar esto a partir de esta pregunta .

sfm
fuente
2

Mi problema era diferente, pero relacionado: estaba tratando de conectarme a una base de datos SQL de Azure mediante SQL Server Management Studio (SSMS) con un usuario contenido . Recibí el mensaje "Error de inicio de sesión para el usuario" en SSMS.

Solución: en las opciones de conexión SSMS para la ventana de consulta, configuré "Conectar a la base de datos" con el nombre de la base de datos a la que intentaba conectarme.

Explicación: en retrospectiva, la razón era obvia: los usuarios contenidos solo pueden conectarse a las bases de datos en las que fueron creados.

Vince Horst
fuente
¿Te importaría explicar el voto negativo?
Vince Horst
1
No era yo, pero probablemente porque tu respuesta es algo opuesta a la pregunta. Sin embargo, sigue siendo útil, y gracias al mal diseño de ese diálogo SSMS, ¡es un error fácil de cometer!
Simon_Weaver
0

Esto puede ocurrir si ejecuta un comando Powershell que contiene una cadena de conexión cuando su contraseña contiene $. Puede evitar esto encerrando la cadena de conexión con comillas simples, o no almacenando su contraseña en la cadena de conexión en primer lugar ;-)

P.ej. Me encontré con esto con Scaffold-DbContextcomando

https://github.com/aspnet/EntityFrameworkCore/issues/6624

Simon_Weaver
fuente