Как я могу узнать фактическое географическое расположение базы данных? - PullRequest
9 голосов
/ 28 октября 2011

Мне поручено определить местоположение, в котором наша база данных SQL Server географически расположена с помощью кода C #, поскольку он может время от времени изменяться из-за частого перемещения нашей базы данных, чтобы защитить ее от физического и кибер-вреда. Возможно ли это или еще одна мечта моего босса заранее спасибо.

Ответы [ 8 ]

7 голосов
/ 03 ноября 2011

1 - Купите что-нибудь подобное. Это GPS-приемник UPS.

2 - подключите его к серверу.

3 - Напишите пакетный или командный скрипт, который будет вызывать программное обеспечение GPS и возвращать текущее положение.

4 - используйте xp_cmdshell для вызова этого скрипта и возврата текущей позиции через запрос SQL Server.

6 голосов
/ 31 октября 2011

Самое простое решение - выполнить поиск DNS, а затем использовать службу определения местоположения IP, как предложил Коди.Попробуйте это:

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

Как только вы получите свой IP-адрес, вам нужно будет загрузить что-то вроде http://www.iplocationfinder.com/65.55.23.107, используя HttpWebRequest, если вы не хотите платить за базу данных IP-адресов.Получив ответ на запрос HttpWebRequest, вы можете использовать регулярное выражение для анализа имени местоположения или широты и долготы, если вам это нужно.

6 голосов
/ 28 октября 2011

Купите телефон iPhone / Android и прикрепите его к верхней части машины, на которой находится база данных. Напишите быстрое приложение, чтобы оно посмотрело на API GPS и опишите его положение в базе данных, к которой подключен телефон, используя какой-то JSON / SOAP API через HTTPS (в целях безопасности).

Затем вы можете получить доступ к информации GPS из того места, где вы используете C #.

Редактировать

Работа с GPS на моно / iPhone: http://drdobbs.com/mobility/222600599

Пример кода, GPS на Mono / Android: https://github.com/gshackles/Sample-Projects/blob/master/MonoDroid/MonoDroidSamples/MonoDroidSamples/DemoActivities/LocationDemo/LocationActivity.cs

4 голосов
/ 28 октября 2011

У вас так много серверов, которые перемещаются в одночасье в вашей компании, или это для настройки облачной базы данных?IP-адрес, вероятно, является базовым неточным - лучше, чем ничего, отправной точкой.

2 голосов
/ 28 октября 2011

Как отметил Давиде Пирас, вы можете использовать, например, этот сайт: http://ip -lookup.net / для отслеживания IP-адреса вашего БД-сервера, и вы можете получить выходные данные, возможно, используя Regular Expresion'sили http://htmlagilitypack.codeplex.com/.

Бу, который работает, только если вы можете получить IP-адрес своего сервера БД, что, я думаю, не должно вызывать проблем, поскольку вам нужен IP-адрес для строки подключения.

Чтобы добиться этого, используйте элемент управления WebBrowser, выполните webbrowser1.navigate("http://ip-lookup.net/"); than:

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";
                }
            }

next:

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

и попробуйте отфильтровать вывод, потому что я не очень хорошиспользуя Regex. Вы можете захватить вывод, используя webbrowser1.DocumentText;

1 голос
/ 03 ноября 2011

Определение часового пояса, вероятно, лучшее, что вы можете сделать из SQL Server, но этого может быть достаточно для вас на основании вашего описания.Вы можете использовать этот запрос, чтобы получить смещение GMT ​​часового пояса, в котором расположен сервер:

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

Из этого результата вы можете легко добавить некоторую логику для возврата сокращения часового пояса, например ESTCST и т. Д. Я знаю, что это немного, но, надеюсь, это поможет.

1 голос
/ 03 ноября 2011

Почему бы не использовать базу данных, чтобы сообщить вам местоположение?Чтобы уточнить, что я имею в виду:

Использование хранимой процедуры SQL CLR Для отслеживания IP-адреса - но заставить sproc CLR возвращать IP-адрес сервера, на котором он размещен.увидел строку соединения Azure, которую вы упомянули Коди, и подумал, что это будут удобные ссылки: http://blogs.msdn.com/b/windowsazure/archive/2011/07/06/windows-azure-deployments-and-the-virtual-ip-address.aspx

Получить общедоступный IP-адрес Azure из развернутого приложения

0 голосов
/ 04 ноября 2011

Если кто-то уже физически перемещает сервер, почему бы не написать какой-нибудь скрипт, который записывает соответствующее местоположение в БД?Когда машина запустится, запустите этот инструмент автоматически, и «двигатель» выберет место.

...