在 azure sql 上连接到数据库的问题

Posted

技术标签:

【中文标题】在 azure sql 上连接到数据库的问题【英文标题】:Problems connecting to database on azure sql 【发布时间】:2021-12-08 03:33:21 【问题描述】:

我正在尝试在 Entity Framework Core 上执行更新数据库,这给了我这个错误。

Microsoft.Data.SqlClient.SqlException (0x80131904): Login failed for user 'hxxxxxxxo@hxxxxxxxogmail.onmicrosoft.com'.
   at Microsoft.Data.ProviderBase.DbConnectionPool.CheckPoolBlockingPeriod(Exception e)
   at Microsoft.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at Microsoft.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   at Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   at Microsoft.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at Microsoft.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at Microsoft.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at Microsoft.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry, SqlConnectionOverrides overrides)
   at Microsoft.Data.SqlClient.SqlConnection.Open(SqlConnectionOverrides overrides)
   at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerConnection.OpenDbConnection(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternal(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.<>c__DisplayClass18_0.<Exists>b__0(DateTime giveUp)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.<>c__DisplayClass12_0`2.<Execute>b__0(DbContext c, TState s)
   at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, TState state, Func`2 operation, Func`2 verifySucceeded)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, TState state, Func`2 operation)
   at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.Exists(Boolean retryOnNotExists)
   at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.Exists()
   at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
ClientConnectionId:429fba14-5656-4560-9cb8-efb35ab0dc34
Error Number:18456,State:1,Class:14
Login failed for user 'hxxxxxxxo@hxxxxxxxogmail.onmicrosoft.com'.

我可以用这个密码连接SSMS并连接到数据库,我有其他API可以连接到它,我不知道会发生什么。

services.AddDbContext<AAAADbContext>(options => 
  options.UseSqlServer(Configuration.GetConnectionString("DefaultConnectionString")));

连接字符串

"DefaultConnectionString": "Server=tcp:xxxx-xxxxxxxx.database.windows.net,1433;Initial Catalog=xxxxxxxxxxxDb;Persist Security Info=False;User ID= ;Password= ;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Authentication=Active Directory Password"

【问题讨论】:

我希望这不是您在此处暴露的 真实 onmicrosoft 帐户地址。 我认为这通常是错误的用户名和密码组合错误。所以要么用户名不正确,要么密码不正确(或两者都有;) @nikneem 或用户未在 azure 数据库中正确创建,很难判断/猜测 当您在 SSMS 中连接时,是否会弹出浏览器进行身份验证? ActiveDirectoryPassword 仅适用于没有 2FA 或不需要联合身份验证重定向的帐户。 【参考方案1】:

更多信息MSSQLSERVER_18456:

当连接尝试因涉及错误密码或用户名的身份验证失败而被拒绝时,将向客户端返回类似于以下内容的消息:“用户 '' 登录失败。(Microsoft SQL Server , 错误: 18456)”。

关于状态 1 的更多信息:

错误信息不可用。此状态通常意味着您无权接收错误详细信息。有关详细信息,请联系您的 SQL Server 管理员。

似乎这一切都归结为用户名/密码错误,或者用户/数据库配置错误。

编辑:

您是否考虑过使用托管身份连接到您的数据库?

应用服务在 Azure 中提供高度可扩展、自我修补的 Web 托管服务。它还为您的应用程序提供托管标识,这是一个用于保护对 Azure SQL Database 和其他 Azure 服务的访问的统包解决方案。应用服务中的托管标识通过消除应用中的机密(例如连接字符串中的凭据)使应用更加安全。在本教程中,您将向您在以下任一教程中构建的示例 Web 应用添加托管标识:

教程:使用 Azure SQL 数据库在 Azure 中构建 ASP.NET 应用 教程:在 Azure 应用服务中构建 ASP.NET Core 和 Azure SQL 数据库应用

来源:Tutorial: Secure Azure SQL Database connection from App Service using a managed identity

【讨论】:

我用其他密码尝试了其他用户,删除数据库,重新创建数据库。我在这两天左右。我的想法用完了 将此类信息添加到您的问题中可能会有所帮助,而不仅仅是说明您遇到了错误。

以上是关于在 azure sql 上连接到数据库的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在网络计算机上连接到 SQL Server 2017(即监听本地端口)

在 C++ 中使用 Qt 在 Linux 上连接到 Oracle DB

使用 PHP 在运行 Windows Server 2012 的物理服务器上连接到 SQL Server 2012

Python 3.7 在 MAC 上连接到 HSQLDB

Pro*Fortran 可以在 windows 上连接到 Oracle 10g 吗?

在 Termux Android 上连接到 MariaDB 服务器