Поиск потерянных пользователей и их привязка к логинам (после восстановления / AG)
SQL ServerБезопасностьКоманда
USE [Musteri];
-- Database users without a matching login:
SELECT dp.name AS user_name, dp.type_desc, dp.authentication_type_desc, dp.sid, dp.create_date
FROM sys.database_principals dp
LEFT JOIN sys.server_principals sp ON sp.sid = dp.sid
WHERE sp.sid IS NULL
AND dp.type IN ('S', 'U', 'G')
AND dp.authentication_type_desc IN (N'INSTANCE', N'WINDOWS')
AND dp.principal_id > 4;
-- If a login with the same name exists, remap the SID:
ALTER USER [app_user] WITH LOGIN = [app_user];
-- Permanent fix: generate CREATE LOGIN with SID + password hash on the source, run it on the target:
SELECT N'CREATE LOGIN ' + QUOTENAME(sp.name)
+ N' WITH PASSWORD = ' + CONVERT(NVARCHAR(MAX), LOGINPROPERTY(sp.name, 'PasswordHash'), 1)
+ N' HASHED, SID = ' + CONVERT(NVARCHAR(MAX), sp.sid, 1)
+ N', CHECK_POLICY = OFF;' AS create_login_stmt
FROM sys.server_principals sp
WHERE sp.type = 'S' AND sp.name = N'app_user';Что делает
Находит пользователей базы данных, чей SID не соответствует ни одному логину сервера (orphaned); привязывает пользователя к существующему логину и генерирует скрипт для создания логинов на другом сервере с тем же SID и хешем пароля.
Когда использовать
После восстановления/присоединения базы на другом сервере, когда приложение получает "Login failed for user" после отработки отказа AG/log shipping, или при миграции сервера.
Внимание
ALTER USER ... WITH LOGIN меняет SID пользователя на SID логина; в AG это изменение переходит с первичной реплики на вторичные, но если у логинов на вторичных серверах другие SID, проблема вернётся при следующей отработке отказа. Постоянное решение — создавать логины с одинаковым SID на каждой реплике. Хеш пароля — чувствительные данные; храните скрипт в безопасности. Пользователям автономной базы данных (authentication_type = DATABASE) логин не нужен, и они не выводятся.
Связанные материалы
- Настройка TDE: главный ключ, сертификат, резервная копия сертификата и ход шифрования
- Настройка SQL Server Audit: входы, изменения разрешений и доступ к таблицам
- Аудит логинов и разрешений: члены sysadmin, рискованные разрешения, слабые пароли
- Создание ledger-таблицы, чтение истории изменений и проверка целостности