我已经创建了 Azure 租赁并配置了以下内容:
Azure AD 具有:
- 简单的自定义域名(少于 15 个字符)。 DNS 验证等一切都很好。
- 用户和管理员组
- 两个组中的用户
- VNET、DNS 和 IP 地址
- 启用设备管理
- 启用域服务并连接到 VNET
请注意,本地没有任何东西,这一切都在云中。我的物理笔记本电脑实际上被用作跳线盒。
SQL Azure 数据库和服务器具有:
- 防火墙规则对所有必要的传入连接开放
- Active Directory 管理员设置为我在 Azure AD 中创建的管理员组
- AD 用户全部在 SQL Azure 中使用 CREATE USER FROM EXTERNAL PROVIDER 创建;
我可以使用 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 专业人员 RTW 的 Microsoft 在线服务登录助手
简而言之,我的完整“环境”由 Azure AD、SQL Azure DB 和客户端 VM 组成。
Problem:我使用目录服务将 VM 添加到我的 Azure Active Directory,注销并以有效域用户身份登录(在 AD 和 SQL Azure 中有效,具有适当的登录名和权限)。当我打开 SSMS 时,我可以使用 Active Directory 通用身份验证或 Active Directory 密码身份验证正常连接,但当我尝试使用 Active Directory 身份验证安全连接时,出现以下错误。如果我将 VM 直接加入到 Azure AD,也会发生这种情况。我的部署是 100% 云,因此没有适当的联合。
所以我有两个问题:
- 我的配置或方法中是否遗漏了某些内容,或者是否有解决方法?这可能是一个现有问题 - 请参阅此处
- 如果使用 C# 在 .net 4.6.2 中进行编码并部署在云中,这种连接(直通)是否有效?可能使用 ODBC 13.1 驱动程序?
Thanks
=====================================
无法连接到 .database.windows.net。
=====================================
无法验证活动中的用户 NT Authority\Anonymous Logon
目录(身份验证=ActiveDirectoryIntegrated)。错误代码
0xCAA9001F;仅支持状态 10 集成 Windows 身份验证
在联邦流程中。 (.Net SqlClient 数据提供程序)
------------------------------ 如需帮助,请点击:
------------------------------ 服务器名称:.database.windows.net 错误编号:0 严重性:11 状态:0
过程:ADALGetAccessToken
------------------------------ 节目地点:
在
System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity
身份、SqlConnectionString 连接选项、SqlCredential
凭证、对象提供者信息、字符串新密码、安全字符串
newSecurePassword、布尔重定向UserInstance、SqlConnectionString
userConnectionOptions、SessionData reconnectSessionData、
DbConnectionPool 池、字符串 accessToken、布尔值
应用瞬态故障处理)
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions
选项、DbConnectionPoolKey poolKey、对象 poolGroupProviderInfo、
DbConnectionPool池,DbConnection owningConnection,
DbConnectionOptions userOptions)位于
System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection
owningConnection、DbConnectionPoolGroup poolGroup、DbConnectionOptions
用户选项)位于
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection
拥有连接、任务完成源1 retry, DbConnectionOptions
userOptions, DbConnectionInternal oldConnection, DbConnectionInternal&
connection) at
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection
outerConnection, DbConnectionFactory connectionFactory,
TaskCompletionSource
1 重试,DbConnectionOptions userOptions) at
System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection
外部连接、DbConnectionFactory 连接工厂、
任务完成源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 服务器)位于
Microsoft.SqlServer.Management.UI.ConnectionDlg.Connector.ConnectionThreadUser()