Skip to content

45. Управление разрешениями в SQL Server

Pandas edited this page Jan 2, 2018 · 1 revision

У субъекта системы есть только один путь получения доступа к объектам - иметь назначенные непосредственно или опосредовано разрешения. При непосредственном управлении разрешениями они назначаются субъекту явно, а при опосредованном разрешения назначаются через членство в группах, ролях или наследуются от объектов, лежащих выше по цепочке иерархии. Управление разрешениями производится путем выполнения инструкций языка DCL (Data Control Language): GRANT (разрешить), DENY (запретить) и REVOKE (отменить).

Предоставление разрешений на объекты (инструкция GRANT)

Инструкция GRANT предоставляет разрешения на таблицу, представление, функцию, хранимую процедуру, очередь обслуживания, синоним. Синтаксис инструкции GRANT:

GRANT { ALL [ PRIVILEGES ] | список_разрешений }
ON список_объектов
TO список_принципалов
[ WITH GRANT OPTION ] [ AS принципал ]
Пояснения к инструкции GRANT

Ключевое слово ALL с необязательным словом RIVILEGES не включает все возможные разрешения, оно эквивалентно предоставлению всех разрешений ANSI-92, применимых к указанному объекту. Значение ALL различается для разных типов объектов. Ниже перечислены главные классы разрешений и защищаемых объектов, к которым эти разрешения могут применяться:

  1. разрешения на скалярные функции: EXECUTE, REFERENCES;
  2. разрешения на функции, возвращающие табличное значение: DELETE, INSERT, REFERENCES, SELECT, UPDATE;
  3. разрешения на хранимые процедуры: EXECUTE;
  4. разрешения на таблицы: DELETE, INSERT, REFERENCES, SELECT, UPDATE;
  5. разрешения на представления: DELETE, INSERT, REFERENCES, SELECT, UPDATE.

Полный список разрешений содержит 195 пунктов. Если разрешение предоставляется на таблицу, представление или функцию, возвращающую табличное значение, то справа от разрешения в круглых скобоках могут указываться имена столбцов. На столбец могут быть предоставлены только разрешения SELECT, REFERENCES и UPDATE. Объект, на который предоставляется разрешение, имеет следующее описание: [ OBJECT :: ] [ имя_схемы ].имя_объекта.

Фраза OBJECT необязательна, если указан аргумент имя_схемы. Если же она указана, указание квалификатора области (::) обязательно. Если не указан аргумент имя_схемы, подразумевается схема по умолчанию. Если указан аргумент _имя_схемы), обязательно указание квалификатора области схемы (.).

Принципалом может быть:

  1. пользователь базы данных,
  2. роль базы данных,
  3. роль приложения.

Необязательная фраза WITH GRANT OPTION указывает, что принципалу также дается возможность предоставлять указанное разрешение другим принципалам.

Необязательная фраза AS принципал определяет принципала, у которого другой принципал, выполняющий данный запрос, наследует право предоставлять данное разрешение.

Пример. Предоставление разрешения EXECUTE на хранимую процедуру HumanResources.uspUpdateEmployeeHireInfo роли приложения Role03.

USE AdventureWorks;
GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo TO Role03;
GO

Отмена разрешений на объекты (инструкция REVOKE)

Инструкция REVOKE отменяет разрешения, ранее предоставленные инструкцией GRANT. Синтаксис инструкции REVOKE:

REVOKE [ GRANT OPTION FOR ] список_разрешений ON список_объектов
{ FROM | TO } список_принципалов
[ CASCADE ]
[ AS принципал ]
Пояснения к инструкции REVOKE.
  1. Необязательная фраза GRANT OPTION FOR показывает, что право на предоставление заданного разрешения другим принципалам будет отменено. Само разрешение отменено не будет.
  2. Необязательное ключевое слово CASCADE показывает, что отменяемое разрешение также отменяется для других принципалов, для которых оно было предоставлено или запрещено этим принципалом. Каскадная отмена разрешения, предоставленного с помощью параметра WITH GRANT OPTION, приведет к отмене прав GRANT и DENY для этого разрешения.
  3. Необязательная фраза AS принципал указывает принципала, от которого принципал, выполняющий данный запрос, получает право на отмену разрешения. Пример. Отмена разрешения EXECUTE для хранимой процедуры
USE AdventureWorks;
REVOKE EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo
FROM Role03;
GO

Запрет разрешений на объекты (инструкция DENY)

Инструкция DENY запрещает разрешения на члены класса OBJECT защищаемых объектов. Синтаксис инструкции DENY:

DENY список_разрешений
ON список_объектов
TO список_принципалов [ CASCADE ]
[ AS принципал ]

Пример. Запрет разрешения REFERENCES на представление с CASCADE

USE AdventureWorks;
DENY REFERENCES (EmployeeID) ON OBJECT::HumanResources.vEmployee TO User02 CASCADE;
GO
Clone this wiki locally