Sql server Azure AD用户无法连接到Azure SQL错误:18456,状态:1,类别:14

Sql server Azure AD用户无法连接到Azure SQL错误:18456,状态:1,类别:14,sql-server,authentication,azure-active-directory,azure-sql-database,Sql Server,Authentication,Azure Active Directory,Azure Sql Database,背景 用户在Azure AD和Azure SQL中定义 测试。user@company.com已在Azure AD中定义并处于活动状态。我可以使用此用户在Azure门户中登录 我在Azure SQL数据库中创建了一个包含“来自外部提供者”子句的数据库用户,并将该用户添加到db\u datareader系统角色。命令提交时没有错误。我比较了Azure AD中的资产ID和数据库中的SID,它们匹配。我尝试了不同的用户 我可以作为分配给SQL Server的AD用户登录分配给“Active Dire

背景

用户在Azure AD和Azure SQL中定义

  • 测试。user@company.com
    已在Azure AD中定义并处于活动状态。我可以使用此用户在Azure门户中登录
  • 我在Azure SQL数据库中创建了一个包含“来自外部提供者”子句的数据库用户,并将该用户添加到
    db\u datareader
    系统角色。命令提交时没有错误。我比较了Azure AD中的资产ID和数据库中的SID,它们匹配。我尝试了不同的用户
  • 我可以作为分配给SQL Server的AD用户登录分配给“Active Directory管理员”
  • SQL Server用户也可以毫无问题地登录
SSMS中的登录测试

我已将默认数据库设置为我尝试登录的特定数据库(选项连接到数据库)

我尝试了不同的身份验证模式:

  • “Azure Active Directory–具有MFA的通用”和
  • “Azure Active Directory–密码”
当我尝试使用SSMS登录时,我得到

错误:18456,州1,14级

当我查询
[sys].[event\u log]
时,它返回

[事件\u系统类型]=4,[事件\u子类型\u描述]=用户登录\u失败\u

遵循流程

  • 我在Azure AD测试中定义了一个用户。user@company.com)

  • 在我的Azure SQL数据库中,我设置了Active Directory管理员

  • 我已经在SSMS测试中创建了一个用户。user@company.com使用以下语法:

     CREATE USER [test.user@company.com] FROM EXTERNAL PROVIDER;
    
     ALTER ROLE db_datareader ADD MEMBER [test.user@company.com]
    
  • 我已使用以下语法将用户分配到
    db_datareader
    角色:

     CREATE USER [test.user@company.com] FROM EXTERNAL PROVIDER;
    
     ALTER ROLE db_datareader ADD MEMBER [test.user@company.com]
    
  • 问题:当我尝试连接为
    test时。user@company.com
    ,连接失败,出现以下错误:

    用户测试登录失败。user@company.com

    错误的详细信息包括:

    错误号:18456,状态:1,类别:14

  • 我试图在docs.microsoft.com上找到答案,用谷歌搜索了一下,找到了一些有用的资源,但没有一个能真正帮助我找到解决问题的方法。如果有人知道我做错了什么,请参考“遵循流程”,我将永远感激:)


    我通过一个变通办法解决了这个问题,建立了一个新的数据库。 我没有找到问题的原因,但它一定与数据库设置“DTU”-“基本”或一些我不记得就设法设置的设置有关。
    无论如何,当我用“DTU”-“标准”配置设置一个新数据库时,我的过程就起作用了。

    我通过一个变通方法解决了这个问题,设置了一个新的数据库。 我没有找到问题的原因,但它一定与数据库设置“DTU”-“基本”或一些我不记得就设法设置的设置有关。
    无论如何,当我使用“DTU”-“标准”配置设置新数据库时,我的过程可以正常工作。

    是否授予连接到测试。user@company.com;工作?@JosephXu谢谢,但是没有,它没有工作。@AtleRøen是你创建了用户
    测试的。user@company.com
    使用AD管理员帐户?@LeonYue是的,我从Azure CLI(可能是云shell)中删除了,请确保您可以为该帐户生成访问令牌。例如
    az登录
    然后
    az帐户获取访问令牌——资源'https://database.windows.net/“
    。如果可以,则将该AccessToken与System.Data.SqlClient.SqlConnection一起使用,这是SSMS将尝试的。user@company.com;工作?@JosephXu谢谢,但是没有,它没有工作。@AtleRøen是你创建了用户
    测试的。user@company.com
    使用AD管理员帐户?@LeonYue是的,我从Azure CLI(可能是云shell)中删除了,请确保您可以为该帐户生成访问令牌。例如
    az登录
    然后
    az帐户获取访问令牌——资源'https://database.windows.net/“
    。如果可以,则将该AccessToken与System.Data.SqlClient.SqlConnection一起使用,这是SSMS将尝试的。