double arrow

Передача привилегий с использованием GRANT OPTION


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

SQL поддерживает два аргумента для команды GRANT, которые имеют спе­циальное назначение: ALL PRIVILEGES (или просто ALL) и PUBLIC. ALL используется вместо имен привилегий в команде GRANT для передачи всех привилегий для таблицы. Например, пользователь Diane может передать поль­зователю Stephen множество привилегий для таблицы Customers с помощью команды:

GRANT ALL PRIVILEGES ON Customers TO Stephen;

(Привилегии для команд UPDATE и REFERENCES относятся ко всем столб­цам.) Альтернативным способом сказать то же самое является команда:

GRANT ALL ON Customers TO Stephen;

PUBLIC — своего рода обобщающий аргумент, но он относится к пользо­вателям, а не к привилегиям. Когда передаются привилегии с атрибутом "обще­доступный" (PUBLIC), все пользователи получают их автоматически. Чаще это применяется для привилегии SELECT для определенных базовых таблиц или представлении, которые нужно предоставить каждому пользователю для рас­смотрения. Разрешить каждому пользователю просматривать таблицу Orders можно, например, вводом следующей команды:

GRANT SELECT ON Orders TO PUBLIC;

Можно передавать любую привилегию или все привилегии в общее пользо­вание, но делать это нежелательно. Все привилегии, за исключением SELECT, разрешают пользователю изменять (или, в случае REFERENCES, ограничивать) содержимое таблицы. Разрешение всем пользователям изменять содержимое таб­лиц влечет за собой множество проблем. Даже в небольшой компании предпо­чтительнее передача привилегий каждому пользователю индивидуально, а не всем сразу. При применении ключевого слова PUBLIC речь идет не только обо всех существующих пользователях. Любой новый пользователь, подключаемый к системе, автоматически получает все привилегии, назначенные с применением ключевого слова PUBLIC. Поэтому для ограничения доступа к таблице в любое время — либо только сейчас, либо в будущем — лучше передать привилегии пользователям, применяя метод, отличный от SELECT.




Иногда создатель таблицы хочет, чтобы другие пользователи имели право передавать привилегии на эту таблицу. Это реально для систем, в которых один или несколько человек могут создать большинство или все базовые таблицы базы данных, а затем передать права по работе с этими таблицами тем, кто реально будет с ними работать. SQL позволяет это сделать с помощью предло­жения WITH GRANT OPTION.

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

GRANT SELECT ON Customers TO Adrian WITH GRANT OPTION;

После выполнения этой команды Adrian получает право передать привиле­гию выполнения команды SELECT третьим лицам. Для этого он должен выпол­нить команду:

GRANT SELECT ON Diane.Customers TO Stephen;

или даже:

GRANT SELECT ON Diane.Customers TO Stephen WITH GRANT OPTION;

Пользователь с GRANT OPTION для отдельной привилегии для данной таб­лицы может, в свою очередь, передать эту конкретную привилегию на эту таб­лицу с предложением или без предложения GRANT OPTION любому другому пользователю, что не изменяет владельца таблицы: таблицы всегда принадлежат их создателям. (В качестве префикса перед именем таблицы следует указывать идентификатор создателя таблицы, как это было продемонстрировано в приме­ре. В следующей главе будет показан другой способ.) Пользователь с GRANT OPTION на все привилегии для данной таблицы имеет большую власть над этой таблицей.







Сейчас читают про: