
- •Хранимые процедуры Управление процессом компиляции хранимых процедур
- •Управление автоматическим выполнением хранимых процедур
- •Использование индексов
- •Планирование использования индексов
- •Создание индексов средствами t-sql
- •Использование курсоров
- •Динамические курсоры
- •Последовательные курсоры
- •Ключевые курсоры
- •Управление курсорами.
- •Работа с триггерами
- •Пример триггера
- •Система безопасности sql Server
- •Общие правила разграничения доступа
- •Аутентификация и интеграция с доменом Windows
- •Режим аутентификации Wondows
- •Режим аутентификации sql Server
- •Права доступа
- •Компоненты системы безопасности sql Server
- •Создание пользователей
- •Роли приложения
- •Защита данных в sql Server
- •Управление правами доступа к объектам базы данных средствами t-sql
- •Репликация данных
- •Понятие репликации данных
- •Издатель
- •Подписчик
- •Дистрибьютор
- •Механизмы репликации
Защита данных в sql Server
Как бы хорошо не была спланирована система безопасности SQL Server, остаётся возможность извлечь данные и посмотреть их на другом компьютере. Кроме того с помощью специальных устройств данные могут быть перехвачены при передаче их по сети. Поэтому необходимо продумать средства физической защиты данных. Данные в файлах базы данных хранятся в открытой форме, то есть их можно просмотреть даже в текстовом редакторе. Данные будут не структурированы, но часть информации всё-таки можно будет прочитать.
Шифрование – это метод, используемый в SQL Server для изменения данных до нечитаемой формы. Использование шифрования гарантирует, что ценная конфиденциальная информация не будет просмотрена кем бы то ни было. Можно будет скопировать данные, но ничего нельзя будет с ними сделать. Для просмотра данных авторизированными пользователями используется дешифрование.
SQL Server позволяет без дополнительного программирования шифровать следующие данные:
Любые данные, передаваемые между сервером и клиентом по сети, пароли учётных записей SQL Server и ролей приложения, код хранимых процедур, представлений и триггеров.
Пароли учётных записей и ролей приложения всегда сохраняются в системных таблицах SQL Server в зашифрованном виде. Это защищает их от просмотра любым пользователем включая администратора. Кроме того пароль роли приложения может быть зашифрован перед отправкой его на сервер.
Если триггер, представление или хранимая процедура содержит данные или алгоритм, которые необходимо сохранить в тайне, используется шифрование этих объектов. Использование шифрования при передаче по сети практически гарантирует, что никакое приложение или устройство не сможет их прочитать, даже если их перехватят. Использование шифрования соединения позволяет так же предотвратить перехват паролей пользователей.
В своей работе SQL Server использует множество файлов. Это файлы базы данных, журналы ошибок, резервные копии, файлы для экспорта – импорта данных и многие другие. Процесс, работающий с SQL Server должен иметь доступ к этим данным. Для этого необходимо предоставить соответствующие права учётным записям, которые используются, например, для запуска SQL Server.
В такой ситуации лучше всего управлять правами доступа непосредственно на уровне файлов и каталогов. Если SQL Server запускается как служба, необходимо предоставить полные права доступа учётным записям, используемым для запуска служб.
С целью ограничения возможности неавторизованного доступа для файлов SQL Server необходимо установить запрет на чтение, удаление, модификацию и выполнение всем пользователям, кроме пользователей, непосредственно работающих с SQL Server.
Управление правами доступа к объектам базы данных средствами t-sql
Права в SQL Server можно разделить на 3 основных категории.
Разрешения для объектов. Работа с данными и выполнение хранимых процедур требует наличие класса доступа, называемого разрешением для объектов. Разрешение для объектов контролирует возможности выполнения команд SELECT, INSERT, UPDATE, DELETE для таблиц и представлений. Действия с хранимыми процедурами контролируются разрешением либо запрещением их выполнения, то есть разрешением или запрещением команды EXECUTE.
Разрешения для команд T-SQL. Этот класс разрешений контролирует возможность создания объектов базы данных, а так же создания самой базы данных и выполнения процедур резервного копирования.
Неявные разрешения. Этот класс разрешений контролирует действия, которые могут быть выполнены только представителями ролей сервера или владельцами объекта в базе данных. Неявные разрешения не предоставляются пользователям напрямую, он получает их только при определённых обстоятельствах. Например, пользователь может стать владельцем объекта базы данных только если он сам создаст этот объект, либо, если другой владелец объекта передаст ему права владения своим объектом. Владелец объекта имеет все права на выполнение любых действий с объектом, причём эти права нигде явно не указываются.
Для конкретного действия, контролируемого разрешением, возможны 3 варианта состояния доступа.
Предоставление.
Запрещение.
Неявное отклонение.
В SQL Server существует возможность контролировать права доступа не только на уровне таблиц, но и на уровне отдельных колонок.
Для предоставления прав доступа используется команда GRANT.
GRANT {ALL | permissions [..n]}
{[(column[..n])
ON {table | view}
| ON {table | view} [(column[..n])]
| ON {stored_procedure}
TO security_account
[WITH GRANT OPTION]
[AS {group | role}]
Для разрешения выполнения команд используется следующий синтаксис.
GRANT {ALL | Statement[..n]}
TO security_account[..n]
При запрещении доступа в T-SQL аннулируются все разрешения доступа пользователя на любом уровне иерархии, при этом гарантируется, что доступ останется запрещённым независимо от разрешений, предоставленных на более высоком уровне.
Но иногда необходимо временно ограничить доступ определённым пользователям к таблице. В этом случае вместо того, чтобы запрещать пользователям доступ, рекомендуется создать роль ,которой будет запрещён доступ к таблице и включить пользователей в эту роль.
Для запрещения пользователям доступа к объектам базы данных используется команда DENY.
DENY {ALL | permissions [..n]}
{[(column[..n])
ON {table | view}
| ON {table | view} [(column[..n])]
| ON {stored_procedure}
TO security_account
[CASCADE]
Для запрещения выполнения команд используется следующий синтаксис команды DENY.
DENY {ALL | permissions [..n]}
TO security_account
Неявное отклонение доступа подобно запрещению доступа с тем отличием, что оно действует только на том уровне, на котором определено. Если пользователю на определённом уровне неявно отклонён доступ, то он может получить его на другом уровне иерархии, если входит в роль, имеющую права доступа.
Для неявного отклонения доступа используется команда REVOKE.
REVOKE {ALL | permissions [..n]}
{[(column[..n])
ON {table | view}
| ON {table | view} [(column[..n])]
| ON {stored_procedure}
TO security_account
[AS {group | role}]
Для неявного отклонения использования команд используется следующий синтаксис.
REVOKE {ALL | permissions [..n]}
TO security_account
Описание параметров выше перечисленных команд:
All. Означает, что пользователю будут предоставлены все возможные разрешения.
permissions. Список доступных операций, которые предоставляются пользователю. Можно предоставить одновременно несколько разрешений, перечислив их через запятую.
Statement. Список команд. Предоставление разрешений на выполнение команд T-SQL
security_account. Указывается имя объекта системы безопасности, которое необходимо включить в роль. Это могут быть включённые записи SQL Server или группы пользователей Windows.
WITH GRANT OPTION. Использование данного параметра позволяет пользователю, которому предоставляются права, назначать права на доступ к объектам для других пользователей.
AS {group | role}. Этот параметр позволяет указать участие пользователя в роли, которой предоставляется возможность предоставлять права другим пользователям.
CASCADE. Позволяет отзывать права не только у данного пользователя, но и у всех пользователей, которым он предоставил права.