KnigaRead.com/

W Cat - SQL за 24 часа

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн W Cat, "SQL за 24 часа" бесплатно, без регистрации.
Перейти на страницу:

Имеется две команды SQL, посредством которых назначаются и отменяются привилегии и тем самым предоставляется возможность управления доступом к данным. С помощью этих команд (они перечислены ниже) в реляционных базах данных распределяются как привилегии доступа к системе, так и привилегии доступа к данным.

GRANT

REVOKE

Команда GRANT

Команда 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 OPTION команды GRANT является достаточно мощной. Если владелец объекта предоставляет привилегии относительно объекта другому пользователю и использует при этом опцию GRANT OPTION, это значит, что последний получает право предоставлять другим привилегии использования объекта, не являясь при этом владельцем объекта. Вот пример использования опции:

GRANT SELECT ON EMPLOYEE_TBL TO USER1 WITH GRANT OPTION;

Право предоставлено.


ADMIN OPTION

Опция ADMIN OPTION команды GRANT подобна опции GRANT OPTION в том, что получающий привилегии пользователь наследует также и право предоставлять эти привилегии другим пользователям. Но GRANT OPTION используется для привилегий на уровне объектов, a ADMIN OPTION - на уровне системы. Когда пользователь предоставляет другому пользователю привилегии доступа к системе с опцией ADMIN OPTION, этот новый пользователь получает также и возможность предоставления другим пользователям привилегий доступа к системе. Вот пример использования опции:

GRANT SELECT ON EMPLOYEE_TBL TO USER1 WITH ADMIN OPTION;

Право предоставлено.

При удалении из базы данных учетной записи пользователя, наделенного привилегиями с опцией GRANT OPTION или ADMIN OPTION, будут отменены и привилегии тех пользователей, которые получили эти привилегии от пользователя, удаляемого из системы.


Команда REVOKE

Команда REVOKE отменяет привилегии, ранее предоставленные пользователю базы данных. Команда REVOKE имеет две опции - RESTRICT и CASCADE. При использовании опции RESTRICT команда REVOKE будет успешно завершена только в том случае, когда отсутствуют другие пользователи с оставшимися привилегиями, явно указанными оператором REVOKE. С помощью опции CASCADE отменяются и все оставшиеся привилегии других пользователей. Другими словами, если владелец объекта наделил пользователя USERI привилегиями с опцией GRANT OPTION, а пользователь USER1 наделил привилегиями пользователя USER2, то при отмене владельцем привилегий пользователя USER1 с опцией CASCADE будут автоматически отменены и соответствующие привилегии пользователя USER2.

Оставшиеся привилегии (abandoned privileges) - это привилегии, переданные пользователю от другого пользователя с помощью опции GRANT OPTION и оставшиеся "бесхозными" у первого после удаления последнего из базы данных или после отмены привилегий последнего.

Синтаксис оператора для отмены привилегий следующий.

REVOKE Привилегия! [, Привилегия2 ] [ GRANT OPTION FOR ] ON Объект

FROM Имя_Пользователя { RESTRICT | CASCADE }

Вот пример использования подобного оператора.

REVOKE INSERT ON EMPLOYEE_TBL FROM USERI;

Право отменено.


Управление доступом к отдельным столбцам

Кроме предоставления привилегий доступа (INSERT, UPDATE или DELETE) к объектам в целом, имеется возможность ограничить доступ к заданным столбцам таблицы, как это сделано в следующем примере.

GRANT UPDATE (NAME) ON EMPLOYEES TO PUBLIC;

Право предоставлено.


Пользовательское имя PUBLIC

Пользовательское имя PUBLIC в базе данных представляет всех ее пользователей. Любой пользователь считается частью этого имени. Если привилегии предоставляются пользователю PUBLIC, эти привилегии получают все пользователи базы данных. Точно также, отмена привилегий пользователя PUBLIC означает отмену соответствующих привилегий для всех пользователей базы данных, за исключением тех пользователей, которым эти привилегии были явно предоставлены индивидуально. Вот пример использования имени PUBLIC.

