我已经创建了一个Azure租赁并配置了以下内容:
Azure AD,带有:
- 一个简单的自定义域名(少于15个字符)。DNS验证等一切正常
- 用户和管理员组
- 两个组中的用户
- VNET与DNS和IP地址
- 已启用设备管理
- 已启用域服务并连接到VNET
请注意,没有任何前提,这都在云中。我的实体笔记本电脑被有效地用作跳箱
SQL Azure数据库和服务器,带有:
- 为所有必要的传入连接打开防火墙规则
- Active Directory管理员设置为我在Azure AD中创建的管理员组
- 所有AD用户都是使用CREATE USER FROM EXTERNAL PROVIDER在SQL Azure中创建的
我可以使用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已安装(尽管我认为这与此无关)
- 阿达尔
- Microsoft Online Services IT专业人员登录助手RTW
简而言之,我的完整"环境"由一个Azure AD、一个SQL Azure DB和一个客户端VM组成
问题:我使用目录服务将虚拟机加入我的Azure Active Directory,以有效域用户身份注销和登录(在AD和SQL Azure中有效,具有适当的登录和权限)。当我打开SSMS时,我可以使用Active Directory通用身份验证或Active Directory密码身份验证进行良好连接,但当我尝试使用Active Directory身份验证安全性进行连接时,我会收到以下错误。如果我将虚拟机直接加入Azure AD,也会发生这种情况。我的部署是100%云的,因此没有联盟。
所以我有两个问题:
- 我是在配置或方法中遗漏了什么,还是有解决办法?这可能是一个现有问题-请参阅此处
- 如果用C#在.net 4.6.2中编码并部署在云中,这种连接(直通)会起作用吗?可能使用ODBC 13.1驱动程序
感谢
====================================
无法连接到.database.windows.net.
====================================
无法对用户NT Authority\活动中的匿名登录进行身份验证目录(身份验证=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标识,SqlConnectionString连接选项,SqlCredential凭据,对象提供者信息,字符串newPassword,SecureStringnewSecurePassword,布尔重定向用户实例,SqlConnectionStringuserConnectionOptions,SessionData重新连接SessionData,DbConnectionPool池,字符串accessToken,布尔值applyTransientFaultHandling)System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptionsoptions,DbConnectionPoolKey poolKey,Object poolGroupProviderInfo,DbConnectionPool池,DbConnection owningConnection,DbConnectionOptions userOptions)System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnectionowningConnection,DbConnectionPoolGroup池组,DbConnectionOptionsuserOptions)System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnectionowningConnection,TaskCompletionSource
1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource
1重试,DbConnectionOptions userOptions)System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnectionouterConnection,DbConnectionFactory connectionFactory,任务完成源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.ValideConnection(UIConnectionInfoci,IServerType服务器)Microsoft.SqlServer.Management.UI.ConnectionDlg.ConnectionThreadUser()
从Azure支持获得更新:
它不起作用,因为:
- 若要使用Active Directory集成身份验证,必须联合Azure Active Directory。这是因为Kerberos是必要的(登录到计算机时生成的Kerberos TG票证),但Azure AD不知道Kerberos,因此需要ADFS
- Azure AD域服务预览:这使旧功能(NTLM、Kerberos等)可用。但是Azure SQL数据库不支持老式的Windows身份验证
因此,您可以添加2-3个低功耗VM来实现AD+AFS+AAD+AAD-DS,但这绝对不是理想的方式。
如果我得到关于未来计划的信息,我会在这里分享。
**
有同样的问题和一些开放的门票。一旦我得到更多信息,我会更新这个答案。
截至目前,这里只支持联邦设置。您必须使用AD Connect建立ADFS设置。
这是AAD-DS应该为纯云解决方案提供的。AAD-DS仍在预览中。。。
我收到了联盟流消息,直到我设置了用于";Active Directory管理员";Azure Sql Server功能屏幕中的设置。然后我可以使用在这个帐户下运行的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">
作为这个用户运行,我使用SSMS身份验证选项连接,";Active Directory-集成";。从这里开始,我在master数据库中运行了以下内容:
创建用户[YourAdAdminUser@YourDomain.com]来自外部提供者,带DEFAULT_SCHEMA=dbo
然后,我使用本地SQL身份验证连接到SSMS中的同一服务器,使用设置为"的帐户登录;服务器管理员";用于Azure Sql Server实例。从这里开始,我在master数据库中运行alter角色命令:
ALTER角色数据库管理员添加成员[YourAdAdminUser@YourDomain.com]
ALTER ROLE登录管理员添加成员[YourAdAdminUser@YourDomain.com]
现在我可以回到以AD Admin用户身份运行的SSMS,从那里我可以运行上面的CREATE user命令,但对于其他域帐户:
创建用户[OtherAccount@YourDomain.com]来自外部提供者,带DEFAULT_SCHEMA=dbo
您可以决定运行上述数据库(例如,master和您的非系统数据库)。
域用户现在可以使用";Active Directory-集成";。注意,如果您添加一个为MFA配置的域用户,那么对于该用户使用SSMS登录,他们应该选择SSMS身份验证选项,";Azure Active Directory-Universal with MFA";,并且他们的用户名应该带有"@"而不是反斜杠。