Использование SQL Server совместно с Encrypting File System (EFS)

ПУБЛИКАЦИИ  

По материалам статьи Brian Kelley Implementing Encrypting File System (EFS) with SQL Server

В своей статье посвящённой защите SQL Server, Chris Kempster кратко представил новую опцию, появившуюся в Windows 2000, это Encrypting File System (EFS). EFS предоставляет полностью прозрачный механизм шифрования файлов, что позволяет использовать его для прикладных программ типа SQL Server. EFS может быть использован DBA для защиты критически важных файлов баз данных SQL Server. В конце концов, если нападающий сможет копировать незашифрованные файлы баз данных SQL Server, он сможет без особых проблем прикрепить эти файлы к собственному SQL Server. Задействовав EFS Вы сможете зашифровать все ваши файлы баз данных так, что только SQL Server будет иметь к ним доступ.

СОДЕРЖАНИЕ

1. Введение
2. Подготовка
2.1. Восстановление зашифрованных данных
2.2. Учётная запись сервиса MSSQLServer
2.3. Эффективность
3. Пошаговое руководство
3.1. Использование GUI
3.2. Использование cipher.exe
3.2.1. Отображение состояния кодирования
3.2.2. Получение справки: параметр /?
3.2.3. Шифрование: параметр /E
3.2.4. Дешифрация: параметр /D
3.2.5. Включить обработку файлов: параметр /A
3.2.6. Уничтожение следов: параметр /W
3.2.7. Принудительная шифрация всех файлов: параметр /F
3.2.8. Обработка вложенных объектов: параметр /S
4. Разрешение проблем с EFS и SQL Server
4.1. SQL Server не запускается
4.2. База данных помечена Suspect
4.3. Шифрация и сжатие одновременно не возможны
4.4. Шифруются только NTFS тома
4.5. Access Denied
4.6. File in Use

1. Введение

Фактически, копирование файлов баз данных с одного сервера на другой и затем, прикрепление их на новом SQL Server используя sp_attach_db является одним из методов перемещения баз данных наряду с резервированием - восстановлением, Copy Database Wizard или посредством сгенерированных SQL скриптом bcp файлов. Копирование и повторное прикрепление может быть выполнено очень легко, и самой большой опасностью здесь является то, что тот, кто использует этот механизм, может заполучить файлы баз данных и автоматически получит доступ к хранимым в них данным. EFS предоставляет относительно отказоустойчивое решение этой проблемы за счёт следующего:

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

В этой статье автор представляет краткий обзор того, как работает EFS, что необходимо предпринять, что бы использовать её в вашей системе, и как разрешать проблемы возникающие с EFS и SQL Server. Автор не будет вдаваться в подробности работы EFS, так как это уже сделано в других статьях. Если Вас интересует информация такого рода, Вы можете изучить статьи Mark Russinovich: Inside Microsoft Windows 2000

О внутренней организации EFS можно узнать из статей журнала Windows и .NET Magazine:

· Inside Encrypting File System, Part 1
· Inside Encrypting File System, Part 2

[Содержание]

2.Подготовка

Перед внедрением EFS в Вашу систему, необходимо предпринять некоторые предварительные меры. Необходимо будет защитить процесс восстановления данных, настроить EFS на работу под учётной записью сервиса MSSQLServer и обеспечить приемлемый уровень отвлекаемых на защиту данных ресурсов.

[Содержание]

2.1. Восстановление зашифрованных данных

Процесс восстановления данных из зашифрованного файла может оказаться не лёгким, если пользователь, который зашифровал файл, был удалён или его профиль был повреждён, а также возможен целый ряд причин, по которым, имея зашифрованный файл, Вы не сможете его расшифровывать, как это делается в штатном режиме. Проблемы, которые не позволят восстановить данные из резервной копии, должны быть учтены и разрешены DBA на этапе проектирования схемы резервирования и восстановления критически важных для функционирования базы данных файлов.
Планирование процесса восстановления не является сложной задачей:

