我在通过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”(实际更改了电子邮件)作为用户,我可以通过登录获得authorization_code和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个链接。
答案 0 :(得分:2)
正如我们在[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,那么您使用的是Azure帐户Azure AD身份验证不支持的Microsoft帐户。
由于 米雷克
Mirek Sztajno,高级PM SQL Server安全团队
答案 1 :(得分:0)
Bellow我收集了一些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。
谢谢,
Mirek