Подтвердить что ты не робот

Ошибка SQL Server 2008 Open Master Key при изменении физического сервера

Я скопировал базу данных SQL Server из одной системы в другую, идентичную настройку, но полностью другую физическую машину. Я использовал Norton Ghost и восстанавливал файлы вручную, например, всю папку SQL Server 2008, найденную в c:\Program Files после повторной установки SQL Server 2008 Express.

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

Ошибка сервера в приложении "/". Создайте мастер-ключ в базы данных или открыть главный ключ в сессии перед выполнением этого операция. Описание: необработанный исключение произошло во время выполнение текущего веб-запроса. Просмотрите трассировку стека информацию об ошибке и он возник из кода.

Сведения об исключении: System.Data.SqlClient.SqlException: Создайте мастер-ключ в базы данных или открыть главный ключ в сессии перед выполнением этого операции.

Ошибка источника:

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

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

ПРИМЕЧАНИЕ. Я попытался сбросить симметричный ключ, сертификат и главный ключ и повторно создать их. Это избавляет от ошибки, но данные, которые в зашифрованном виде через AES_256 не отображаются. Однако столбцы, которые НЕ зашифрованы,

Любая помощь будет высоко оценена. Заранее спасибо!

4b9b3361

Ответ 1

Главный ключ базы данных зашифровывается с использованием главного ключа сервера, который специфичен для машины, на которой установлен SQL Server. Когда вы перемещаете базу данных на другой сервер, вы теряете возможность автоматически расшифровывать и открывать основной ключ базы данных, потому что локальный ключ сервера, скорее всего, будет другим. Если вы не можете расшифровать основной ключ базы данных, вы не сможете расшифровать все, что от него зависит (сертификаты, симметричные ключи и т.д.).

В принципе, вы хотите повторно зашифровать основной ключ базы данных с новым ключом сервера, который можно сделать с помощью этого script (используя admin priviliges):

-- Reset database master key for server (if database was restored from backups on another server)
OPEN MASTER KEY DECRYPTION BY PASSWORD = '---your database master key password---'
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
GO

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

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

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

Ответ 2

У меня была аналогичная ситуация, сервер восстанавливается после того, как диски ОС погибли. Я переустановил SQL и подключил его ко всем моим старым базам данных на нетронутых дисках данных. Все работало, за исключением моих зашифрованных столбцов. Но моя проблема заключалась в том, что главный служебный ключ был закрыт. Я смог восстановить мой главный служебный ключ, вернувшись к тем же учетным записям домена, которые были моей учетной записью службы SQL Server перед перемещением.

Эта статья дала мне исправление (kudos to Matt Bowler за его отличная статья). Я знал, что ключ локального компьютера изменился, но мое спасение состояло в том, что я мог использовать ту же учетную запись службы.

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

Нет настраиваемых пользователем паролей, связанных с этим ключом - он зашифрован учетной записью службы SQL Server и ключ локальной машины. При запуске SQL Server может открыть мастер-ключ службы с любым из этих расшифров. Если один из них терпит неудачу - SQL Server будет использовать другой и "исправить неудавшееся дешифрование (если оба отказа - SQL Server будет ошибкой). Это должно учитывать ситуации, такие как кластеры, где локальный ключ машины будет отличаться после отказа. Это также одна из причин, по которой учетные записи служб должны быть изменены с помощью диспетчера конфигурации SQL Server, потому что тогда шифрование мастер-ключа службы восстанавливается правильно.

http://mattsql.wordpress.com/2012/11/13/migrating-sql-server-databases-that-use-database-master-keys/