使用仅限云的Azure Active Directory的SQL Azure集成身份验证失败

时间:2016-09-07 10:39:11

标签: authentication azure-sql-database azure-active-directory federated-identity

我创建了一个Azure租户并配置了以下内容:

Azure AD with:

  • 一个简单的自定义域名(少于15个字符)。 DNS验证等一切都很好。
  • 用户和管理员组
  • 两个群组中的用户
  • VNET,DNS和IP地址
  • 启用设备管理
  • 启用域服务并连接到VNET

请注意,内部没有任何内容,这一切都在云端。我的物理笔记本电脑实际上只是用作跳箱​​。

SQL Azure数据库和服务器:

  • 为所有必要的传入连接打开防火墙规则
  • Active Directory管理员设置为我在Azure AD中创建的管理员组
  • 使用CREATE USER FROM EXTERNAL PROVIDER创建在SQL Azure中的AD用户;

我可以使用Active Directory通用身份验证或Active Directory密码身份验证从笔记本电脑上的SSMS轻松连接到SQL Azure数据库。对于这两种情况,我都会因为预期的用户名和密码而受到质疑。

目的: 我希望能够使用集成身份验证,以便从a)机器,b)ASP.NET MVC站点无缝地流动身份。我没有尝试过场景b是的,所以让我们停下来吧。对于方案a,我已经完成了以下操作。

配置Azure VM:

  • 标准D2 - 完全修补Windows 10
  • 连接到与域
  • 相同的VNET
  • 安装了SQL Server Management Server 2016(SSMS)(最新版本和修补版本 - 13.0.15700.28)
  • 安装了ODBC 13.1(虽然我认为这不相关)
  • ADAL
  • 面向IT专业人员的Microsoft Online Services登录助手RTW

简而言之,我的完整环境"由Azure AD,SQL Azure数据库和客户端VM组成。

问题: 我使用目录服务将VM加入我的Azure Active Directory,注销并以有效域用户身份登录(在AD和SQL Azure中有效,具有适当的登录和权限)。当我打开SSMS时,我可以很好地连接Active Directory通用身份验证或Active Directory密码身份验证,但是当我尝试连接Active Directory身份验证安全性时,我收到以下错误。如果我将VM直接加入Azure AD,也会发生这种情况。我的部署是100%云,因此没有联邦。

所以我有两个问题:

  • 我在配置或方法中遗漏了什么或是否有解决方法? It may be an existing issue - see here
  • 如果使用C#在.net 4.6.2中编码并部署在云中,这种连接(传递)是否有效?可能使用ODBC 13.1驱动程序?

由于

  

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

     

无法连接到.database.windows.net。

     

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

     

无法在Active中验证用户NT Authority \ Anonymous Logon   目录(身份验证= ActiveDirectoryIntegrated)。错误代码   0xCAA9001F; state 10仅支持集成Windows身份验证   在联邦流程中。 (.Net SqlClient数据提供程序)

     

------------------------------如需帮助,请点击:http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=0&LinkId=20476

     

------------------------------服务器名称:.database.windows.net错误号码:0严重性:11状态:0   过程:ADALGetAccessToken

     

------------------------------计划地点:

     

在   System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity   identity,SqlConnectionString connectionOptions,SqlCredential   凭证,Object providerInfo,String newPassword,SecureString   newSecurePassword,Boolean redirectedUserInstance,SqlConnectionString   userConnectionOptions,SessionData reconnectSessionData,   DbConnectionPool池,String accessToken,Boolean   applyTransientFaultHandling)at   System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions   options,DbConnectionPoolKey poolKey,Object poolGroupProviderInfo,   DbConnectionPool池,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次重试,DbConnectionOptions userOptions)at at   System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(的DbConnection   outerConnection,DbConnectionFactory connectionFactory,   TaskCompletionSource 1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource 1   重试)   System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1   重试)在System.Data.SqlClient.SqlConnection.Open()处   Microsoft.SqlServer.Management.SqlStudio.Explorer.ObjectExplorerService.ValidateConnection(UIConnectionInfo   ci,IServerType服务器)at   Microsoft.SqlServer.Management.UI.ConnectionDlg.Connector.ConnectionThreadUser()

2 个答案:

答案 0 :(得分:5)

从Azure支持获得更新:

它不起作用,因为:

  1. 要使用Active Directory集成身份验证,必须联合Azure Active Directory。这是因为Kerberos必须这样做(登录到计算机时生成的Kerberos TG票证),但Azure AD不知道Kerberos,因此需要ADFS。
  2. Azure AD域服务预览:这使得旧版功能(NTLM,Kerberos等)可用。但Azure SQL数据库不支持旧式Windows身份验证。
  3. 所以,你可以添加2-3个低功耗VM来实现AD + ADFS + AAD + AAD-DS,但这绝对不是理想的方式。

    如果我获得有关未来计划的信息,我将在此处分享。

    **

    有相同的问题和一些打开的门票。一旦获得其他信息,将更新此答案。

    截至今天,只有文档here支持联合设置。您必须使用AD Connect建立ADFS setup

    这是AAD-DS应该提供的纯云解决方案。 AAD-DS仍然是预览......

答案 1 :(得分:0)

直到在Azure Sql Server功能屏幕中将域帐户设置为用于“ Active Directory管理员”设置之前,我才拥有联合身份验证流消息。然后,我可以使用在此帐户下运行的SSMS进行连接。

注意:为了简化以其他用户身份运行SSMS的过程,我使用了runas: C:\ Windows \ System32 \ runas.exe / savecred /user:YourAdAdminUser@YourDomain.com“ C:\ Program Files(x86)\ Microsoft SQL Server Management Studio 18 \ Common7 \ IDE \ Ssms.exe” < / p>

以该用户身份运行时,我使用SSMS身份验证选项“ Active Directory-Integrated”进行了连接。从这里,我在主数据库中运行以下命令:

使用DEFAULT_SCHEMA = dbo从外部提供商创建用户[YourAdAdminUser@YourDomain.com]

然后,我使用本地SQL身份验证连接到SSMS中的同一服务器,并使用设置为Azure Sql Server实例的“服务器管理员”的帐户登录。从这里,我在主数据库中运行了alter role命令:

ALTER ROLE dbmanager添加成员[YourAdAdminUser@YourDomain.com]

ALTER ROLE loginmanager添加成员[YourAdAdminUser@YourDomain.com]

现在,我可以回到以AD Admin用户身份运行的SSMS,然后可以从上面运行CREATE USER命令,但对于其他域帐户:

使用DEFAULT_SCHEMA = dbo从外部提供商创建用户[OtherAccount@YourDomain.com]

您可以决定运行哪个数据库(例如,master数据库和非系统数据库)。

域用户现在可以使用“ Active Directory-集成”登录。请注意,如果添加为MFA配置的域用户,则对于该用户,使用SSMS登录,他们应该选择SSMS身份验证选项“ Azure Active Directory-具有MFA的通用身份”,并且其用户名应带有“ @”不是反斜杠。