Можно ли обнаружить, что соединение с базой данных является копией, а не исходной базой данных?
У меня есть приложение, которое должно знать, связано ли оно с исходной базой данных, с которой оно было установлено, или с подключением к копии этой базы данных. Есть ли какой-либо известный способ узнать, была ли клонирована база данных, и приложение больше не подключено к оригиналу? Я особенно заинтересован в MS SQL Server и Oracle.
Я подбирал идеи для хранимой процедуры, но, скорее всего, не имел доступа к оборудованию, чтобы подтвердить уникальную информацию об оборудовании, которая несколько гарантировала бы, что база данных - это та, к которой она была первоначально подключена во время установки.
Я пытаюсь предотвратить / обнаружить клонирование базы данных, чтобы было только 1 "истинное местоположение правды".
3 ответа
Я полагаю на это следующим образом: если он сделан из битов, его можно клонировать таким образом, чтобы вы никогда не смогли определить разницу между оригиналом и клоном. Ваш единственный шанс был бы, если бы было какое-то вычисленное значение, которое возвращает каждый экземпляр базы данных, так что -
- Каждый экземпляр базы данных возвращает свое значение.
- Значение, возвращаемое каждым экземпляром базы данных, является единообразным во всех вызовах.
Условие номер (2) - ваш злодей здесь. Если значение, возвращаемое каждым экземпляром, является единообразным во всех вызовах, тогда оно должно где-то полагаться на какое-то сохраненное значение. Это сохраненное значение тоже можно клонировать...
QED
Я клонировал базы данных Oracle для двух целей. Насколько мне известно, только один из них будет соответствовать вашим требованиям.
- Я клонировал базу данных, чтобы предоставить дополнительный экземпляр (иногда только для чтения) для другой среды или использования. В этом случае я меняю имя базы данных. Эти клоны могут быть обнаружены путем проверки имени базы данных.
- Я клонировал базу данных для целей восстановления или отката. Обычно они заменяют исходную базу данных. Я не знаю способа идентифицировать это как клонированную базу данных.
Есть данные, которые могут указывать на то, что база данных была клонирована или перемещена. Такие вещи, как имена файлов для табличных пространств, могут измениться при клонировании базы данных, но они могут измениться, даже если база данных не клонирована. Я считаю, что вы можете получить имя хоста или IP-адрес, на котором работает база данных. Опять же, это может указывать на то, что база данных клонирована, но не может использоваться для проверки того, что она является клоном.
Хотя возможно в конечном итоге подключиться к неправильному клону, в этой ситуации обычно довольно сложно. Потратьте некоторое время на понимание того, как маршрутизируются ваши соединения с базой данных.
"показать статус раба"; вы знаете, к какому серверу вы подключены... состояние show slave сообщит вам, какой сервер является главным... если они находятся на разных серверах. Вы можете использовать глобальную переменную server_id, чтобы выяснить разницу на том же сервере... Я не играл с ним.