· Экспортируйте ключи, которыми обычно шифруется файл.
· Храните ключи в защищённом месте на сменных носителях (например, на дискете).
· Используйте заданный по умолчанию recovery agent, или заведите для этого собственного, специального агента.
· Экспортируйте файл, используя резервное копирование Windows 2000.
· Передайте копию агенту восстановления (в случае необходимости).
· Установите ключ для агента восстановления.
· Используйте шифрование файла.

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

Windows 2000 Server Resource Kit: Distributed Systems Guide
Administrative Procedures

Для восстановления данных ознакомьтесь с разделом Distributed Systems Guide в справочнике по системе, в котором описано всё, что Вы должны об этом знать.

[Содержание]

2.2. Учётная запись сервиса MSSQLServer

Если Вы хотите, чтобы SQL Server мог читать зашифрованные файлы и шифровал их, используйте для настройки EFS учетную запись, под которой стартует сервис SQL Server. Причина проста: приватный ключ, с помощью которого расшифровывается ключ кодирования файла, используемый для расшифровки самого файла, хранится в персональном хранилище профиля пользователя. В указанных выше статьях о EFS объясняется, как работает такое кодирование. Обязательно выполните это требование, чтобы гарантировать, что приватная информация, используемая для шифрации файла, хранится в собственном кэше пользователя. После этого, те пользователи, которые не имеют соответствующего ключа для кодирования/декодирования файла, не смогут получить доступ к файлу. Конечно, есть и исключения, основанные на использовании запросов через API и на некоторых других методах, но они являются более сложными, чем использование учетной записи сервиса. Если Ваш SQL Server запускается под учётной записью LocalSystem (LocalSystem имеет привилегии администратора), Вы должны создать локального пользователя сервера или домена, и запускать SQL Server под этой учётной записью. Войдите в систему под такой учетной записью (тут Вы не можете использовать LocalSystem) и Вы будете готовы защитить с помощью EFS файлы базы данных.

[Содержание]

2.3. Эффективность

Использование EFS приведёт к отвлечению на её поддержку ресурсов сервера. Автор не наблюдал значительного снижения эффективности, хотя Ваши результаты могут отличаться. Оценка, которая представлена в PowerPoint presentation from Microsoft Australia (Slide 19) показывает, что снижение эффективности обычно не превышает 5 %. В любом случае, стоит тщательно взвесить, насколько ваша система уязвима к копированию файлов базы данных и стоит ли для устранения такой уязвимости жертвовать таким снижением эффективности вашей системы.

[Содержание]

3. Пошаговое руководство

Процедура шифрации файлов базы данных довольно проста. Windows Explorer сделает большинство работы за Вас. Также есть команда cipher.exe, которая используется для шифрации и дешифрации посредством командной строки. Автор вначале опишет процедуры настройки через GUI, а затем поговорит и о cipher.exe.

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

[Содержание]

3.1. Использование GUI

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


C:\Program Files\Microsoft SQL Server\MSSQL\Data

перейдите в папку:


C:\Program Files\Microsoft SQL Server\MSSQL\ 

1. Вы должны видеть в текущем окне проводника папку Data. Щелкните правой кнопкой мыши по этой папке (или файлу) и выберите пункт Properties.
2. Появится диалоговое окно Properties, и в нём нужно нажать кнопку Advanced.
3. В диалоговом окне Advanced Attributes пометьте чекбокс - Encrypt contents to secure Data, что приведёт к включению кодирования, и нажмите OK, чтобы принять изменения для окна Advanced Attributes.
4. Щёлкните по OK ещё раз, чтобы выйти из диалогового окна Properties.
4.1. Если Вы шифруете папку, должно быть запрошено подтверждение этой операции. Отметьте чекбокс Apply changes to this folder, subfolders and files и щёлкните OK. Начнется процесс кодирования, который может занять продолжительное время.
4.2. Если Вы шифруете файл, выберите в окне подтверждения опцию Always encrypt only the file.

Если Вы планируете в будущем расшифровать файлы (например, Вы собираетесь перемещать файлы на новый сервер), Вы можете повторить те же шаги, только не отмечать чекбокс Encrypt contents to secure data. После этого, у Вас будет запрошено соответствующее подтверждение операции.

[Содержание]

3.2. Использование cipher.exe

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

[Содержание]

3.2.1. Отображение состояния кодирования

