使用VS2022执行update-database时EF Core迁移失败:登录错误18456
排查Azure SQL登录失败(Error 18456)的解决方案
确认连接字符串准确性
逐字核对第二个微服务的连接字符串:- 服务器名称是否为Azure SQL格式(
xxx.database.windows.net),是否和第一个成功的连接字符串一致 - 数据库名称是否拼写正确,避免混淆第一个微服务的库名
- 若密码含特殊字符(如
&、@),确保在appsettings.json中用双引号包裹整个连接字符串,或对特殊字符做JSON转义(例如&转义为\u0026)
- 服务器名称是否为Azure SQL格式(
检查Azure SQL服务器防火墙规则
- 登录Azure门户进入目标SQL服务器,查看「防火墙和虚拟网络」设置,确认当前本地IP在允许列表内(可点击「添加客户端IP」快速更新)
- 动态IP环境下,重启机器后IP可能变更,需重新添加至防火墙规则
验证数据库级用户权限
虽然服务器管理员账户默认拥有全库权限,但EF Core创建新库时可能未自动映射用户:- 用Azure Data Studio连接Azure SQL服务器
- 进入目标数据库(若
add-migration已生成脚本但库未创建,需先手动建立空库) - 执行SQL语句授权:
USE [你的第二个数据库名]; CREATE USER [admin-napsterj] FOR LOGIN [admin-napsterj]; ALTER ROLE db_owner ADD MEMBER [admin-napsterj];
排查DbContext配置错误
确认第二个微服务的DbContext是否绑定了正确的连接字符串:
检查Program.cs中的注入代码:builder.Services.AddDbContext<SecondDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("SecondServiceConnection")));确保
"SecondServiceConnection"在appsettings.json中对应第二个数据库的配置,而非第一个微服务的连接字符串。检查登录账户是否被锁定
多次失败登录可能触发账户锁定,执行SQL查询确认状态:SELECT name, is_disabled, login_time FROM sys.sql_logins WHERE name = 'admin-napsterj';若
is_disabled值为1,执行解锁语句:ALTER LOGIN [admin-napsterj] ENABLE;排除网络环境干扰
- 若使用VPN或代理,尝试关闭后重新执行
update-database,这类工具可能导致IP无法匹配Azure防火墙规则 - 用Azure Data Studio直接测试连接第二个数据库,验证网络和登录信息是否正常
- 若使用VPN或代理,尝试关闭后重新执行
内容的提问来源于stack exchange,提问作者Abhishek Jadhav
相关产品推荐
相关产品推荐

