27. Управление разрешениями - KattyOG/Database GitHub Wiki
У субъекта системы есть только один путь получения доступа к объектам - иметь назначенные непосредственно или опосредовано разрешения. При непосредственном управлении разрешениями они назначаются субъекту явно, а при опосредованном разрешения назначаются через членство в группах, ролях или наследуются от объектов, лежащих выше по цепочке иерархии. Управление разрешениями производится путем выполнения инструкций языка DCL (Data Control Language): GRANT (разрешить), DENY (запретить) и REVOKE (отменить).
После добавления пользователя следует определить разрешения, управляющие действиями, которые пользователь может выполнять, с помощью инструкций GRANT, DENY и REVOKE. Необходимо, чтобы пользователь был владельцем базы данных.
A. Предоставление разрешений на объекты (инструкция GRANT) Инструкция GRANT предоставляет разрешения на таблицу, представление, функцию, хранимую процедуру, очередь обслуживания, синоним. Синтаксис инструкции GRANT:
GRANT { ALL [ PRIVILEGES ] | список_разрешений }
ON список_объектов
TO список_принципалов
[ WITH GRANT OPTION ]
[ AS принципал ]
Пояснения к инструкции GRANT
- Ключевое слово ALL с необязательным словом RIVILEGES не включает все возможные разрешения, оно эквивалентно предоставлению всех разрешений ANSI-92, применимых к указанному объекту. Значение ALL различается для разных типов объектов. Ниже перечислены главные классы разрешений и защищаемых объектов, к которым эти разрешения могут применяться: a) разрешения на скалярные функции: EXECUTE, REFERENCES; b) разрешения на функции, возвращающие табличное значение: DELETE, INSERT, REFERENCES, SELECT, UPDATE; c) разрешения на хранимые процедуры: EXECUTE; d) разрешения на таблицы: DELETE, INSERT, REFERENCES, SELECT, UPDATE; e) разрешения на представления: DELETE, INSERT, REFERENCES, SELECT, UPDATE. Полный список разрешений содержит 195 пунктов.
- Если разрешение предоставляется на таблицу, представление или функцию, возвращающую табличное значение, то справа от разрешения в круглых скобоках могут указываться имена столбцов. На столбец могут быть предоставлены только разрешения SELECT, REFERENCES и UPDATE.
- Объект, на который предоставляется разрешение, имеет следующее описание: [ OBJECT :: ] [ имя_схемы ]. имя_объекта. Фраза OBJECT необязательна, если указан аргумент имя_схемы. Если же она указана, указание квалификатора области (::) обязательно. Если не указан аргумент имя_схемы, подразумевается схема по умолчанию. Если указан аргумент имя_схемы, обязательно указание квалификатора области схемы (.).
- Принципалом может быть: a) пользователь базы данных, b) роль базы данных, c) роль приложения.
- Необязательная фраза WITH GRANT OPTION указывает, что принципалу также дается возможность предоставлять указанное разрешение другим принципалам.
- Необязательная фраза AS принципал определяет принципала, у которого другой принципал, выполняющий данный запрос, наследует право предоставлять данное разрешение.
Пример. Предоставление разрешения REFERENCES на столбец EmployeeID в представлении HumanResources.vEmployee пользователю User02 с параметром GRANT OPTION.
USE AdventureWorks;
GRANT REFERENCES (EmployeeID) ON OBJECT::HumanResources.vEmployee TO User02
WITH GRANT OPTION;
GO
B. Отмена разрешений на объекты (инструкция REVOKE) Инструкция REVOKE отменяет разрешения, ранее предоставленные инструкцией GRANT. Синтаксис инструкции REVOKE:
REVOKE [ GRANT OPTION FOR ] список_разрешений
ON список_объектов
{ FROM | TO } список_принципалов
[ CASCADE ]
[ AS принципал ]
Пояснения к инструкции REVOKE.
- Необязательная фраза GRANT OPTION FOR показывает, что право на предоставление заданного разрешения другим принципалам будет отменено. Само разрешение отменено не будет.
- Необязательное ключевое слово CASCADE показывает, что отменяемое разрешение также отменяется для других принципалов, для которых оно было предоставлено или запрещено этим принципалом. Каскадная отмена разрешения, предоставленного с помощью параметра WITH GRANT OPTION, приведет к отмене прав GRANT и DENY для этого разрешения.
- Необязательная фраза AS принципал указывает принципала, от которого принципал, выполняющий данный запрос, получает право на отмену разрешения.
Пример. Отмена разрешения EXECUTE для хранимой процедуры
USE AdventureWorks;
REVOKE EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo
FROM Role03;
GO
C. Запрет разрешений на объекты (инструкция DENY) Инструкция DENY запрещает разрешения на члены класса OBJECT защищаемых объектов. Синтаксис инструкции DENY:
DENY список_разрешений
ON список_объектов
TO список_принципалов
[ CASCADE ]
[ AS принципал ]
Пример. Запрет разрешения REFERENCES на представление с CASCADE
USE AdventureWorks;
DENY REFERENCES (EmployeeID) ON OBJECT::HumanResources.vEmployee TO User02 CASCADE;
GO