Если Вы не укажите для cipher.exe никаких ключей (параметров), она возвратит состояние кодирования всех файлов и подпапок в текущем каталоге. В полученном в результате работы утилиты листинге, помеченные символом E файлы и папки являются зашифрованными, а символом U будут помечены не зашифрованные или нормальные объекты. Ниже представлен пример каталога, в котором есть зашифрованных и незашифрованные файлы и папки. Автор не стал шифровать весь каталог только для того, чтобы продемонстрировать как работает cipher.exe (вспомните рекомендации):


C:\temp\EFSTest>cipher

Listing C:\temp\EFSTest\
New files added to this directory will not be encrypted.

U EFSSubFolder
E encrypt1.txt
E encrypt2.txt
U FileNoEncrypt.txt

Поскольку каталог не обозначен для кодирования, любые новые файлы, которые могут быть добавлены в каталог, не будут зашифрованы. Папка EFSSubFolder и файл FileNoEncrypt.txt не зашифрованы. Файлы encrypt1.txt и encrypt2.txt зашифрованы и имеют префикс E перед своим именем.
Также Вы можете использовать знаки подстановки (спецификаторы). Например, если нужно показать все каталоги и файлы, начинающиеся на "encr", нужно сделать следующее:


C:\temp\EFSTest>cipher encr*

Listing C:\temp\EFSTest\
New files added to this directory will not be encrypted.

E encrypt1.txt
E encrypt2.txt

Знаки подстановки могут использоваться как при шифровке, так и при расшифровке.

[Содержание]

3.2.1. Получение справки: параметр /?

Если Вы не помните параметры для утилиты cipher.exe, используйте /?, после чего вы получите на экране листинг с подобным описанием всех параметров. Ниже представлен пример листинга, полученный на русской редакции Microsoft Windows 2000 [Версия 5.00.2195]:


C:\>cipher /?
Показывает или изменяет шифрование папок и файлов в NTFS-разделах.

  CIPHER [/E | /D] [/S:<папка>] [/A] [/I] [/F] [/Q] [/H] [/K] [<путь> [...]]

  CIPHER /W:<папка>

    /E     Зашифровывает указанные папки. Папки маркируются таким образом,
           что файлы, добавленные впоследствии, будут также зашифрованы.
    /D     Расшифровывает указанные папки. Папки маркируются таким образом,
           что файлы, добавленные впоследствии, не будут зашифрованы.
    /S     Выполняет выбранную операцию в указанной папке и всех подпапках.
    /A     Выполняет операцию как для файлов, так и для папок.
           Рекомендуется шифровать файл и папку, которая его содержит,
           потому что при внесении изменений в зашифрованный файл в
           незашифрованной папке шифрование файла может быть снято.
    /I     Продолжает выполнение указанной операции даже после обнаружения
           ошибок. По умолчанию, CIPHER прекращает работу при возникновении
           ошибок.
    /F     Принудительно шифрует все выбранные объекты, даже если они
           уже зашифрованы. По умолчанию ранее зашифрованные объекты
           повторно не шифруются.
    /Q     Выводит только наиболее важную информацию.
    /H     Отображает скрытые или системные файлы. По умолчанию эти файлы
           не отображаются.
    /K     Создает новый ключ шифрования файлов для пользователя,
           запустившего CIPHER. Если задан этот параметр, все прочие
           параметры игнорируются.
    /W     Затирает всю информацию в неиспользуемом дисковом пространстве на
           указанном томе. Если задан этот параметр, все прочие параметры
           игнорируются. Указанная папка может находиться в любом месте
           локального тома. Если это точка подключения, указывающая на другой
           том, то будет затерта информация в неиспользуемом пространстве
           этого тома.

    <папка>  Задает путь к папке.
    <путь>   Задает шаблон, файл или папку.

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

C:\>

Если Вы используете черточку вместо косой черты, утилита не поймёт, что Вы запрашиваете справку. Скорее всего, она проверит каталог и будет думать, что -? является знаком подстановки.

[Содержание]

3.2.3. Шифрование: параметр /E

