返回

Login failed for user '<token-identified principal>'. (Microsoft SQL Server, Error: 18456) 报错解决方法

2025-06-03 SQL Server 683 0

登录SQL Server数据库时报错:

TITLE: Connect to Server

------------------------------

Cannot connect to <Server address>.

------------------------------

ADDITIONAL INFORMATION:

Login failed for user '<token-identified principal>'. (Microsoft SQL Server, Error: 18456)

For help, click: https://docs.microsoft.com/sql/relational-databases/errors-events/mssqlserver-18456-database-engine-error

------------------------------

BUTTONS: OK

------------------------------

通常是由于使用 Azure Active Directory (AAD) 身份验证时,登录用户未在目标数据库中正确配置所导致的。

错误原因分析

此错误通常与以下因素有关:

  • AAD 用户未在数据库中创建:即使您是 Azure SQL Server 的 AAD 管理员,如果未在特定数据库中创建对应的用户,仍会导致登录失败。
  • 默认连接到 master 数据库:使用 SSMS 连接时,默认连接的是 master 数据库。如果您的 AAD 用户未在 master 数据库中存在,也会出现此错误。
  • AAD 组成员未正确映射:如果您是通过 AAD 组授予访问权限,确保该组已在数据库中正确创建,并分配了相应的角色。
  • 令牌过期或无效:使用 AAD 身份验证时,令牌的有效性也可能导致此错误。

解决步骤

1. 在数据库中创建 AAD 用户

使用具有足够权限的账户连接到目标数据库,执行以下 T-SQL 命令:

CREATE USER [your_user@domain.com] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [your_user@domain.com];
ALTER ROLE db_datawriter ADD MEMBER [your_user@domain.com];

这将为 AAD 用户创建数据库用户,并授予读取和写入权限。

2. 指定连接的默认数据库

在 SSMS 的“连接到服务器”对话框中,点击“选项”,在“连接属性”选项卡中,将“连接到数据库”设置为目标数据库的名称,而非默认的 master 数据库。

3. 确保 AAD 组已正确配置

如果你是通过 AAD 组授予访问权限,确保该组已在数据库中创建,并分配了相应的角色。例如:

CREATE USER [AAD_Group_Name] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [AAD_Group_Name];

请注意,某些情况下,单独为组成员创建用户可能更为可靠。

4. 检查令牌有效性

确保使用的 AAD 令牌未过期,并且在连接时使用了正确的身份验证方法。

其他建议

  • 使用最新版本的 SSMS:确保使用的是最新版本的 SQL Server Management Studio,以获得对 AAD 身份验证的最佳支持。
  • 查看详细错误信息:在 SSMS 中,查看“错误详细信息”以获取更多关于错误的上下文信息。
  • 参考官方文档:配置 Azure SQL 数据库的 Azure Active Directory 身份验证
顶部