При перемещении баз данных с одного сервера на другой в SQL Server одной из проблем, с которой вы можете столкнуться, является перенос SQL-логинов. Это может быть важным шагом, чтобы убедиться, что все пользователи могут получить доступ к базам данных на новом сервере без проблем.
В SQL Server 7 есть хранимая процедура с именем sp_addlogin, которая может использоваться для переноса логинов. Она имеет необязательный флаг с именем @encryptopt, который может быть установлен либо на “skip_encryption”, либо на “skip_encryption_old”. В документации указано, что “skip_encryption” следует использовать, если пароль уже был зашифрован, в то время как “skip_encryption_old” предназначен для паролей, зашифрованных с использованием более старой версии.
Исходя из этой информации, вы можете подумать, что использование sp_addlogin с @encryptopt = skip_encryption будет достаточно для переноса логинов. Однако, при тестировании приложений после переноса вы можете столкнуться с проблемой. Некоторые приложения могут работать нормально, в то время как другие могут не работать из-за проблем с логином.
Корневая причина этой проблемы заключается в таблице sysxlogins, которая содержит столбец с именем xstatus. Этот столбец указывает, как был зашифрован пароль. В SQL Server 6.5 значение xstatus устанавливается равным 2050, в то время как в SQL Server 7 и SQL Server 2000 оно устанавливается равным 2.
Во время процесса входа в систему SQL Server шифрует предоставленный пароль с использованием метода шифрования текущей версии сервера. Затем он сравнивает этот зашифрованный пароль с тем, который хранится в sysxlogins и который может быть зашифрован с использованием другой версии. Это несоответствие методов шифрования может привести к ошибкам входа в систему.
Для решения этой проблемы Microsoft предоставила скрипт для перемещения логинов, который учитывает различные значения xstatus. Этот скрипт можно найти в статье базы знаний службы поддержки Microsoft Q246133.
Если вы планируете перемещать логины в SQL Server, настоятельно рекомендуется прочитать статью “Перемещение логинов в SQL Server”. Она предоставляет дополнительные сведения и лучшие практики для успешного переноса логинов.
Понимая тонкости переноса SQL-логинов и принимая необходимые меры предосторожности, вы можете обеспечить плавный переход при перемещении баз данных между серверами в SQL Server.