Для шифрации папки используется параметр /E. Например, если нужно зашифровать каталог EFSTest, являющийся подкаталогом C:\Temp (обратите внимание, автор использует имя каталога EFSTest как спецификатор, чтобы шифровался только этот каталог):


C:\temp>cipher /E EFSTest

Encrypting directories in C:\temp\

EFSTest [OK]

1 directorie(s) within 1 directorie(s) were encrypted.

Если использовать эту команду в таком упрощённом виде, будут зашифрованы только каталоги. Необходимо указать другой параметр, чтобы гарантировать шифрацию получаемых файлов. Кроме того, эта команда не зашифрует подкаталоги.

[Содержание]

3.2.4. Дешифрация: параметр /D

Для расшифровки используется параметр /D. Мы снова будем использовать EFSTest в качестве спецификатора:


C:\temp>cipher /D EFSTest

Decrypting directories in C:\temp\

EFSTest [OK]

1 directorie(s) within 1 directorie(s) were decrypted.

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

[Содержание]

3.2.5. Включить обработку файлов: параметр /A

Если просмотреть каталог C:\Temp\EFSTest\, мы увидим следующее (для этого примера внесены изменения в состав файлов и подкаталогов):


C:\temp\EFSTest>dir
Volume in drive C has no label.
Volume Serial Number is E4D5-482E

Directory of C:\temp\EFSTest

12/06/2002 02:00p <DIR> .
12/06/2002 02:00p <DIR> ..
12/06/2002 01:24p <DIR> EFSSubFolder
12/06/2002 01:58p 15 encryptme.txt
1 File(s) 15 bytes
3 Dir(s) 13,081,638,912 bytes free

Следующий пример шифрует папку:


C:\temp\EFSTest>cipher /E

Encrypting directories in C:\temp\EFSTest\

EFSSubFolder [OK]

1 directorie(s) within 1 directorie(s) were encrypted.

Если нужно зашифровать файл encryptme.txt, используется дополнительный параметр /A:


C:\temp\EFSTest>cipher /E /A

Encrypting files in C:\temp\EFSTest\

EFSSubFolder [OK]
encryptme.txt [OK]

2 file(s) [or directorie(s)] within 1 directorie(s) were encrypted.

Converting files from plaintext to ciphertext may leave sections of old
plaintext on the disk volume(s). It is recommended to use command
CIPHER /W:directory to clean up the disk after all converting is done.

Последнее сообщение на экране немного настораживает. Причина, по которой оно появляется в том, что когда EFS создает зашифрованный файл, это будет новый файл, для того, чтобы если процесс будет отменён, не был потерян первоначальный файл. Когда кодирование завершено, не зашифрованная версия удаляется. Однако, Вы знает, что данные ещё могут оставаться на диске. С помощью специальных утилит может считывать напрямую содержимое диска, и существует потенциальная возможность восстановления части удаленного файла. Для решения этой проблемы существует следующий параметр.

[Содержание]

3.2.6. Уничтожение следов: параметр /W

Имейте в виду, что даже если файл был удален операционной системой, части файла могут ещё какое то время существовать в читаемой форме непосредственно на диске. Если Вы хотите устранить это, используйте параметр /W. Этот параметр приводит к очистке каждого бита свободного пространства на диске. Это единственный способ обезопасить данные от прочтения из удалённых файлов с помощью специальных утилит, читающих информацию напрямую с диска. После использования параметра /W, всё свободное пространство будет заполнено символами пробела (0x00). Эта операция может занять весьма продолжительное время, потому что будет очищен диск целиком, который может быть фрагментирован. Для очистки каталога C:\Temp\EFSTest, необходимо исполнить следующую команду:


cipher /W:C:\Temp\EFSTest

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


C:\Temp>cipher /W:c:\temp\EFSTest
To remove as much data as possible, please close all other applications while
running CIPHER /W.
Writing 0x00
.....^C

Вы можете прервать процесс очистки, нажав CTRL-BREAK, если он занимает слишком много времени. В таком случае, некоторые из незашифрованных данных могут всё ещё оставаться на диске.

[Содержание]

3.2.7. Принудительная шифрация всех файлов: параметр /F

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


C:\temp\EFSTest>cipher /E /A /F

Encrypting files in C:\temp\EFSTest\

