Файл: 5. Управление учетными записями пользователей Mysql сервера Синтаксис команд grant и revoke.pptx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.01.2024

Просмотров: 52

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


cname - имя заказчика.

city - местонахождение заказчика (город).

rating - код, указывающий уровень предпочтения данного

заказчика перед другими.

snum - номер продавца, назначенного этому заказчику

(из таблицы Продавцов).

Таблица 3. Заказы

-----------------------------------------------

ONUM | AMT | ODATE | CNUM | SNUM

-------|-----------|-------------|------|------

3001 | 18.69 | 10/03/1990 | 2008 | 1007

3003 | 767.19 | 10/03/1990 | 2001 | 1001

3002 | 1900.10 | 10/03/1990 | 2007 | 1004

3005 | 5160.45 | 10/03/1990 | 2003 | 1002

3006 | 1098.16 | 10/03/1990 | 2008 | 1007

3009 | 1713.23 | 10/04/1990 | 2002 | 1003

3007 | 75.75 | 10/04/1990 | 2004 | 1002

3008 | 4723.00 | 10/05/1990 | 2006 | 1001

3010 | 1309.95 | 10/06/1990 | 2004 | 1002

3011 | 9891.88 | 10/06/1990 | 2006 | 1001

-----------------------------------------------

onum - уникальный номер, данный каждому приобретению.

amt - значение суммы приобретений.

odate - дата приобретения.

3.2. КОМАНДА GRANT

Предположим, что пользователь Diane имеет таблицу Заказчиков и хочет разрешить пользователю Adrian выполнить запрос к ней. Diane должна в этом случае ввести следующую команду:

GRANT SELECT ON Заказчики TO Adrian;

Теперь Adrian может выполнить запросы к таблице Заказчиков. Но не может предоставить право SELECT другому пользователю: таблица еще принадлежит Diane (далее мы покажем, как Diane может дать право Adrian предоставлять SELECT другим пользователям).

Группы привилегий и пользователей.

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

Stephen может предоставить и SELECT, и INSERT в таблице Заказов для Adrian и Diane:

GRANT SELECT, INSERT ON Заказы TO Adrian, Diane;

Ограничение привилегий на определенные таблицы и столбцы

Если Adrian хочет ограничить Diane в изменении, например, комиссионных, он может ввести:

GRANT UPDATE (city, comm) ON Продавцы TO Diane;

Здесь в круглых скобках после имени таблицы указаны конкретные столбцы, к которым привилегия UPDATE должна быть применена.

Имена нескольких столбцов таблицы могут указываться в любом порядке, отделяемые запятыми:

3.3. Использование аргумента ALL

ALL используется вместо имён привилегий в команде GRANT, чтобы передать все привилегии в таблице.

Например, Diane может выдать Stephen весь набор привилегий в таблице Заказчиков с помощью такой команды:

GRANT ALL ON Продавцы TO Diane;

(при этом привилегия UPDATE применяется ко всем столбцам.)

Конечно, можно предоставить любые или все привилегии каждому, но это, очевидно, нежелательно. Все привилегии, за исключением SELECT, позволяют пользователю изменять содержание таблицы. Разрешение всем пользователям изменять содержание ваших таблиц создаст проблемы.


3.4. Предоставление привилегий с помощью

предложения «WITH GRANT OPTION»

Иногда владельцу таблицы необходимо, чтобы пользователи могли передавать свои привилегии на таблицы другим пользователям. Для этого используется предложение WITH GRANT OPTION.

Если бы Diane хотела, чтобы Adrian имел право предоставлять привилегию SELECT в таблице Заказчиков другим пользователям, она дала бы ему привилегию SELECT с использованием предложения WITH GRANT OPTION:

GRANT SELECT ON Заказчики TO Adrian WITH GRANT OPTION;

После этого Adrian получил право передавать привилегию SELECT третьим лицам. Например, он может выдать команду

GRANT SELECT ON Diane.Заказчики TO Stephen;

или даже

GRANT SELECT ON Diane.Заказчики TO Stephen WITH GRANT OPTION;

3.5. Отмена привилегий

Удаление привилегии выполняется командой REVOKE.

Чтобы удалить привилегию INSERT для Adrian в таблице Заказов, вы можете ввести

REVOKE INSERT ON Заказы FROM Adrian;

Использование списков привилегий и пользователей здесь также допустимы, как и в случае с GRANT, так что вы можете ввести следующую команду:

REVOKE INSERT, DELETE ON Заказчики

FROM Adrian, Stephen;

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

3.6. Использование представлений для фильтрации привилегий

Действие привилегий можно сделать более точными, используя представления.

Чтобы создать представление, необходимо иметь привилегию SELECT во всех таблицах, на которые ссылается представление.

Ограничение привилегии для определённых столбцов

Предположим, вы хотите дать пользователю Claire способность видеть только столбцы snum и sname таблицы Продавцов. Вы можете сделать это, поместив имена этих столбцов в представление

CREATE VIEW Clairesview

AS SELECT snum, sname

FROM Продавцы;

и предоставить Claire привилегию SELECT в представлении, а не в самой таблице Продавцов:

GRANT SELECT On Clairesview to Claire;

Ограничение привилегий для определённых строк

Более полезный пример - такое представление, чтобы привилегия относилась только к определенным строкам.

Чтобы предоставить пользователю Adrian привилегию UPDATE в таблице Заказчиков для всех заказчиков, размещенных в Лондоне, можно создать такое представление:



CREATE VIEW Londoncust

AS SELECT *

FROM Заказчики

WHERE city = 'London'

WITH CHECK OPTION;

Затем необходимо передать привилегию UPDATE в этой таблице для Adrian:

GRANT UPDATE ON Londoncust TO Adrian;

Предложение WITH CHECK OPTION предохраняет Adrian от замены значения поля city на любое значение кроме London.

Предоставление доступа только к извлечённым данным

Другая возможность состоит в том, чтобы предлагать пользователям доступ к уже извлечённым данным, а не к фактическим значениям в таблице.

Пример. Вы можете создавать представление, которое выдаёт подсчёт, среднее и общее количество заказов на каждый день:

CREATE VIEW Datetotals

AS SELECT odate, COUNT (*), SUM (amt), AVG (amt)

FROM Заказы

GROUP BY odate;

Теперь вы передаёте пользователю Diane привилегию SELECT в представлении Datetotals:

GRANT SELECT ON Datetotals TO Diane;