УДАЛЕНИЕ РОЛЬ SQL Server

В этом руководстве вы узнаете, как использовать оператор SQL Server DROP ROLE для удаления роли из текущей базы данных.

Введение в оператор SQL Server DROP ROLE

Оператор DROP ROLE удаляет роль из текущей базы данных. Вот синтаксис оператора DROP ROLE:

DROP ROLE [IF EXISTS] role_name;

В этом синтаксисе вы указываете имя роли, которую хотите удалить, после ключевых слов DROP ROLE.

Предложение IF EXISTS является необязательным и доступно с SQL Server 2016. Предложение IF EXISTS условно удаляет роль только в том случае, если она уже существует.

Оператор DROP ROLE не может удалить роль, которая владеет защищаемыми объектами. Чтобы удалить роль, которая владеет защищаемыми объектами, вам нужно сначала передать право собственности на эти защищаемые объекты, а затем удалить роль из базы данных.

Оператор DROP ROLE не может удалить роль, в которой есть участники. Чтобы удалить роль, в которой есть участники, необходимо удалить участников из роли перед ее удалением.

Оператор DROP ROLE не может удалить фиксированные роли базы данных, такие как db_datareader, db_datawriter, db_securityadmin и т. д.

Пример оператора SQL Server DROP ROLE

В следующем примере используется образец базы данных BikeStores. Мы будем использовать роли sales и sox_auditors, созданные в руководстве CREATE ROLE.

1) Использование оператора SQL Server DROP ROLE для удаления роли

В следующем примере используется оператор DROP ROLE для удаления роли sox_auditors из базы данных BikeStores:

DROP ROLE IF EXISTS sox_auditors;

Поскольку роль sox_auditors не имеет участника, оператор выполняется успешно.

2) Удалить роль, в которой есть пример участников

Сначала используйте оператор DROP ROLE, чтобы удалить роль sales из базы данных:

DROP ROLE sales;

Поскольку роль sales имеет участников, SQL Server выдает следующую ошибку:

The role has members. It must be empty before it can be dropped.

Во-вторых, чтобы найти участников, которые относятся к роли sales, вы используете следующий оператор:

SELECT
  r.name role_name,
  r.type role_type,
  r.type_desc role_type_desc,
  m.name member_name,
  m.type member_type,
  m.type_desc member_type_desc
FROM sys.database_principals r
INNER JOIN  sys.database_role_members  rm on rm.role_principal_id = r.principal_id
INNER JOIN sys.database_principals m on m.principal_id = rm.member_principal_id
WHERE r.name ='sales';

Выход:

Вывод показывает, что роль sales имеет одного участника — пользователя james.

В-третьих, удалите пользователя james из роли sales с помощью оператора ALTER ROLE… DROP MEMBER:

ALTER ROLE sales
DROP MEMBER james;

Наконец, удалите роли отдела продаж с помощью оператора DROP ROLE:

DROP ROLE sales;

Краткое содержание

  • Используйте оператор DROP ROLE для удаления роли из текущей базы данных.
Мирослав С.

Автор статей, ИБ-специалист