Назад | Перейти на главную страницу

Можно ли определить, что соединение с базой данных связано с копией, а не с исходной базой данных?

У меня есть приложение, которому необходимо знать, подключено ли оно к исходной базе данных, с которой оно было установлено, или подключено к копии этой базы данных. Есть ли какой-либо известный способ узнать, была ли база данных клонирована, а приложение больше не подключено к оригиналу? Меня особенно интересуют MS SQL Server и Oracle.

Я подбрасывал идеи для хранимой процедуры, но у нее, скорее всего, нет доступа к оборудованию для подтверждения уникальной информации об оборудовании, которая в некоторой степени гарантировала бы, что база данных является той, к которой она была изначально подключена во время установки.

Я пытаюсь предотвратить / обнаружить клонирование базы данных, чтобы было только одно «истинное местонахождение истины».

Я клонировал базы данных Oracle для двух целей. Насколько мне известно, только один из них будет соответствовать вашим требованиям.

  • Я клонировал базу данных, чтобы предоставить дополнительный экземпляр (иногда только для чтения) для другой среды или использования. В этом случае я меняю имя базы данных. Эти клоны можно обнаружить, проверив имя базы данных.
  • Я клонировал базу данных для восстановления или отката. Обычно они заменяют исходную базу данных. Я не знаю способа идентифицировать это как клонированную базу данных.

Есть данные, которые могут указывать на то, что база данных была клонирована или перемещена. Такие вещи, как имена файлов для табличных пространств, вероятно, изменятся при клонировании базы данных, но они могут измениться, даже если база данных не клонирована. Я считаю, что вы можете получить имя хоста или IP-адрес, на котором работает база данных. Опять же, это может указывать на то, что база данных клонирована, но не может использоваться для проверки того, что это клон.

Хотя в конечном итоге можно подключиться к неправильному клону, попасть в такую ​​ситуацию, как правило, довольно сложно. Потратьте некоторое время на понимание того, как маршрутизируются ваши подключения к базе данных.

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

  1. Каждый экземпляр базы данных возвращает другое значение.
  2. Каждый экземпляр базы данных возвращает значение согласован между вызовами.

Номер условия (2) - ваш злодей. Если значение, возвращаемое каждым экземпляром, согласуется между вызовами, тогда значение должен где-то полагаться на какое-то сохраненное значение. Это сохраненное значение тоже можно клонировать ...

Q.E.D

'показать статус подчиненного;' вы знаете, к какому серверу вы подключены ... статус показа ведомого сообщит вам, какой сервер является главным ... если они находятся на разных серверах. Возможно, вы сможете использовать глобальную переменную server_id, чтобы выяснить разницу на том же сервере ... Я не играл с ней.