EFSSubFolder [OK]
encryptme.txt [OK]

2 file(s) [or directorie(s)] within 1 directorie(s) were encrypted.

Converting files from plaintext to ciphertext may leave sections of old
plaintext on the disk volume(s). It is recommended to use command
CIPHER /W:directory to clean up the disk after all converting is done.

Мы уже зашифровали папку и файл, но параметр /F вынуждает всё равно исполнить шифрацию.

[Содержание]

3.2.8. Обработка вложенных объектов: параметр /S

Для шифрации всех подкаталогов данной папки используется параметр /S. Синтаксис следующий: /S: <каталог> Папример:


C:\temp>cipher /E /A /S:c:\temp\EFSTest

Setting the directory c:\temp\EFSTest to encrypt new files [OK]

Encrypting files in c:\temp\EFSTest\

EFSSubFolder [OK]
encryptme.txt [OK]

Encrypting files in c:\temp\EFSTest\EFSSubFolder\

anotherFile.txt [OK]

4 file(s) [or directorie(s)] within 3 directorie(s) were encrypted.

Converting files from plaintext to ciphertext may leave sections of old
plaintext on the disk volume(s). It is recommended to use command
CIPHER /W:directory to clean up the disk after all converting is done.

[Содержание]

4. Разрешение проблем с EFS и SQL Server

Есть несколько типичных проблем, с которыми Вы можете столкнуться при использовании EFS совместно с SQL Server.

[Содержание]

4.1. SQL Server не запускается

Возможно, Вы зашифровали базу master или целиком каталог Data не под той учётной записью, под которой стартует SQL Server. Если это так, сервер баз данных не будет запускаться. Например:


C:\Program Files\Microsoft SQL Server\MSSQL\Data>net start mssqlserver
The MSSQLSERVER service is starting.
The MSSQLSERVER service could not be started.

The service did not report an error.

More help is available by typing NET HELPMSG 3534.

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

[Содержание]

4.2. База данных помечена Suspect

Если Вы выборочно шифруете файлы баз данных, наиболее вероятная причина появления этой проблемы, если помеченная Suspect база данных была зашифрована другой учётной записью. Что бы проверить это предположение, расшифруйте файлы помеченной базы и перезапустите SQL Server. Если база будет успешно воспринята сервером, попробуйте зашифровать её, зарегистрировавшись на сервере под учётной записью, от имени которой стартует SQL Server, и перегрузитесь.

[Содержание]

4.3. Шифрация и сжатие одновременно не возможны

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

[Содержание]

4.4. Шифруются только NTFS тома

EFS работает только на NTFS. Поэтому, если Вы копируете зашифрованный файл на диск, который не является томом NTFS, Вы потеряете шифрацию. Вы не будете предупреждены об этом системой, так что просто имейте это ввиду, если захотите перенести зашифрованные файлы на FAT или FAT32.

[Содержание]

4.5. Access Denied

Если кто-то, кроме учетной записи сервиса, попробует скопировать зашифрованный файл, то будет выдано сообщение об ошибке: Cannot copy *****: Access is denied. The source file may be in use. Кроме того, что будет получен отказ в исполнении такой операции вы получаете возможность аудита таких событий.

[Содержание]

4.6. File in Use

И наконец, когда Вы шифруете или дешифруете файлы, Вы можете получать следующую ошибку:


C:\Program Files\Microsoft SQL Server\MSSQL\Data>cipher /E /A pubs.mdf

Encrypting files in C:\Program Files\Microsoft SQL Server\MSSQL\Data\

pubs.mdf [ERR]
pubs.mdf: The process cannot access the file because it is being used by another process.

0 file(s) [or directorie(s)] within 1 directorie(s) were encrypted.

Причина возникновения этой ошибки в том, что SQL Server может держать файл открытым. Открытые файлы не могут быть зашифрованы (операционная система нуждается для этого в монопольном доступе). Попробуйте остановить сервис SQL Server и повторить попытку шифрации.

[Содержание]


Перевод: Александр Гладченко  2003г.

ПУБЛИКАЦИИ

Скачать электронную карту Ангарска бесплатно
Сайт управляется системой uCoz