SQL Server 2005, как MLS система

advertisement
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
Download