Published on

July 16, 2012

Исправление потерянных пользователей в SQL Server

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

Когда логин удаляется, связанный с ним пользователь в базе данных становится потерянным. Чтобы исправить это, мы можем удалить пользователя из базы данных с помощью следующего скрипта:

DROP USER Testwindows;

Однако иногда этот скрипт может вызвать ошибку, указывающую на то, что пользователь владеет схемой. Чтобы решить эту проблему, нам нужно найти схему, принадлежащую логину, путем запроса каталогового представления sys.schemas и сопоставления principal_id с sys.database_principals. Затем мы можем либо удалить эти схемы, либо изменить владение в зависимости от нашей среды. Чтобы изменить владение схемой, мы можем использовать следующую команду:

ALTER AUTHORIZATION ON SCHEMA::SchemaName TO NewUserName;

В ситуациях, когда база данных восстанавливается в другой среде, мы можем столкнуться с несоответствием SID между sys.server_principals и sys.database_principals. Чтобы исправить эту проблему, мы можем использовать системную хранимую процедуру sp_change_users_login. Например, если у нас есть логин Mydomain\Lastname.Firstname, связанный с пользователем TestWindowsUser с правами db_owner на базу данных (MyDb) в одном экземпляре (INST1), и мы восстанавливаем базу данных на другом экземпляре (INST2), логин не сможет получить доступ к восстановленной базе данных, так как его SID не совпадает с SID в sys.server_principals.

Чтобы исправить это, мы можем выполнить следующую команду на восстановленной базе данных:

USE MyDb;
GO
EXEC sp_change_users_login 'update_one', 'TestWindowsUser', 'Mydomain\Lastname.Firstname';

Примечание: Процедура sp_change_users_login является устаревшей функцией в SQL Server 2008. Вместо этого вы можете использовать оператор ALTER USER, как показано ниже:

ALTER USER TestWindowsUser WITH LOGIN [Mydomain\Lastname.Firstname];

Следуя этим шагам, вы успешно исправите потерянных пользователей в SQL Server.

Если вам понравилась эта статья, пожалуйста, поставьте лайк на нашей странице в Facebook по адресу www.PracticalSqlDba.com.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.