【问题标题】:Can't connect to Azure SQL by guested user via Azure AD auth来宾用户无法通过 Azure AD auth 连接到 Azure SQL
【发布时间】:2017-10-09 15:36:56
【问题描述】:

我在 Azure SQL 中创建了 db 并配置了 Azure 身份验证,因此我可以使用我的 Azure AD 帐户通过 SQL Management Studio 连接到 db。然后我从其他 Azure AD 添加了用户,当我执行 CREATE USER [user@mytenant1.onmicrosoft.com] FROM EXTERNAL PROVIDER 时出现错误

找不到主体“user@mytenant1.onmicrosoft.com”或不支持此主体类型。

此用户 user@mytenant1.onmicrosoft.com 在我的 Azure AD 中作为受邀来宾用户。

我做错了什么?

【问题讨论】:

    标签: azure azure-sql-database azure-active-directory


    【解决方案1】:

    所以我终于成功了。原因是受邀使用必须接受邀请。由于我在没有真实电子邮件的情况下邀请了用户,因此我(或某些人)不得不以某种方式“单击”邀请链接。我是通过 PowerShell 完成的。

    需要执行以下步骤才能授予来宾用户读取权限:

    1. 安装 Azure 广告模块。我是通过命令Install-Module AzureAd 做到的
    2. 连接到 AAD,您将通过 Connect-AzureAD 邀请用户
    3. 通过命令 New-AzureADMSInvitation -InvitedUserEmailAddress "<user_email>" -InviteRedirectUrl "https://portal.azure.com" -SendInvitationMessage $false -InvitedUserType "Guest" 邀请用户加入 AAD。其中 邀请用户的电子邮件。此命令的结果将是具有属性的对象,其中之一 - 邀请链接。 注意:先在记事本中复制并格式化,然后在浏览器中复制并接受邀请,或将其发送给拥有此帐户的人。
    4. 现在要将用户添加到 DB,我们必须执行 T-SQL CREATE USER [<user principal>] FROM EXTERNAL PROVIDER。诀窍是 受邀用户具有“EXT”格式。要获得正确的主体,只需执行 Get-AzureADUser - 此命令列出具有真实用户主体​​名称的用户。

    例子:

    真实邮箱:user1@dep1.myorg.com

    主体名称:user1_dep1.myorg.com#EXT#@targetazuread.onmicrosoft.com

    复制对应的principal并运行CREATE USER...

    1. 就我而言,最后一步是授予新用户读取权限,因此我调用了EXEC sp_addrolemember 'db_datareader', '<user principal>'

      因此,我可以使用受邀用户连接到数据库。我也知道在哪里可以通过Get-AzureADUser powershell 命令(Azure AD 模块)查看真实用户主体​​。

    【讨论】:

      【解决方案2】:

      你不能直接这样做,你必须使用一个组来代替。 在主 AAD 中创建一个组(即测试)并在那里添加来宾用户。 接下来在 SQL DB 中创建一个属于 AAD 组的用户(测试)并使用您的来宾用户连接到该数据库

      【讨论】:

      • 你试过了吗?对你起作用吗 ?我刚试过,它也不起作用。我创建了组external_db,邀请来宾用户并将其添加到该组,使用CREATE USER [external_db] FROM EXTERNAL PROVIDER将组添加到db,尝试与来宾用户连接并获得Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. (Microsoft SQL Server, Error: 18456)。然后我在该组中添加了本机用户并将其连接到数据库。总结一下:Azure AD auth 不适用于外部\guested 用户。
      【解决方案3】:

      您需要按如下方式向数据库创建用户:

      CREATE USER [your.user_example.com#EXT#@<yourAzureSubscriptionPrefix>.onmicrosoft.com] FROM EXTERNAL PROVIDER
      

      您还可以在 Azure Active Directory 中创建一个组,将外部用户添加到该组,然后将该组添加到数据库。

      CREATE USER [GroupFromAzureActiveDirectory] FROM EXTERNAL PROVIDER
      

      希望这会有所帮助。

      【讨论】:

      • 谢谢,但我之前尝试过这种奇怪的语法并得到了同样的错误。我也没有找到任何具有这种语法的官方微软页面,因此在我看来它就像一个“黑客”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多