【问题标题】:Authenticating in Azure SQL Database using Azure Active Directory B2C使用 Azure Active Directory B2C 在 Azure SQL 数据库中进行身份验证
【发布时间】:2016-07-08 07:04:15
【问题描述】:

我在通过 Azure Active Directory 对 Azure SQL 数据库进行身份验证时遇到问题。

我几乎按照我在这里找到的说明进行操作: [https://azure.microsoft.com/en-us/documentation/articles/sql-database-aad-authentication/][使用 Azure Active Directory 身份验证连接 SQL 数据库]

我能够使用 localhost 和 OpenID 对 Azure Active Directory 进行身份验证。我可以注册、登录和注销。我使用“fake@genericcompany.com”(实际电子邮件已更改)作为用户,我可以通过登录获得授权码和 id_token。我还添加了“fake@genericcompany.com”作为我的 SQL 数据库的 Active Directory 管理员,并将我计算机的 IP 地址添加到防火墙设置中。

我尝试使用 Microsoft SQL Server Management Studio 通过“fake@genericcompany.com”进行身份验证,但收到以下错误消息:

===================================

Cannot connect to abc.database.windows.net.

===================================

Failed to authenticate the user fake@genericcompany.com in Active Directory (Authentication=ActiveDirectoryPassword).
Error code 0xCAA90018; state 10
Could not discover a user realm. (.Net SqlClient Data Provider)

------------------------------
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=0&LinkId=20476

------------------------------
Server Name: abc.database.windows.net
Error Number: 0
Severity: 11
State: 0
Procedure: ADALGetAccessToken


------------------------------
Program Location:

   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
   at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
   at System.Data.SqlClient.SqlConnection.Open()
   at Microsoft.SqlServer.Management.SqlStudio.Explorer.ObjectExplorerService.ValidateConnection(UIConnectionInfo ci, IServerType server)
   at Microsoft.SqlServer.Management.UI.ConnectionDlg.Connector.ConnectionThreadUser()

这是我的假 Azure 设置:

Azure Active Directory B2C
Directory domain: xyz.onmicrosoft.com

Azure SQL Server
Name: abc.database.windows.net
Server version: V12
Number of databases: 1
Database name: def
Dababase pricing tier: S0 Standard

我还将包含 SQL 数据库和服务器的订阅设置在上述同一个 Active Directory 中。

我读过一些关于“包含的数据库”和“包含的数据库用户”的东西,我可能需要 2 个数据库:一个“主数据库”和一个“用户数据库”,但我不明白这一切,尤其是在Azure SQL 数据库的上下文。这是我阅读的链接之一,但不完全理解:

[ https://msdn.microsoft.com/library/ff929188.aspx ][包含的数据库用户 - 使您的数据库可移植]

我将在下面发布其他链接,因为 SO 不允许我发布超过 2 个链接。

【问题讨论】:

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


【解决方案1】:

正如我们在 [ https://azure.microsoft.com/en-us/documentation/articles/sql-database-aad-authentication/ ][使用 Azure Active Directory 身份验证连接到 SQL 数据库] 中所述,当前版本不支持 MSA 帐户和来宾帐户(见下文)。 Azure SQL DB 目前仅支持本机和集成域 Azure AD 帐户。

来自文档...(请参阅 Azure AD 功能和限制)

不支持 Microsoft 帐户(例如 outlook.com、hotmail.com、live.com)或其他访客帐户(例如 gmail.com、yahoo.com)。如果您可以使用帐户和密码登录到https://login.live.com,那么您使用的 Microsoft 帐户不支持 Azure SQL 数据库的 Azure AD 身份验证。

谢谢 米雷克

Mirek Sztajno,高级 PM SQL Server 安全团队

【讨论】:

  • 谢谢米雷克;你有关于你正在谈论的本机和集成域 Azure AD 帐户的信息吗?这是否意味着我不能从 Azure Web 服务或外部服务器(如“localhost”)获取 Web 应用程序,通过 Azure Active Directory 进行身份验证,并以这种方式访问​​我们的 SQL 数据库?我们正在尝试使用 Azure Active Directory 对我们公司中的所有 Web 应用程序进行身份验证。
  • 至于微软和来宾帐户,我以 fake@gmail.com 为例,但谢谢,我将通过将域名更改为 fake@genericcompany.com 来澄清。在我们的 Active Directory 设置中,在“身份提供商”下,我选择了“本地帐户”作为“电子邮件”,并且我没有设置任何“社交身份提供商”,其中列出了以下提供商:Microsoft Account、Google、Facebook 、LinkedIn 和亚马逊。您认为将身份提供者切换为“用户名”会有所帮助吗?还有什么我应该尝试的吗?
【解决方案2】:

下面我收集了一些 Azure AD 链接(包括内置域)供您浏览 https://azure.microsoft.com/en-us/documentation/articles/active-directory-add-domain/ https://azure.microsoft.com/en-us/documentation/articles/active-directory-aadconnect-accounts-permissions/

只要您不使用 MS 帐户或访客帐户,您描述的场景应该可以工作。您可以使用用户列表(使用用户和密码)创建自己的本地域,或者使用 ADFS 将您的公司域与 Azure AD 联合并允许使用 Windows 凭据。 如有更多关于此主题的问题,请随时使用我们的帮助别名 SQLAzureADAuth@microsoft.com。

谢谢,

米雷克

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 2018-09-21
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多