Диго С.М. Базы данных проектирование и использование (1084447), страница 64
Текст из файла (страница 64)
Механизм двухфазной фиксации транзакции имеет ряд недостатков:
-
захват всех необходимых данных на всех серверах может надолго заблокировать доступ к данным;
-
велика вероятность отказа от обновления из-за какой-нибудь, пусть единичной, ошибки;
-
если какой-либо сервер или выход в глобальную сеть окажется недоступным, произойдет потеря транзакции;
-
использование в структуре сети координирующего узла связано с дополнительной опасностью, поскольку выход его из строя приведет к блокировке данных, затронутых транзакцией, до тех пор, пока он не будет восстановлен;
-
сложность обработки транзакции при использовании этого протокола сама служит источником дополнительного трафика, что увеличивает время реакции системы.
Кроме того, недостаточная пропускная способность сети и малая скорость передачи данных могут увеличить время реакции до недопустимого уровня.
Разные СУБД поддерживают разные технологии обеспечения целостности.
10.6.2. Средства защиты данных
Способы защиты данных
При работе в многопользовательском режиме особую актуальность приобретает защита данных от несанкционированного доступа. Существуют различные приемы управления доступом к базе данных. Эти приемы обеспечивают разный уровень безопасности. Некоторые из них присущи любым информационным системам, другие - конкретным СУБД.
Шифрование/дешифрование. Шифрование базы данных - это простейший способ защиты, при котором ее файл видоизменяется и становится недоступным для чтения с помощью стандартных служебных программ или текстовых редакторов. Шифрование незащищенной базы данных неэффективно, поскольку можно непосредственно открыть исходную базу данных и получить полный доступ к ее объектам. Шифрование обычно применяется при электронной передаче базы данных или сохранении ее на внешний носитель (дискету, компакт-диск и т.п.)
Дешифрование базы данных - это операция, обратная шифрованию.
Отображение и скрытие объектов. Другим способом защиты объектов в базе данных от посторонних пользователей является скрытие всей базы данных при просмотре каталогов средствами операционной системы или скрытие отдельных объектов БД при работе с базой данных средствами конкретной СУБД. Этот способ защиты не является достаточно надежным, поскольку скрытые объекты относительно просто можно отобразить.
Использование параметров запуска. Эти параметры позволяют задать стартовую форму, которая автоматически открывается при открытии базы данных. При определении формы можно скрыть окно базы данных, предоставляемое СУБД, и установить собственную кнопочную форму. При этом пользователь может выполнять с базой данных только те действия, которые допускает интерфейс, предоставляемый данным приложением.
Использование пароля. Другим простейшим способом защиты является установка пароля для открытия базы данных. После установки пароля при каждом открытии базы данных будет появляться диалоговое окно, в которое требуется ввести пароль. Только те пользователи, которые введут правильный пароль, смогут открыть базу данных.
В принципе может быть установлен единый пароль для всех пользователей БД. Но наиболее гибким и распространенным способом защиты базы данных является защита на уровне пользователя, при котором каждому пользователю присваивается пароль. При запуске СУБД каждый пользователь должен быть идентифицирован; система проверяет соответствие идентификатора пользователя и его пароля.
Для каждого пользователя могут быть определены не только уникальный код, но и уровень доступа, и объекты, доступ к которым получает пользователь.
Многие СУБД позволяют кроме единичных пользователей создавать еще и их группы.
Запрещение репликации базы данных. Как указывалось выше, репликация позволяет пользователям создавать копию общей базы данных. Это может быть в принципе использовано и для дальнейшего нелегального распространения реплицированных данных. Поэтому в некоторых случаях может потребоваться запретить репликацию базы данных.
Запрещение установки паролей и настройки параметров запуска пользователями. При многопользовательском доступе к данным важно обеспечить не только сохранность и конфиденциальность данных, но и возможность доступа к данным всем тем пользователям данных, для которых это необходимо. Поэтому СУБД должна иметь механизмы, не позволяющие любым пользователям устанавливать пароль на БД, поскольку, если это произойдет, никто, не зная пароля, не сможет открыть базу данных.
Также желательно иметь механизм установки запрета на изменение параметров запуска, которые определяют такие свойства, как настраиваемые меню, настраиваемые панели инструментов и стартовую форму.
Создание и удаление пользователей
При работе в многопользовательской среде большое значение приобретает понятие пользователь базы данных - владелец определенного набора объектов базы данных.
Пользователи системы могут быть разделены на классы. В системе любого размера всегда имеются некоторые типы суперпользователей - пользователей, которые автоматически имеют большинство (или все) привилегий и могут передать свой статус суперпользователя кому-нибудь с помощью привилегии или группы привилегий. Администратор базы данных (DBA) является термином, наиболее часто используемым для такого суперпользователя и для привилегий, которыми он обладает.
Других пользователей создают Администраторы баз данных; они же дают им начальные привилегии. Создавать пользователей могут только администраторы. Давать права пользователям и отбирать их могут не только администраторы, но и другие пользователи, обладающие соответствующими правами.
Пользователи могут объединяться в группы. Группа пользователей - это пользователи, наделенные одинаковым набором привилегий. Один и тот же пользователь в принципе может входить в разные группы. Каждый пользователь имеет специальное идентификационное имя или номер (Authorization ID).
Поскольку большинство промышленно эксплуатируемых корпоративных СУБД являются SQL-серверами, рассмотрим вопросы управления пользователями на примере SQL-систем.
Конкретные формы процесса управления пользователями в различных СУБД могут значительно отличаться друг от друга. Процесс управления пользователями в большой мере зависит от используемой операционной системы, архитектуры БД. В связи с этим в соответствующей части SQL наблюдается большая зависимость от платформы и производителя. До SQL-92 в стандарте не затрагивалось большинство возникающих в этой сфере вопросов. В SQL-92 часть вопросов нашла свое отражение, но требования их реализации не являются обязательными.
Большинство СУБД содержат высокоуровневые инструменты администрирования, обеспечивающие управление пользователями, но в каждой системе это делается по-своему, что осложняет не только процесс стандартизации, но и представление этих вопросов в общем виде в учебнике.
Процесс управления пользователями можно разбить на три главных этапа. Сначала необходимо создать учетную запись пользователя в базе данных. Далее пользователя необходимо наделить привилегиями сообразно тем задачам, которые пользователь предположительно будет решать в рамках базы данных. Наконец, после того, как доступ к данным пользователю будет уже не нужен, необходимо либо удалить из базы данных его учетную запись, либо отменить ранее предоставленные ему привилегии.
Перед началом работы с БД пользователь должен быть идентифицирован с помощью процедуры входа, обычно включающей запрос имени и пароля пользователя. После входа запускается сеанс (sessions) работы с СУБД.
Определение и отмена привилегий
Распределенные БнД предполагают работу с базой данных многих пользователей. Однако не всем пользователям следует разрешать выполнять любые действия с базой данных. Поэтому пользователям предоставляются привилегии. Привилегия - это право пользователей на выполнение определенных операций над объектами данных некоторого типа.
Привилегии в разных литературных источниках классифицируются по-разному. В [10] привилегии баз данных делятся на две категории: системные привилегии (system privileges) и объектные привилегии (object privileges). Системные привилегии контролируют общий доступ к базе данных. К ним относятся право создавать таблицы и другие объекты, а также право администрировать базу данных.
Объектные привилегии связаны с конкретным объектом базы данных. Объектная привилегия логически состоит из трех частей:
-
объекта, к которому применяется привилегия;
-
операции, которые она разрешает;
-
пользователя, которому даются эти привилегии.
Одна из первых привилегий, которая должна быть определена, - это привилегия создателей таблиц. Если все пользователи будут иметь возможность создавать в системе базовые таблицы, это может привести к избыточности данных, их несогласованности и, как следствие, к неэффективности системы.
Пользователь, создавший таблицу, является ее владельцем. Это означает, что пользователь имеет все привилегии в созданной им таблице и может передавать привилегии другим пользователям в этой таблице.
Каждый пользователь в среде SQL имеет специальное идентификационное имя (или номер).
Привилегии даются оператором GRANT (ПРЕДОСТАВИТЬ) и отменяются оператором REVOKE (ОТМЕНИТЬ).
Оператор GRANT имеет следующий синтаксис:
GRANT привилегия.,..ON имя объекта
ТО {пользователь, которому предоставляется привилегия.,..}|PUBLIK
[WITH GRANT OPTION];
привилегия:=
{ALL PRIVILEGES}
| {SELECT
| DELETE
| {INSERT [(имя столбца.,..)]}
| {UPDATE [(имя столбца.,..)]}
| {REFERENCES [(имя столбца.,..)]}
| USAGE}.
Когда SQL получает оператор GRANT, он проверяет привилегии пользователя, подавшего эту команду, чтобы определить, допустим ли оператор GRANT
Для пользователя таблицы могут быть назначены следующие типы привилегий:
-
SELECT - разрешение выполнять запросы в таблице.
-
INSERT - разрешение выполнять оператор INSERT (вставка новой строки) в таблице.
-
UPDATE - разрешение выполнять оператор UPDATE (обновление значений полей) в таблице. Можно ограничить эту привилегию для определенных столбцов таблицы.
-
DELETE - разрешение выполнять оператор DELETE (удаление записей) в таблице.
-
REFERENCES - разрешение определить внешний ключ.
В одном операторе GRANT можно назначить несколько привилегий, перечислив их через запятую, или использовать аргумент ALL, означающий, что пользователю передаются все привилегии для данной таблицы.
В одном операторе GRANT можно назначить привилегии нескольким пользователям одновременно, перечислив их через запятую, или использовать аргумент PUBLIC, означающий, что привилегии передаются все пользователям. Однако последней возможностью нужно пользоваться с осторожностью, так как PUBLIC означает не только текущих пользователей, но и всех пользователей, которые могут быть введены в систему в дальнейшем.
Предположим, что пользователь Digo является владельцем таблицы «Sotrudnik» и хочет позволить пользователю Ivanov выполнять запросы к ней. В этом случае пользователь Digo должен ввести команду
GRANT SELECT ON Sotrudnik TO Ivanov;
Предложение WITH GRANT OPTION позволяет передать пользователю возможность назначать привилегии для этой таблицы. Если, например, команда выглядит следующим образом:
GRANT SELECT ON Sotrudnik
TO Ivanov WITH GRANT OPTION;
то пользователь Ivanov получает возможность, в свою очередь, передавать право назначать привилегии другим пользователям, т. е. пользователь Ivanov может задать следующую команду:
GRANT SELECT ON Digo.Sotrudnik
TO Petrov WITH GRANT OPTION;
Обратите внимание на то, что когда на таблицу ссылается пользователь, не являющийся владельцем схемы, то перед именем таблицы указывается имя схемы.
Большинство привилегий объекта использует один и тот же синтаксис. Из перечисленных выше привилегий исключение составляют UPDATE и REFERENCES.
При задании привилегии UPDATE можно использовать тот же синтаксис, который применялся выше. Это будет означать, что пользователю дается право обновлять содержимое всех столбцов таблицы. Можно также после названия привилегии в скобках указать имена столбцов (если их несколько, то имена указываются в любой последовательности через запятую), на которые распространяется данная привилегия. Например, привилегия UPDATE может выглядеть следующим образом:
GRANT UPDATE (dolgnost, oklad) ON Sotrudnik TO Ivanov;
При задании привилегии REFERENCES также задаются имена столбцов.
Чтобы ограничить возможность просмотра таблицы только отдельными столбцами, следует воспользоваться механизмом создания представлений и назначать привилегии не для реальной таблицы, а для представления. Представления могут использоваться также и для обеспечения возможности ограничить просмотр только определенными строками или даже только, например, итоговыми или иными производными данными, если в операторе CREATE VIEW соответствующим образом задан «внутренний» SELECT.
Отмена привилегий осуществляется с помощью оператора REVOKE. Эта команда имеет синтаксис, схожий с синтаксисом оператора GRANT. Например, отмена привилегии на просмотр таблицы «Sotrudnik» для пользователя Ivanov будет выглядеть следующим образом: