我无法找到有关如何预测Azure视为您的IP地址的任何文档。
这是我所指的IP,红色:
我正在尝试以编程方式实现CURRENT CLIENT IP ADDRESS xxx.xxx.xxx.xxx ADD TO ALLOWED IP ADDRESSES。
答案 0 :(得分:1)
您的IP地址取决于您所在网络的NAT,除非您来自具有固定公共IP地址的计算机。除非客户端计算机从同一网络连接,并且您详细了解网络,否则您不太可能可靠地预测客户端IP地址。唯一的解决方案是添加一个从86.0.0.0到86.255.255.255的范围,并希望它覆盖你所连接的网络 - 但是很多'不受欢迎的人'也会在这个范围内出现。
客户端IP地址功能不应用于直接管理员访问以外的任何其他功能,可以根据需要手动设置。它也可以通过使用本地防火墙规则锁定,通过限制端口1433对特定本地网络计算机的访问。任何更一般的访问都应限于各种服务 - 例如OData样式,mobile services或使用某种port bridge,这可以通过VPN,VM和其他IaaS服务来实现。
我建议您首先考虑您的用例 - 直接SQL访问不是云计算的可行模式。存在许多更快,更安全且更易于管理的替代方案。此外,至少你正在进入一个痛苦的世界,试图让安全人员在他们的防火墙中为SQL端口挖洞。
答案 1 :(得分:1)
这对我有用:有一个“AutoDetectClientIP”管理API调用,它将现有的防火墙例外更新为调用方的IP地址。
但您需要访问对给定订阅,订阅ID,SQL Azure服务器名称和防火墙例外名称有效的管理证书。
public static bool SetFirewallRuleAutoDetect(string certFilename, string certPassword, string subscriptionId, string serverName, string ruleName)
{
try
{
string url = string.Format("https://management.database.windows.net:8443/{0}/servers/{1}/firewallrules/{2}?op=AutoDetectClientIP",
subscriptionId,
serverName,
ruleName);
HttpWebRequest webRequest = HttpWebRequest.Create(url) as HttpWebRequest;
webRequest.ClientCertificates.Add(new X509Certificate2(certFilename, certPassword));
webRequest.Method = "POST";
webRequest.Headers["x-ms-version"] = "1.0";
webRequest.ContentLength = 0;
// call the management api
// there is no information contained in the response, it only needs to work
using (WebResponse response = webRequest.GetResponse())
using (Stream stream = webResponse.GetResponseStream())
using (StreamReader sr = new StreamReader(stream))
{
Console.WriteLine(sr.ReadToEnd());
}
// the firewall was successfully updated
return true;
}
catch
{
// there was an error and the firewall possibly not updated
return false;
}
}