GRANT SELECT ON EMPLOYEE_TBL TO PUBLIC;

Право предоставлено.

Поскольку при предоставлении привилегий пользователю PUBLIC их на самом деле получают все пользователи базы данных, такое предоставление привилегий следует использовать крайне осторожно


Группы привилегий

В некоторых реализациях SQL предусмотрено использование групп привилегий базы данных. Ссылки на такие группы привилегий осуществляются по назначенным им именам. Наличие групп упрощает назначение и отмену наиболее часто используемых привилегий. Например, если в группе десяток привилегий, их можно назначить или отменить по имени группы, чтобы не писать каждый раз весь список.

В SQLBase имеются группы привилегий, называемые уровнями доступа (authority levels), а в Oracle такие группы называются ролями (roles). И SQLBase, и Oracle предлагают следующие группы привилегий.

CONNECT

RESOURCE

DBA

Группа CONNECT позволяет пользователю подключиться к базе данных и осуществлять операции с теми объектами, право доступа к которым имеет этот пользователь.

Группа RESOURCE позволяет пользователю создавать объекты, удалять созданные этим пользователем объекты, предоставлять другим право доступа к своим объектам и т. п.

Группа DBA позволяет пользователю осуществлять в рамках базы данных лю|ь/е действия. Такой пользователь имеет право доступа к любым объектам базы данйых и может осуществлять с ними любые действия.

Вот пример предоставления пользователю такой группы привилегий.

GRANT DBA TO USER1;

Право предоставлено.

Использование групп привилегий в разных реализациях языка может иметь свою специфику При наличии групп их использование облегчает процесс организа-. ции управления безопасностью базы данных


Контроль за привилегиями с помощью распределения ролей

Роль - это создаваемый объект базы данных, содержащий нечто подобное группе привилегий Использование ролей направлено на сокращение усилий по обеспечению надежности хранения данных путем отказа от явного предоставления привилегий пользователям Управлять группами привилегий с помощью ролей оказывается проще Привилегии в рамках роли можно изменить, и такие изменения будут прозрачны для пользователя

Если пользователю в рамках определенного приложения требуются, например, привилегии SELECT и UPDATE по отношению к некоторой таблице, ему можно временно, до завершения выполнения транзакции, приписать роль с соответствующими привилегиями.

При создании роли она не имеет никакого иного значения, кроме того, что она является ролью базы данных Она может быть назначена какому-нибудь пользователю или другой роли. Например, пусть схема с именем АРР01 предоставляет привилегию SELECT роли RECORDS_CLERK в отношении таблицы EMPLOYEE_PAY. После этого любой пользователь, получающий роль RECORDS_CLERK, будет обладать привилегией SELECT в отношении таблицы EMPLOYEE_PAY.

Аналогично, если АРР01 отменит привилегию SELECT для роли RECORDS_CLERK в отношении таблицы EMPLOYEE_PAY, то с этого момента и все пользователи и роли, которым была назначена роль RECORDS_CLERK, потеряют привилегию SELECT в отношении ТабЛИЦЫ EMPLOYEE_PAY.


Оператор CREATE ROLE

Создать роль можно с помощью оператора CREATE ROLE.

CREATE ROLE Имя_роли;

Предоставление привилегий ролям аналогично предоставлению привилегий пользователям Рассмотрите следующий пример

CREATE ROLE RECORDS_CLERK;

Роль создана.

GRANT SELECT, INSERT, UPDATE, DELETE ON EMPLOYEE_PAY TO

RECORDS_CLERK;

Право предоставлено.

GRANT RECORDS_CLERK TO USER1;

Право предоставлено.


Оператор DROP ROLE

Роль удаляется с помощью оператора DROP ROLE.

DROP ROLE Имя_роли;

Вот пример:

DROP ROLE RECORDS_CLERK;

Роль удалена.


Оператор SET ROLE

Роль может быть назначена пользователю в рамках его сеанса доступа к базе данных с помощью оператора SET ROLE.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*