|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
9. Некоторые вопросы безопасности при работе с SQL ServerБезопасность SQL Server и систем Windows - тема очень большая, и ее полностью рассмотреть в рамках этого курса вряд ли возможно. Основы системы безопасности SQL Server рассматриваются в официальном учебном курсе по администрированию SQL Server. В этом модуле рассматриваются некоторые темы, связанные с безопасностью, которые не попали в официальный учебный курс. 9.1 Защищенность при использовании шифрованных определений объектовШифрованные определения объектов на SQL Server 2000, параметр WITH ENCRYPTION, расшифровка зашифрованных определений объектов, утилита dSQLSRVD, хранимая процедура DECRYPRT2K В SQL Server вы можете создавать четыре типа объектов (хранимые процедуры, представления, пользовательские функции и триггеры) с параметром WITH ENCRYPTION. Этот параметр позволяет зашифровать определение объекта таким образом, что объект можно будет использовать, но получить его определение стандартными способами будет невозможно. Это средство рекомендуется Microsoft к использованию: · когда необходимо скрыть код вашего приложения, например, в целях защиты от несанкционированного копирования; · для повышения безопасности работы приложения - для того, чтобы скрыть информацию о внутреннем его устройстве. На практике же никакой защиты применение стандартных средств шифрования не обеспечивает. Алгоритм, используемый при шифровании определений объектов, выглядит так: 1) SQL Server берет GUID той базы данных, в которой создается объект, и значение столбца colid таблицы syscomments для создаваемого объекта (чаще всего его значение 1 или 2), и производит их конкатенацию; 2) из полученного значения генерируется ключ при помощи алгоритма SHA; 3) этот хэш используется в качестве входящего значения при применении еще одного алгоритма хэширования - RSA, при помощи которого генерируется набор символов, равный по длине шифруемому определению объекта; 4) с этим набором символов и с реальным определением объекта производится операция XOR. В результате получаются данные, которые помещаются в столбец ctext таблицы syscomments. У этой схемы есть два слабых места: · нам ничего не мешает получить исходные значения (GUID и colid) для выполнения тех же самых операций и получить ключ на расшифровку. Это можно сделать, например, при помощи утилиты dSQLSRVD, но для получения GUID базы данных (и для запуска этой утилиты) нам нужны права системного администратора; · если у нас есть права на создание объектов в базе данных, можно сгенерировать точно такой же ключ для объекта, определение которого нам уже известно (путем сравнения шифрованного определения с незашифрованным) и использовать его для расшифровки определения другого объекта. Как можно расшифровать зашифрованные объекты на SQL Server: · использовать утилиту dSQLSRVD (на компакт-диске). Она позволяет выбрать любой зашифрованный объект на сервере и записать его определение в текстовый файл; · использовать хранимую процедуру DECRYPRT2K. Код на создание данных хранимых процедур (в разных вариантах и с разными объяснениями), которые расшифровывают определение зашифрованных объектов - в каталоге SPDECRYPT на компакт-диске. Там же можно познакомиться с идеями и кодом данных хранимых процедур. Для более надежной защиты текста объектов на сервере необходимо использовать средства сторонних производителей, например, SQL Shield (на компакт-диске).
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||