www.smart-ex.kz 1 SQL Server 2005, как MLS система. Докладчик: Щербатов Евгений Компания: SMART-EX Астана 2005 RLS CLS MLS RLS – Row Level Security. Контроль доступа к данным на уровне строк таблицы. CLS – Cell Level Security. Контроль доступа к данным на уровне ячеек таблицы. MLS – Multi Level Secure. Редакции SQL Server 2005 Express Standard Workgroup Mobile Developer RLS/CLS Toolkit Enterprise Evaluation Способы защиты данных в SQL Server 2005 Table1 Table SQL SQL query query security Column1 Column security Rowlevel security 0 Celllevel security Column2 Column3 Column4 Column5 Доступ к таблице “Пациенты” RLS Завотделения Главврач CLS CLS CLS CLS Врач RLS Доступ к таблице “Пациенты” RLS Завотделения Главврач CLS CLS CLS CLS Врач RLS Доступ к таблице “Пациенты” RLS Завотделения Главврач CLS CLS CLS CLS Врач RLS Доступ к таблице “Пациенты” RLS Завотделения Главврач CLS CLS CLS CLS Врач RLS RLS, как часть Сервера Приложений User1 User1 SELECT * FROM T1 WHERE for User1 SELECT * FROM T1 WHERE for User2 SQL Server User2 User2 SELECT * FROM T1 WHERE for User3 Сервер Сервер приложений приложений SELECT * FROM T1 Преимущества Query Analyzer User3 User3 Недостатки Широкие возможности выбора методов реализации Изменение политики безопасности приводит к изменению кода программы Использование высокоуровневых языков программирования Существует возможность несанкционированного доступа к данным в обход сервера приложений. RLS в хранимых процедурах Report Tool RLS User1 User1 Report Tool SP1 User1 User2 SQL Server Report Tool SP2 SP3 SP4 SP5 Query Analyzer Преимущества Недостатки Несанкционированный доступ к данным посредством третьих приложений не принесет результата Изменение политики безопасности требует пересмотреть и обновить код всех хранимых процедур Средства отчетности не работают с хранимыми процедурами Возможности языка хранимых процедур ограничены RLS и представления RLS User1 User2 User1 User1 SQL Server View Report Tool Base Table Преимущества Несанкционированный доступ к данным посредством третьих приложений не приносит результата Средства отчетности работают с представлениями Нет необходимости что-либо программировать Query Analyzer Недостатки Снижается скорость работы запросов Основные понятия RLS Метка – это сущность, описывающая уровень доступа к данным. Назначается каждому пользователю системы и каждой строке таблицы, защищенной RLS. Доминирование. Если пользователь имеет доступ к записи, помеченной какой-либо меткой, то метка пользователя доминирует над меткой записи. Если это не так, то пользователь видеть запись не должен. Уровни безопасности 1 Доступ к информации TOP SECRET SECRET PUBLIC Разным пользователям – разный доступ SELECT * FROM Table1 Table1 ID Name Classification 1 Иванов Иван Иванович SECRET 2 Петров Петр Петрович TOP SECRET 3 Васильев Василий Васильевич PUBLIC Завотделения SECRET ID Name Classification 1 Иванов Иван Иванович SECRET 3 Васильев Василий Васильевич PUBLIC ID Name Classification 3 Васильев Василий Васильевич PUBLIC Медсестра PUBLIC Уровни безопасности 2 Отделы Доступ к информации DEPARTMENT TOP 1 SECRET DEPARTMENT 2 DEPARTMENT 3 SECRET PUBLIC Разным пользователям – разный доступ SELECT * FROM Table1 Table1 ID Name Classification 1 Иванов Иван Иванович SECRET, DEPARTMENT 1 2 Петров Петр Петрович TOP SECRET 3 Васильев Василий Васильевич PUBLIC Главврач TOP SECRET Завотделения SECRET, DEPARTMENT 1 ID Name Classification 2 Петров Петр Петрович TOP SECRET 3 Васильев Василий Васильевич PUBLIC ID Name Classification 1 Иванов Иван Иванович SECRET, DEPARTMENT 1 3 Васильев Василий Васильевич PUBLIC ID Name Classification 3 Васильев Василий Васильевич PUBLIC Медсестра PUBLIC Структура меток и категорий Метка Маркер Маркер Маркер Категория Домен Маркер Маркер Маркер Маркер Маркер Маркер Маркер Маркер Иерархичность (Да/Нет) Отношение (1..1, 0..*, 1..*) Правило (Any, All, InverseAll) Маркер Характеристики категорий Атрибуты Описание Домен Набор маркеров в категории Иерархичность (Да или Нет) В иерархической категории существует упорядоченность значений. При этом каждый маркер приводится в соответствие маркерам на том же или более низких уровнях Атрибут определяет, сколько маркеров данной категории может присутствовать в метке. Правило определяет, должна ли для предоставления доступа метка пользователя иметь любой (Any) или все (All) маркеры, связанные с объектом. Альтернативное правило (InverseAll) означает, что для доступности объекта он не должен иметь ни одного маркера, содержащегося в метке пользователя Отношение (мощность) Правило сравнения Категории БД клиники Категория Домен TOP SECRET Доступ к SECRET информации PUBLIC DEPARTMENT 1 DEPARTMENT 2 Отделы DEPARTMENT 3 Иерархия Отношение Правило Да 1..1 Any Нет 0..* All Отделы Доступ к информации TOP SECRET DEPARTMENT 1 SECRET PUBLIC DEPARTMENT 2 DEPARTMENT 3 Категории БД клиники Категория Домен TOP SECRET Доступ к SECRET информации PUBLIC DEPARTMENT 1 Отделы DEPARTMENT 2 DEPARTMENT 3 Иерархия Отношение Правило Да 1..1 Any Нет 0..* All Отделы Доступ к информации TOP SECRET DEPARTMENT 1 SECRET PUBLIC DEPARTMENT 2 DEPARTMENT 3 Определение доминирующей метки Начало Есть ли еще категории для проверки? Нет А доминирует над В? True Доступ предоставляется Да Да Сравнение маркеров из этой категории Маркеры в А соответствуют маркерам В? Нет А доминирует над В? False В доступе отказывается Any Начало Есть ли еще маркеры в В? Нет × Да Да Иерархическая категория? Нет Проверить, имеется ли в А этот маркер или маркер высшего уровня Проверить, присутствует ли в метке А этот маркер Нет Да Прошла ли проверка? Проверка категории прошла √ Проверка категории не прошла All Начало Есть ли еще маркеры в В? Нет √ Да Да Иерархическая категория? Проверить, имеется ли в А этот маркер или маркер высшего уровня Да Нет Проверка категории прошла Проверка категории не прошла Проверить, присутствует ли в метке А этот маркер Прошла ли проверка? Нет × Реализация RLS RLS реализуется с помощью механизма представлений (view) SQL Server. Пользователю предоставляется доступ к представлению, построенному на основе защищаемой таблицы, но отказывается в доступе к базовой таблице. При этом для каждой БД необходимо: создать дополнительные таблицы для определения категорий, маркеров и меток; создать роли для всех значений маркеров. Кроме того, для каждой защищаемой таблицы необходимо: произвести небольшую модификацию базовой таблицы; определить представление. Структурная модель RLS IO Update IO Delete Update Delete Представление с JOIN ON vwVisibleLabels IO Insert Insert Read Представление, доступное пользователю Базовая таблица Поддерживаемые структуры vwVisibleLabels Маркеры +ID маркеров Метки и определения категорий Роли БД Дополнительные таблицы БД определяют: категории и их атрибуты; значения маркеров и соответствующие им роли; иерархии маркеров; экземпляры уникальных комбинации маркеров; связи значений маркеров с экземплярами меток. Структурная модель RLS IO Update IO Delete Update Delete Представление с JOIN ON vwVisibleLabels IO Insert Insert Read Представление, доступное пользователю Базовая таблица Поддерживаемые структуры vwVisibleLabels Маркеры +ID маркеров Метки и определения категорий Роли БД vwVisibleLabels SELECT Id, Label.ToString() FROM tblUniqueLabel WITH (NOLOCK) WHERE … ? ANY Id IN ( SELECT KeyMappingId FROM tblUniqueLabelMarking WITH(NOLOCK) WHERE CategoryId = <HardCodedCatId> AND IS_MEMBER ( MarkingRoleName ) = 1 ) ALL 1 = ALL( SELECT IS_MEMBER ( MarkingRoleName ) FROM tblUniqueLabelMarking WITH(NOLOCK) WHERE CategoryID = <HardCodedCatID> AND UniqueLabelID = tblUniqueLabel.ID ) vwVisibleLabels CREATE VIEW vwVisibleLabels AS SELECT ID, Label.ToString() FROM tblUniqueLabel WITH ( NOLOCK ) WHERE --Уровни доступа по секретности ID IN ( SELECT KeyMappingID FROM tblUniqueLabelMarking WITH (NOLOCK) WHERE CategoryID = 1 AND IS_MEMBER ( MarkingRoleName ) = 1 ) –-Уровни доступа по отделениям AND 1 = ALL( SELECT IS_MEMBER ( MarkingRoleName ) FROM tblUniqueLabelMarking WHERE CategoryID = 2 AND UniqueLabelID = tblUniqueLabel.ID ) Структурная модель RLS IO Update IO Delete Update Delete Представление с JOIN ON vwVisibleLabels IO Insert Insert Read Представление, доступное пользователю Базовая таблица Поддерживаемые структуры vwVisibleLabels Маркеры +ID маркеров Метки и определения категорий Роли БД Модификация базовой таблицы Базовая таблица ID Column1 Column2 Новый столбец RLSMappingID Таблица уникальных меток Внешний ключ tblUniqueLabel Структурная модель RLS IO Update IO Delete Update Delete Представление с JOIN ON vwVisibleLabels IO Insert Insert Read Представление, доступное пользователю Базовая таблица Поддерживаемые структуры vwVisibleLabels Маркеры +ID маркеров Метки и определения категорий Роли БД Представление первого слоя CREATE VIEW UserTable AS SELECT < столбцы базовой таблицы без RLSMappingID или других служебных столбцов vwVisibleLabels > FROM tblBaseTable (READCOMMITTED), vwVisibleLabels WHERE tblBaseTable.RLSMappingID = vwVisibleLabels.ID GO GRANT SELECT ON UserTable TO <app_users> DENY ALL ON tblBaseTable TO <app_users> Структурная модель RLS IO Update IO Delete Update Delete Представление с JOIN ON vwVisibleLabels IO Insert Insert Read Представление, доступное пользователю Базовая таблица Поддерживаемые структуры vwVisibleLabels Маркеры +ID маркеров Метки и определения категорий Роли БД CLS – защита данных на уровне ячеек CLS обеспечивает: • поддержку произвольного назначения меток безопасности ячейкам; • динамическую оценку метки пользователя для показа только ему доступных ячеек; • приемлемое снижение производительности для больших выборок. Структурная модель CLS Представление, доступное пользователю IO Update IO Delete Read IO Insert vwVisibleLabels Delete Update Маркеры +ID маркеров Insert Представление с JOIN ON vwVisibleLabels Поддерживаемые структуры Метки и определения категорий Роли БД Симметричные ключи и сертификаты Базовая таблица Хранимая процедура CLS Шифрование в SQL Server 2005 Windows Level Service Master Key encrypted with DPAPI SQL Server Level Service Master Key Database Level Database Master Key Certificates Asymmetric Keys Symmetric Keys Symmetric Keys Symmetric Keys Data Data Data Пример расшифровки данных CREATE VIEW MyTable AS SELECT ID, DecryptByKey ( SensitiveData ), DecryptByKey ( OtherSensitiveData ), NonSensitiveData, FROM BaseTable Хранимая процедура CLS CREATE PROCEDURE usp_EnableCellVisibility WITH EXECUTE AS 'KeyBroker' AS DECLARE @KeyName nvarchar(256) DECLARE @CertName nvarchar(256) DECLARE Key_Cursor CURSOR LOCAL FORWARD_ONLY STATIC FOR SELECT KeyName, CertName FROM vwVisibleLabels EXECUTE AS CALLER OPEN Key_Cursor REVERT FETCH NEXT FROM Key_Cursor INTO @KeyName, @CertName WHILE @@FETCH_STATUS = 0 BEGIN EXEC (' OPEN SYMMETRIC KEY ' + @KeyName + ' DECRYPTION BY CERTIFICATE ' + @CertName ) FETCH NEXT FROM Key_Cursor INTO @KeyName, @CertName END CLOSE Key_Cursor DEALLOCATE Key_Cursor Структурная модель CLS Представление, доступное пользователю IO Update IO Delete Read IO Insert vwVisibleLabels Delete Update Маркеры +ID маркеров Insert Представление с JOIN ON vwVisibleLabels Поддерживаемые структуры Метки и определения категорий Роли БД Симметричные ключи и сертификаты Базовая таблица Хранимая процедура CLS Преобразование типов данных при шифровании Encrypt Базовая таблица ID Column1 Column2 Column3 . . . varchar nvarchar varbinary ColumnN Структурная модель CLS Представление, доступное пользователю IO Update IO Delete Read IO Insert vwVisibleLabels Delete Update Маркеры +ID маркеров Insert Представление с JOIN ON vwVisibleLabels Поддерживаемые структуры Метки и определения категорий Роли БД Симметричные ключи и сертификаты Базовая таблица Хранимая процедура CLS Представление CLS CREATE VIEW UserTable AS SELECT ID, DecryptByKey ( SensitiveData ), CONVERT ( money, CONVERT(varchar(50), DecryptByKey ( SensitiveMoneyData ) ) ), NonSensitiveData, FROM tblBaseTable (READCOMMITTED), vwVisibleLabel WHERE tblBaseTable.RLSMappingID = vwVisibleLabel.ID GRANT SELECT ON UserTable TO <app_users> DENY ALL ON tblBaseTable TO <app_users> Влияние на производительность Объем тестируемого набора данных : 1 миллион записей Спецификации тестового сервера: Процессор Память Диск (без EFS) ОС СУБД .NET Framework 2 * 550 МГц 512 Мб 4 * 18 Гб @ 10000 об/мин 1 * 20 Гб с оптическим каналом SAN Windows 2003 Standard SQL Server 2005 Beta 2 1.1 для кода приложения 2.0 для кода SQL Server Усредненные результаты: Операции Снижение производительности Вставка записей ~40% Запрос на выборку <10% Агрегатные запросы ~10-50% http://www.microsoft.com/technet/prodtechnol/sql/2005/multisec.mspx Итоги При реализации RLS/CLS технологии применена теория меток. Это позволяет создавать очень гибкие политики безопасности. Для защиты таблиц базы данных RLS/CLS сервисами достаточно определить политику безопасности и указать SQL Server список защищаемых таблиц. При реализации RLS/CLS сервисов использовались решения, которые позволяют сохранить высокую скорость обработки данных, защищенных RLS/CLS. Ресурсы http://www.microsoft.com/technet/prodt echnol/sql/2005/ www.rsdn.ru www.sql.ru www.gotdotnet.ru www.smart-ex.kz 50