Итак, у меня есть новое приложение, которое использует административную базу данных (SQL Server 2008 R2) для обеспечения соблюдения ограничений структуры данных. Важно, чтобы табличная структура этой базы данных поддерживалась любой ценой, и самая большая опасность того, что структура не будет поддержана, связана с тем, что пользователь войдет в базу данных и вручную изменит ее.
В этой ситуации лучше всего построить контрольную сумму для таблиц, которые я хочу «защитить», и проверять ее каждый раз, когда я что-то делаю в приложении? Или мне лучше всего заниматься «защитой» на стороне сервера? То есть, создавая ТРИГГЕР, скажем
CREATE TRIGGER EnsureIntegrity ON ProtectedTable
FOR INSERT, UPDATE, DELETE AS
BEGIN
IF (EXISTS (Some_Condidtion)
RAISERROR(/*Some Error Message*/)
ROLLBACK TRANSACTION
END
Любой совет о том, как лучше всего достичь того, чего я хочу, очень ценен.
Лучше всего ограничить доступ ответственными лицами. Любой, кто может войти на сервер SQL и изменить что-либо в БД, должен быть на крючке, чтобы исправить это. Между этим и хорошими резервными копиями, возможно, с репликацией, вы должны быть настроены на большинство плохих событий.