我有一个Azure SQL数据库,我的数据存储在其中。这些数据应该从系统(例如Dynamics或其他服务器)中检索。但是,这个系统没有固定的IP地址。我如何允许这些系统访问我的Azure SQL数据库?到目前为止,我只能成功地包含静态IP地址。
我有一个Azure SQL数据库,我的数据存储在其中。这些数据应该从系统(例如Dynamics或其他服务器)中检索。但是,这个系统没有固定的IP地址。我如何允许这些系统访问我的Azure SQL数据库?到目前为止,我只能成功地包含静态IP地址。
针对本文章发起者:如果您的 Microsoft Dynamics CRM 运行在 Azure 虚拟机上,并且您正在连接到一个 Azure SQL 数据库,则 Azure 的默认网络配置应该允许访问。(如果您连接到 Azure SQL 托管实例,则可能会有所不同。)在 Azure 门户中,如果您导航到托管 Azure SQL 数据库的逻辑 SQL 服务器并转到“网络”部分,则应该看到一个名为“AllowAllWindowsAzureIps”的默认防火墙规则,其启动 IP 是 0.0.0.0,结束 IP 是 0.0.0.0。这就是允许任何 Azure 到 Azure 访问的内容。
然而,如果您正在尝试使用一个动态IP地址的公共计算机进行连接,该计算机并非托管在Azure上,则会更加棘手。在我的情况下,我正在使用具有动态公共IP的Windows 10工作站进行连接。需要明确的是,这是针对Azure SQL数据库而不是Azure SQL托管实例。以下解决方案使用了Azure SQL数据库逻辑服务器的“私有端点”(或“私有链接”)。概述在此处。托管实例需要不同的解决方案。
简而言之,我通过以下步骤成功地使其工作:
在进行以上配置并通过Windows 10 VPN客户端连接后,我能够使用SSMS连接到Azure SQL DB,并使用标准SQL Server连接字符串使用C#/.Net应用程序连接。
以下总结了步骤,并引用了Microsoft文档和一些我自己的评论。详细信息非常冗长,重复所有Microsoft已经记录的内容没有意义。但是我认为这个摘要可能对一些人有帮助。我花了几个小时才使其正常工作。
以下步骤对于任何Windows服务器或工作站都应该几乎相同。Mac和Linux客户端计算机也可以使用此方法连接,但需要调整VPN详细信息。
微软有两篇文章介绍如何设置Azure VPN网关。第一篇使用Azure PowerShell:
(1) https://learn.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-howto-point-to-site-rm-ps
这是我所遵循的。第二篇描述了如何通过Azure门户进行操作:
我参考了第二篇文章,以更好地理解和解决一些Azure PowerShell步骤中的问题。
当我仔细阅读并按照(1)中的说明操作时,效果非常好。以下是一些观察结果。
New-AzVirtualNetworkGateway
PowerShell命令)时,必须选择一个GatewaySku
。这些需要花费一些钱!定价请参见此处。最低成本的Basic
SKU每月约为27美元(目前),但只支持Windows VPN客户端通过SSTP进行连接。对于Mac或Linux客户端,您至少需要VpnGw1
SKU,约为139美元/月,并且必须包括IKEv2和/或OpenVPN协议。New-AzVirtualNetworkGateway
命令需要一段时间才能完成...在我的情况下,需要35分钟。$VPNClientAddressPool
的命令两次才能使其工作。创建Azure VPN网关后,您需要转到(3)https://learn.microsoft.com/zh-cn/azure/vpn-gateway/vpn-gateway-certificates-point-to-site中的详细说明,创建一个自签名根证书以安装在VPN网关上,并为您的本地计算机创建一个客户端证书(由同一根证书签名)。(3)中的说明很长,但相当不错。
创建自签名根和客户端证书后,您可以继续执行(1)中的说明,将自签名根证书上传到Azure VPN网关(使用Add-AzVpnClientRootCertificate
命令)。同样,由于某些原因,我必须运行两次才能使其正常工作。
完成上述步骤后,您需要运行PowerShell命令:
$profile=New-AzVpnClientConfiguration -ResourceGroupName $RG -Name $GWName -AuthenticationMethod "EapTls"
$profile.VPNProfileSASUrl
使用由VPNProfileSASUrl
显示的URL下载VPN配置文件。对于Windows,安装VPN客户端配置后,您应该能够打开VPN客户端并成功连接到Azure VPN网关。
接下来,为了创建我的Azure SQL数据库逻辑服务器的私有端点,我使用了Azure门户而不是Azure PowerShell,因为这更快速且直接。(这或多或少遵循Microsoft从此处开始的说明。)
10.1.0.4
。对于名为 myazuresqlserver
的Azure SQL数据库逻辑服务器,Private Link FQDN将是 myazuresqlserver.privatelink.database.windows.net
。但您实际需要的是正常的FQDN,它将是 myazuresqlserver.database.windows.net
。
如上所述,为避免额外的DNS服务器配置步骤,我只需添加一个条目到我的Windows hosts
文件中:
10.1.0.4 myazuresqlserver.database.windows.net
完成这些步骤后,我就能够使用myazuresqlserver.database.windows.net
SQL Server名称和常规的SQL Server登录用户ID和密码通过SSMS连接了。对于我的.Net应用程序,我也能够使用标准的SQL客户端连接字符串和myazuresqlserver.database.windows.net
服务器名称进行连接。
是的,如果从具有动态IP地址的客户端计算机连接到Azure SQL DB更加容易,那将会很好。如果有其他更好的解决方案,希望有人能在这里发布!
最后注意:如果您想要在启动服务器时通过命令行脚本自动启动到Azure VPN网关的VPN连接,那也不容易!rasdial.exe
命令不能直接使用。但是这里的说明描述了如何完成此操作。请注意,一旦连接成功,rasdial.exe {yourVPNconnectioName} /disconnect
可以通过命令行断开VPN连接,无需额外步骤。