Здесь мы обсуждаем привилегии доступа к базе данных потому, что эта книга посвящена SQL, а не базам данных Однако вам следует знать, что имеются и другие аспекты безопасности баз данных, в частности, защита служебных файлов базы данных, которые важны не менее чем распределение привилегий доступа Проблема обеспечения надежной защиты данных в зависимости от используемой системы управления реляционной базой данных может оказаться весьма непростой задачей
Привилегии - это уровни полномочий, предоставленных пользователю при доступе к самой базе данных и ее объектам, при манипуляции данными и при выполнении в рамках базы данных различных административных функций. Привилегии предоставляются посредством команды GRANT и отменяются посредством команды REVOKE.
То, что пользователь может подключиться к базе данных, совсем не означает того, что пользователь сможет извлечь данные из этой базы данных. Доступ данных в рамках базы данных как раз и разрешается путем назначения привилегий доступа. Различают следующие два типа привилегий доступа.
1. Привилегии доступа к системе.
2. Привилегии доступа к данным.
Привилегии доступа к системе - это привилегии, дающие возможность пользователю решать в рамках базы данных административные задачи типа создания и удаления баз данных, учетных записей пользователей, изменения и удаления различных объектов базы данных, изменения состояния объектов, изменения состояния базы данных и других подобных операций, несущих в себе при недостаточной внимательности потенциальную опасность для базы данных в целом.
Предлагаемые разными производителями баз данных привилегии доступа к системе сильно отличаются, поэтому по поводу имеющихся в рамках вашей системы привилегий доступа и правильного их использования необходимо обратиться к соответствующим разделам документации.
Вот список некоторых из привилегий доступа к системе, которые предлагаются в рамках Sybase.
CREATE DATABASE
CREATE DEFAULT
CREATE PROCEDURE
CREATE RULE
DUMP DATABASE
DUMP TRANSACTION
EXECUTE
Вот список некоторых из привилегий доступа к системе, которые предлагаются в рамках Oracle.
CREATE TABLE
CREATE ANY TABLE
ALTER ANY TABLE
DROP TABLE
CREATE USER
DROP USER
ALTER USER
ALTER DATABASE
ALTER SYSTEM
BACKUP ANY TABLE
SELECT ANY TABLE
Привилегии доступа к объектам - это уровни полномочий, предоставленных пользователю при работе с объектами базы данных, и это значит, что для выполнения определенных операций с объектами базы данных пользователю требуется предоставить соответствующие привилегии. Например, чтобы извлечь данные из таблицы другого пользователя, следует сначала получить право доступа к его данным. Привилегии доступа к объектам предоставляются пользователям базы данных владельцами объектов. Напоминаем, что владельца объекта называют также владельцем схемы.
Стандарт ANSI определяет следующие привилегии доступа к объектам.
USAGE. Разрешает использование заданной области.
SELECT. Разрешает доступ к заданной таблице.
INSERT (имя_столбца). Позволяет разместить данные в указанном столбце заданной таблицы.
INSERT. Позволяет поместить данные во все столбцы заданной таблицы.
UPDATE {имя_столбца). Позволяет изменить данные в указанном столбце заданной таблицы.
UPDATE. Позволяет изменить данные во всех столбцах заданной таблицы.
REFERENCES (имя_столбца). Позволяет сослаться в условиях целостности на указанный столбецзаданной таблицы; требуется для всех условий целостности.
REFERENCES, позволяет сослаться в условиях целостности на любой столбец заданной таблицы.
Владелец объекта автоматически наделяется всеми привилегиями относительно этого объекта. Такие привилегии могут быть разрешены также имеющейся в некоторых реализациях языка очень удобной командой GRANT OPTION, которая будет обсуждаться ниже.
Именно привилегии доступа к объектам используются для разрешения или ограничения доступа к объектам данной схемы. Эти привилегии можно использовать для защиты объектов одной схемы от доступа пользователей базы данных, имеющих право доступа к объектам другой схемы той же базы данных.
Обычно право использовать команды GRANT и REVOKE имеет администратор базы данных, но если есть администратор по безопасности, то он тоже может иметь право использовать эти команды. Конкретные инструкции по поводу того, кому и какие именно привилегии следует назначить или отменить, должны исходить от руководства и желательно в письменном виде.
Привилегии доступа к объекту должен распределять владелец этого объекта. Даже администратор базы данных не имеет права давать разрешение на использование не принадлежащего ему объекта, хотя, конечно, администратор всегда имеет реальную возможность это сделать.
Доступ пользователей к базе данных изначально контролируется посредством предоставления пользователям имен и паролей, но в большинстве систем управления базами данных этим дело не ограничивается. Создание учетной записи пользователя является лишь первым шагом для разрешения доступа к данным, как и первым шагом на пути управления этим доступом.
После того, как учетная запись пользователя создано, администратор базы данных, уполномоченный по безопасности или другой сотрудник с соответствующими полномочиями должен предоставить пользователю набор полномочий соответствующего уровня для того, чтобы пользователь имел возможность выполнять необходимые ему действия, например, создавать таблицы или запрашивать данные других таблиц. Ведь какой смысл подключаться к базе данных, если в ней вам ничего не позволено делать? Кроме того, владелец схемы должен разрешить пользователю использовать объекты схемы, чтобы пользователь имел возможность выполнять свою работу.
Имеется две команды SQL, посредством которых назначаются и отменяются привилегии и тем самым предоставляется возможность управления доступом к данным. С помощью этих команд (они перечислены ниже) в реляционных базах данных распределяются как привилегии доступа к системе, так и привилегии доступа к данным.
GRANT
REVOKE
Команда GRANT используется для предоставления привилегий как на уровне доступа к системе, так и на уровне доступа к объектам тем пользователям, которые уже имеют учетные записи в базе данных.
Синтаксис оператора следующий.
GRANT Привилегия1 [, Привилегия2 ] [ ON Объект ]
ТО Имя_Пользователя [ WITH GRANT OPTION | ADMIN OPTION ]
Одну привилегию пользователю можно предоставить следующим образом.
GRANT SELECT ON EMPLOYEE_TBL TO USERI;
Право предоставлено.
Несколько привилегий пользователю можно предоставить следующим образом.
GRANT SELECT, INSERT ON EMPLOYEE_TBL TO USER1;
Право предоставлено.
Обратите внимание на то, что в случае предоставления пользователю нескольких привилегий в рамках одного оператора привилегии в списке разделяются запятыми.
Нескольким пользователям привилегии предоставляются следующим образом.
GRANT SELECT, INSERT ON EMPLOYEE_TBL TO USER1, USER2;
Grant succeeded.
Обратите внимание на фразу Grant succeeded (Право предоставлено) в выводе оператора в последнем примере. Такая фраза будет получена при успешном выполнении оператора в той реализации языка (Oracle), которая использовалась для примеров этой книги. Другие реализации SQL могут иметь свои фразы для сообщения пользователю результатов выполнения операторов.
Опция GRANT OPTION команды GRANT является достаточно мощной. Если владелец объекта предоставляет привилегии относительно объекта другому пользователю и использует при этом опцию GRANT OPTION, это значит, что последний получает право предоставлять другим привилегии использования объекта, не являясь при этом владельцем объекта. Вот пример использования опции: