【问题标题】:How can i know the actual geographical location of a database?我如何知道数据库的实际地理位置?
【发布时间】:2011-10-28 06:59:20
【问题描述】:

我的任务是通过 C# 代码获取我们的 SQL Server 数据库的地理位置,因为由于我们的数据库经常重新定位以保护它免受物理和网络损害,它可能会不时变化。这是可能的还是我老板的另一个梦想提前谢谢。

【问题讨论】:

  • 我要问——为什么?为什么数据库的物理位置很重要?
  • 我想知道为什么数据库如此频繁地移动?...除非您在做非法的事情..将服务器放在安全的服务器机房中会更安全.. . 因为如果您最终通过 dns 地址或其他类似的面向公众的电话识别服务器,您可能无法保护它免受网络伤害。不仅如此,一次又一次地重新定位服务器的实际行为可能比将服务器置于可靠和安全的位置要弱得多。
  • 这不是非法的,它是有正当理由的;)
  • 我可能已经过早地回答了,但您能否澄清一下您是否使用 Azure 来托管您的分贝?还是其他云提供商?

标签: c# sql sql-server map gis


【解决方案1】:

1 - Buy somethihng like this. 这是一个 UPS GPS 接收器。

2 - 将其连接到服务器计算机。

3 - 编写批处理或 shell 脚本,调用 GPS 软件并返回当前位置。

4 - 使用xp_cmdshell 调用此脚本并通过 SQL Server 查询返回当前位置。

【讨论】:

  • +1 该设备很酷,但就像我对 CLS Sproc xp_cmdshell 的建议一样,它不会在 azure 上运行(但 OP 尚未澄清它的 azure)
  • - 但如果他可以插入 USB 设备,那么它不是云
  • @JeremyThompson - 是的,不清楚它是否是云。如果显然这是行不通的。
【解决方案2】:

购买一部 iPhone/Android 手机,并将其贴在装有数据库的机器顶部。编写一个快速应用程序,让它查看 GPS API,并使用某种 JSON/SOAP API 通过 HTTPS 将其位置发布到手机所连接的数据库(出于安全目的)。

然后,您可以从使用 C# 的位置访问 GPS 信息。

编辑

在 Mono/iPhone 上使用 GPS:http://drdobbs.com/mobility/222600599

示例代码,Mono/Android 上的 GPS:https://github.com/gshackles/Sample-Projects/blob/master/MonoDroid/MonoDroidSamples/MonoDroidSamples/DemoActivities/LocationDemo/LocationActivity.cs

【讨论】:

  • 但是我可以用它从他当前位置的数据库中做出响应吗?
  • 好吧,这可能更准确,但如果数据中心隔离良好且手机没有信号怎么办?还需要购买大量硬件......
  • @DavidePiras 我可能应该注意到这不是一个严肃的答案,尽管它是完全可行的。但是,为什么要买这么多硬件呢?它只是一部 Android 手机……您可以假设使用 Mono C# 编写应用程序。数据库服务器已经存在。
  • @Moo-Juice 我知道这是一个好主意,但是这里有没有通过简单使用纯文本和代码来解决问题?
  • 虽然是在开玩笑,但这是值得考虑的。你要位置?使用全球定位系统。 IP 不可靠。
【解决方案3】:

最简单的解决方案是进行 DNS 查找,然后按照 Cody 的建议使用 IP 定位服务。试试这个:

var foo = Dns.GetHostEntry("database.windows.net");

获得 IP 地址后,您需要使用 HttpWebRequest 加载类似 http://www.iplocationfinder.com/65.55.23.107 的内容,除非您想为 IP 位置数据库付费。获得对 HttpWebRequest 的响应后,您可以使用正则表达式来解析位置名称,或者如果需要,可以使用纬度和经度。

【讨论】:

    【解决方案4】:

    您的公司是否有这么多服务器在一夜之间移动,或者这是为了设置云数据库? IP 地址可能是一个基本的不准确——总比没有好。

    【讨论】:

      【解决方案5】:

      正如 Davide Piras 所提到的,您可以使用例如此站点:http://ip-lookup.net/ 来跟踪您是 DB 服务器的 IP 地址,您可以使用正则表达式或 http://htmlagilitypack.codeplex.com/ 获取输出。

      只有在您获得数据库服务器 IP 地址时才有效,我认为这不应该是一个问题,因为您需要连接字符串的 IP。

      要实现这一点,请使用 WebBrowser 控件,请执行 webbrowser1.navigate("http://ip-lookup.net/"); 比:

      HtmlElementCollection elc = this.webBrowser1.Document.GetElementsByTagName("input");
                  foreach (HtmlElement el in elc)
                  {
                      if (el.GetAttribute("type").Equals("text") && el.GetAttribute("name").Equals("ip"))
                      {
                          el.InnerText = "Server IP";
                      }
                  }
      

      下一个:

      HtmlElement form = webBrowser1.Document.GetElementById("form_single_IP");
                  if (form != null)
                      form.InvokeMember("submit");
                   //Submit the form
      

      并尝试过滤输出,因为我使用 Regex 不是很好。您可以使用 webbrowser1.DocumentText; 捕获输出

      【讨论】:

      • 但是这个是给我的?不是数据库所在的服务器对吧?
      • @AllanChua 不,您需要获取数据库服务器 IP 地址,使用这种类型的网站(服务)您可以找到数据库服务器的地理位置(不是那么精确,但可以)跨度>
      • 当你只有连接到具有别名的数据库的字符串时,你能给我一个方法吗?
      • @AllanChua 我会更新我的问题
      • 这是一个 azure 客户端 jd39urj4j4.database.windows.net 的示例连接字符串
      【解决方案6】:

      为什么不使用数据库告诉你位置呢?澄清我的意思:

      Using SQL CLR Stored Procedure To Track IP Address - 但让 CLR 存储过程返回其托管的服务器的 IP 地址。

      我看到了您向 Cody 提到的 azure 连接字符串,并认为这些链接会很方便: http://blogs.msdn.com/b/windowsazure/archive/2011/07/06/windows-azure-deployments-and-the-virtual-ip-address.aspx

      Get Azure public IP address from deployed app

      【讨论】:

        【解决方案7】:

        确定时区可能是您在 SQL Server 中所能做的最好的事情,但根据您的描述,这对您来说已经足够了。您可以使用此查询来获取服务器所在时区的 GMT 偏移量:

        SELECT DATEDIFF(hh, GETUTCDATE(), GETDATE()) AS ServerTimeZone
        

        从这个结果中,您可以轻松添加一些逻辑来返回时区缩写,即ESTCST 等。我知道这并不多,但希望对您有所帮助。

        【讨论】:

        • 是的.. 这也有助于检查小工具返回的 gps 位置是否正确,谢谢:)
        【解决方案8】:

        如果有人已经在物理上移动了服务器,为什么不编写一些将相应位置写入数据库的脚本呢?当机器启动时,自动启动该工具并让“移动器”选择一个位置。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-07
          • 1970-01-01
          • 2016-07-28
          • 2011-05-04
          • 1970-01-01
          • 2021-03-12
          • 1970-01-01
          相关资源
          最近更新 更多