使用指定用户连接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 - 务必在「连接到数据库」选项中指定具体目标数据库名(不能留空选默认)
- 服务器名称必须填写完整Azure SQL地址(如
- 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
相关产品推荐
相关产品推荐

