Azure AD user unable to connect to Azure SQL Error: 18456,State:1,Class:14

Azure AD user unable to connect to Azure SQL Error: 18456,State:1,Class:14

背景

用户在 Azure AD 和 Azure SQL 中定义。

SSMS登录测试

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

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

当我尝试使用 SSMS 登录时,我得到

Error: 18456, state 1, class 14.

当我查询[sys].[event_log]它returns

[event_systype]= 4, [event_subtype_desc] = login_failed_for_user.

流程已完成

  1. 我在 Azure AD 中定义了一个用户。 (test.user@company.com)

  2. 在我的 Azure SQL 数据库中,我设置了一个 Active Directory 管理员。

  3. 我在 SSMS test.user@company.com 中创建了一个用户,语法如下:

     CREATE USER [test.user@company.com] FROM EXTERNAL PROVIDER;
    
  4. 我已使用以下语法将用户分配给 db_datareader 角色:

     ALTER ROLE db_datareader ADD MEMBER [test.user@company.com]
    
  5. 问题:当我尝试以 test.user@company.com 身份连接时,连接失败并且出现此错误:

    Login Failed for user test.user@company.com

    错误详情包含:

    Error Number: 18456, State: 1, Class: 14

我试图在 docs.microsoft.com 上找到答案,用谷歌搜索并找到了一些有用的资源,但是 none 这实际上帮助我确定了解决问题的方法.如果有人知道我做错了什么,请参考 "PROCESS FOLLOWED" 我将永远感激 :)

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

这似乎是某种编码问题。在几乎放弃并使用不同的数据库之后,我尝试创建一个新的数据库,但是没有一些特殊字符。突然间,它奏效了。

如果您无法更改数据库的密码,您可以在另一个编辑器中编辑连接字符串,它也可以正常工作(记事本、VS 代码等)。