Назад | Перейти на главную страницу

Что произойдет с моими входами в SQL Server, если я изменю имя пользователя домена Windows

Мой вопрос очень похож на этот вопрос Изменение имени пользователя домена Windows но исходный вопрос явно не отвечает на мою небольшую вариацию.

Если я изменю имя пользователя пользователей Windows (например, если они женятся), будет ли мой логин на сервере Sql, который я создал для старого имени пользователя, будет обновлен, чтобы отразить это изменение, или мне нужно будет создать новый логин для обновленного пользователя Windows?

Спасибо Бен

Если логин привязан к учетной записи домена, это должно быть нормально, потому что на базовом уровне это зависит от SID пользователя, а не от фактического имени пользователя.

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

DBCC FREESYSTEMCACHE('USERSTORE_TOKENPERM');

Разрешения должны продолжать работать правильно, но имя пользователя, отображаемое в SQL Server, в некоторых местах будет старым именем, пока вы не обновите его вручную.

Хотя метод drop / create будет работать, и, по-видимому, создание дублирующего входа в систему sql с тем же SID, похоже, работает для некоторых здесь, я рекомендую просто обновить существующую запись входа в SQL Server (протестировано в SQL 2012).

ALTER LOGIN [DomainName\OldUserName] WITH NAME = [DomainName\NewUserName];

Это полностью изменит существующую запись входа в систему, чтобы отразить правильное новое имя пользователя для этого пользователя домена (SID).

На самом деле он соответствует SID, а не имени. Так что все будет в порядке.

Ноты:

  • Вы имеете в виду вход в Windows. Имя входа в SQL Server не связано с пользователем Windows.
  • Лучше всего использовать группы Windows для разрешений, а не отдельных пользователей WIndows.

Вы можете легко проверить, что у них одинаковый SID после переименования, используя приведенный ниже сценарий, и проверьте, получаете ли вы тот же SID до и после. Предполагая, что вы переименовали Domain\LoginA к Domain\LoginB :

SELECT  sid
FROM    sys.server_principals
WHERE   name IN (N'Domain\LoginA')

и

SELECT  sid 
FROM    sys.server_principals 
WHERE   name IN (N'Domain\LoginB')

должен предоставить вам тот же SID, который подтверждает точку зрения @Hyppy.