You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用VS2022执行update-database时EF Core迁移失败:登录错误18456

排查Azure SQL登录失败(Error 18456)的解决方案
  • 确认连接字符串准确性
    逐字核对第二个微服务的连接字符串:

    • 服务器名称是否为Azure SQL格式(xxx.database.windows.net),是否和第一个成功的连接字符串一致
    • 数据库名称是否拼写正确,避免混淆第一个微服务的库名
    • 若密码含特殊字符(如&、@),确保在appsettings.json中用双引号包裹整个连接字符串,或对特殊字符做JSON转义(例如&转义为\u0026)
  • 检查Azure SQL服务器防火墙规则

    • 登录Azure门户进入目标SQL服务器,查看「防火墙和虚拟网络」设置,确认当前本地IP在允许列表内(可点击「添加客户端IP」快速更新)
    • 动态IP环境下,重启机器后IP可能变更,需重新添加至防火墙规则
  • 验证数据库级用户权限
    虽然服务器管理员账户默认拥有全库权限,但EF Core创建新库时可能未自动映射用户:

    1. 用Azure Data Studio连接Azure SQL服务器
    2. 进入目标数据库(若add-migration已生成脚本但库未创建,需先手动建立空库)
    3. 执行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直接测试连接第二个数据库,验证网络和登录信息是否正常

内容的提问来源于stack exchange,提问作者Abhishek Jadhav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:52:19