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

使用指定用户连接Azure SQL Database失败(Error 18456)求助

解决Azure SQL Database新建用户登录失败(Error:18456)的问题

问题背景

已通过sysadmin账号完成服务器级登录名、数据库级用户的创建,用户已分配db_owner角色,且执行SELECT name, is_disabled FROM sys.sql_logins;确认用户未禁用,但通过SSMS或pyodbc连接时,始终报错:Login failed for user '_engineeruser'. (Microsoft SQL Server, Error: 18456)


排查与解决步骤

1. 验证登录名与数据库用户的映射关系

用sysadmin账号连接目标数据库,执行以下查询确认映射是否正确:

SELECT 
    u.name AS [数据库用户],
    l.name AS [服务器登录名]
FROM sys.database_users u
LEFT JOIN sys.server_principals l ON u.sid = l.sid
WHERE u.name = '_engineeruser';

如果服务器登录名列返回NULL,说明映射未建立,需重新创建用户:

USE [你的目标数据库名];
CREATE USER [_engineeruser] FOR LOGIN [_engineeruser];
EXEC sp_addrolemember 'db_owner', '_engineeruser';

2. 检查Azure SQL服务器防火墙规则

  • 登录Azure门户,找到目标SQL服务器
  • 进入「防火墙和虚拟网络」设置
  • 确认当前客户端IP已加入允许列表;若为Azure内部服务访问,可临时启用「允许Azure服务和资源访问此服务器」(生产环境需限制范围)

3. 修正连接配置

  • SSMS连接:
    • 服务器名称必须填写完整Azure SQL地址(如xxx.database.windows.net)
    • 身份验证选择「SQL Server身份验证」,登录名填服务器级登录名_engineeruser
    • 务必在「连接到数据库」选项中指定具体目标数据库名(不能留空选默认)
  • pyodbc连接字符串示例:
import pyodbc
conn_str = (
    "DRIVER={ODBC Driver 17 for SQL Server};"
    "SERVER=xxx.database.windows.net;"
    "DATABASE=你的目标数据库名;"
    "UID=_engineeruser;"
    "PWD=你的用户密码;"
)
conn = pyodbc.connect(conn_str)

4. 重置用户密码

密码错误或不符合Azure复杂度要求(至少8字符,含大小写、数字、特殊字符)会导致登录失败,执行重置:

ALTER LOGIN [_engineeruser] WITH PASSWORD = '新的强密码';

5. 查看详细错误日志

启用登录审核后,读取错误日志获取失败的具体原因:

ALTER DATABASE [你的目标数据库名] SET LOG ON;
EXEC sp_readerrorlog 0, 1, 'Login failed';

常见详细原因包括:密码过期、用户无数据库访问权限、目标数据库不存在等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:31:35