В этом руководстве вы узнаете, как использовать оператор SQL Server DROP USER для удаления пользователя из текущей базы данных.
Введение в оператор SQL Server DROP USER
Оператор DROP USER позволяет удалить пользователя из текущей базы данных. Вот синтаксис оператора DROP USER:
DROP USER [IF EXISTS] user_name;
В этом синтаксисе вы указываете имя пользователя, которого хотите удалить, после ключевого слова DROP USER. Если пользователь не существует в текущей базе данных, оператор DROP USER не будет выполнен.
Чтобы избежать этого, можно использовать опцию IF EXISTS. Опция IF EXISTS условно удаляет пользователя, если он уже существует.
Оператор DROP USER не может удалить пользователя, владеющего защищаемыми объектами. Чтобы удалить пользователя, владеющего защищаемыми объектами, вам необходимо:
- Удалить защищаемые объекты или передать право собственности на эти защищаемые объекты другому пользователю.
- Удалите пользователя.
Оператор DROP USER также не может удалить гостевого пользователя. Однако вы можете отключить гостевого пользователя, отозвав разрешение CONNECT. Следующий оператор отменяет разрешение CONNECT у гостевого пользователя:
REVOKE CONNECT FROM GUEST;
Обратите внимание, что приведенный выше оператор выполняется в любых базах данных, кроме master или tempdb:
Пример оператора SQL Server DROP USER
Мы будем использовать образец базы данных BikeStores для следующего примера оператора DROP USER.
1) Использование DROP USER для удаления пользователя в текущем примере базы данных
Сначала создайте новый логин jin с паролем:
CREATE LOGIN jin WITH PASSWORD ='uJIKng12.';
Во-вторых, создайте нового пользователя и сопоставьте его с логином jin:
CREATE USER jin FOR LOGIN jin;
В-третьих, удалите пользователя jin из текущей базы данных:
DROP USER IF EXISTS jin;
2) Удалить пользователя, которому принадлежит защищаемый пример
Сначала создайте новый логин с именем anthony и паролем:
CREATE LOGIN anthony WITH PASSWORD ='uNMng78!';
Во-вторых, создайте нового пользователя для входа в систему anthony:
CREATE USER tony FOR LOGIN anthony;
В-третьих, создайте схему с именем report и предоставьте полномочия пользователю tony:
CREATE SCHEMA report AUTHORIZATION tony;
В-четвертых, подключитесь к SQL Server, используя логин anthony, и создайте таблицу с именем daily_sales в отчете схемы:
USE BikeStores; CREATE TABLE report.daily_sales( Id INT IDENTITY PRIMARY KEY, Day DATE NOT NULL, Amount DECIMAL(10,2) NOT NULL DEFAULT 0 )
В-пятых, переключите подключение на учетную запись системного администратора(sa) и удалите пользователя tony:
DROP USER tony;
SQL Server выдал следующую ошибку:
The database principal owns a schema in the database, and cannot be dropped.
Поскольку пользователем tony является владелец отчета схемы, оператор DROP USER не может его удалить.
Чтобы удалить пользователя tony, вам необходимо сначала передать авторизацию отчета схемы другому пользователю. Например, следующий оператор изменяет авторизацию отчета схемы на пользователя dbo:
ALTER AUTHORIZATION ON SCHEMA::report TO dbo;
Если вы выполните оператор DROP USER для удаления пользователя tony, вы увидите, что он выполняется успешно:
DROP USER tony;
Краткое содержание
- Используйте оператор DROP USER для удаления пользователя в текущей базе данных.
- Если пользователь владеет одним или несколькими защищаемыми объектами, перед удалением пользователя необходимо передать право собственности на защищаемые объекты другому пользователю.