Зараз ви перебуваєте в автономному режимі; очікується повторне підключення до Інтернету

Як перенесення облікових записів та паролів між екземплярами SQL Server

ВАЖЛИВО! Ця стаття перекладена засобами машинного перекладу Microsoft. Статтю можна редагувати в середовищі Community Translation Framework (CTF). Щоб якомога швидше перекласти всі статті у своїй базі знань різними мовами, компанія Microsoft не лише звертається до професійних перекладачів, але й вдається до машинного перекладу, який потім редагується спільнотою. Такі статті можуть містити лексичні, синтаксичні та граматичні помилки. Microsoft не несе відповідальності за будь-які неточності, помилки або збитки, до яких може призвести неправильний переклад статей або їх використання. Докладніше про CTF див. на веб-сторінці http://support.microsoft.com/gp/machine-translation-corrections/uk-ua.

246133
Підсумки
Після переміщення бази даних на новий сервер, користувачі не можуть увійти в новий сервер. Замість цього, вони отримують таке протокол IMAP про помилку:
MSG 18456, рівень 16, держава 1
увійти не вдалося для користувача "%ls".
Новий сервер потрібно передати логіни і паролі. У цій статті описано, як ви перевести логіни і паролі на новий сервер.

Як перенести логіни і паролі між серверами, що працюють SQL Server 7.0

Функція SQL Server 7.0 даних трансформації застосунок-служба (СПД) об'єкта передача передає логіни і користувачів між двома серверами, але не переносить паролі для SQL Server автентифіковано логіни. Перенесення облікових записів та паролів із сервера, на якому запущено SQL Server 7.0 до іншого сервера, на якому запущено SQL Server 7.0, дотримуйтесь інструкцій у розділі "Повне вирішення для передачі логіни і паролі між різними версіями SQL Server".

Як перенести логіни і паролі з SQL Server 7.0 між серверами, що працюють SQL Server 2000 або SQL Server 2000

Для передачі логіни і паролі з сервера SQL Server 7.0 екземпляра SQL Server 2000 або між двома екземплярами SQL Server 2000, можна використовувати нове завдання логіни передачі пакет DTS у SQL Server 2000. Для цього виконайте такі інтерактивні елементи.
  1. Підключення до сервера SQL Server 2000 призначення, перейти до служб перетворення даних у SQL Server підприємство менеджер, expandthe каталог вхідних повідомлень, клацніть локальний пакетита виберіть пункт Новий пакет.
  2. Після того, як в DTS пакет дизайнера відкриває, Передача логіни завданнязавдання виберіть у меню команду. Повну інформацію про джерело, призначення та логіни вкладки відповідно.

    Важливо. Сервер призначення SQL Server 2000 не може бути під керуванням 64-розрядної версії SQL Server 2000. DTS компонентів для 64-розрядної версії SQL Server 2000 недоступні. Якщо ви імпортуєте логіни від примірнику SQL Server, який знаходиться на окремому комп'ютері, ваш екземпляр SQL Server willmust працювати під обліковим записом домену, щоб завершити завдання.

    Примітка. DTS метод буде передавати паролі, але не theoriginal SID. Якщо Логін створюється не за допомогою оригінального SID, userdatabases також перенесені на новий сервер бази даних користувачів буде beorphaned від Логін. Для передачі вихідного SID і обійти на orphanedusers, дотримуйтесь інструкцій у розділі "Повне вирішення для передачі логіни і паролі між різними версіями SQL Server".

Як перенесення облікових записів та паролів між екземплярами SQL Server 2005

Щоб отримати додаткові відомості про перенесення облікових записів та паролів між екземплярами SQL Server 2005 клацніть цей номер статті для перегляду статті в базі знань Microsoft Knowledge Base:
918992 Як перенести на логінів і паролів між екземплярами SQL Server 2005

Повне вирішення перенесення облікових записів та паролів між різними версіями SQL Server

Для цього скористайтеся одним із нижченаведених способів.
Примітки
  • Скрипти з наступних методів створення двох збережена процедура, які названі sp_hexadecimal , збережена процедура і база даних master , процедури sp_help_revlogin зберігається.
  • Скрипти залежать від SQL Server системних таблиць.Між версії SQL Server може змінити структуру цих таблиць. Вибравши безпосередньо з системних таблиць не рекомендується.
  • Перегляньте зауваження в кінці цієї статті важливі відомості про інтерактивні елементи у методах.
  • Спосіб 2 призначає логіни ролей.

Спосіб 1

Цей метод застосовується до таких сценаріїв:
  • Ви передача логіни і паролі з SQL Server 7.0 SQL Server 7.0.
  • Ви передача логіни і паролі з SQL Server 7.0 SQL Server 2000.
  • Передача логіни і паролі між серверами, що працюють SQL Server 2000.
Перенесення облікових записів та паролів між різними версіями SQL Server, виконайте такі дії:
  1. Виконано таку на джерело SQL Server. Перейдіть до кроку 2, коли завершите створенняsp_help_revlogin Збережена процедура.
    ----- Begin Script, Create sp_help_revlogin procedure -----USE masterGOIF OBJECT_ID ('sp_hexadecimal') IS NOT NULL  DROP PROCEDURE sp_hexadecimalGOCREATE PROCEDURE sp_hexadecimal    @binvalue varbinary(256),    @hexvalue varchar(256) OUTPUTASDECLARE @charvalue varchar(256)DECLARE @i intDECLARE @length intDECLARE @hexstring char(16)SELECT @charvalue = '0x'SELECT @i = 1SELECT @length = DATALENGTH (@binvalue)SELECT @hexstring = '0123456789ABCDEF' WHILE (@i <= @length) BEGIN  DECLARE @tempint int  DECLARE @firstint int  DECLARE @secondint int  SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))  SELECT @firstint = FLOOR(@tempint/16)  SELECT @secondint = @tempint - (@firstint*16)  SELECT @charvalue = @charvalue +    SUBSTRING(@hexstring, @firstint+1, 1) +    SUBSTRING(@hexstring, @secondint+1, 1)  SELECT @i = @i + 1ENDSELECT @hexvalue = @charvalueGOIF OBJECT_ID ('sp_help_revlogin') IS NOT NULL  DROP PROCEDURE sp_help_revlogin GOCREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL ASDECLARE @name    sysnameDECLARE @xstatus intDECLARE @binpwd  varbinary (256)DECLARE @txtpwd  sysnameDECLARE @tmpstr  varchar (256)DECLARE @SID_varbinary varbinary(85)DECLARE @SID_string varchar(256)IF (@login_name IS NULL)  DECLARE login_curs CURSOR FOR     SELECT sid, name, xstatus, password FROM master..sysxlogins     WHERE srvid IS NULL AND name <> 'sa'ELSE  DECLARE login_curs CURSOR FOR     SELECT sid, name, xstatus, password FROM master..sysxlogins     WHERE srvid IS NULL AND name = @login_nameOPEN login_curs FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwdIF (@@fetch_status = -1)BEGIN  PRINT 'No login(s) found.'  CLOSE login_curs   DEALLOCATE login_curs   RETURN -1ENDSET @tmpstr = '/* sp_help_revlogin script ' PRINT @tmpstrSET @tmpstr = '** Generated '   + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'PRINT @tmpstrPRINT ''PRINT 'DECLARE @pwd sysname'WHILE (@@fetch_status <> -1)BEGIN  IF (@@fetch_status <> -2)  BEGIN    PRINT ''    SET @tmpstr = '-- Login: ' + @name    PRINT @tmpstr     IF (@xstatus & 4) = 4    BEGIN -- NT authenticated account/group      IF (@xstatus & 1) = 1      BEGIN -- NT login is denied access        SET @tmpstr = 'EXEC master..sp_denylogin ''' + @name + ''''        PRINT @tmpstr       END      ELSE BEGIN -- NT login has access        SET @tmpstr = 'EXEC master..sp_grantlogin ''' + @name + ''''        PRINT @tmpstr       END    END    ELSE BEGIN -- SQL Server authentication      IF (@binpwd IS NOT NULL)      BEGIN -- Non-null password        EXEC sp_hexadecimal @binpwd, @txtpwd OUT        IF (@xstatus & 2048) = 2048          SET @tmpstr = 'SET @pwd = CONVERT (varchar(256), ' + @txtpwd + ')'        ELSE          SET @tmpstr = 'SET @pwd = CONVERT (varbinary(256), ' + @txtpwd + ')'        PRINT @tmpstr	EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT        SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name           + ''', @pwd, @sid = ' + @SID_string + ', @encryptopt = '      END      ELSE BEGIN         -- Null password	EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT        SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name           + ''', NULL, @sid = ' + @SID_string + ', @encryptopt = '      END      IF (@xstatus & 2048) = 2048        -- login upgraded from 6.5        SET @tmpstr = @tmpstr + '''skip_encryption_old'''       ELSE         SET @tmpstr = @tmpstr + '''skip_encryption'''      PRINT @tmpstr     END  END  FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd  ENDCLOSE login_curs DEALLOCATE login_curs RETURN 0GO ----- End Script -----
  2. Створене користувачем sp_help_revlogin Збережена процедура, запустити процедуру sp_help_revlogin від Query Analyzer на вихідного сервера. Sp_help_revlogin збережена процедура можуть бути використані на SQL Server 7.0 та SQLServer 2000. Вивід sp_help_revlogin Збережена процедура є Логін сценарії, які створюють логіни з theoriginal SID і пароль. Зберегти вихід і вставити і запустити її в QueryAnalyzer на призначення SQL Server. Наприклад:
    EXEC master..sp_help_revlogin

Спосіб 2

Цей метод застосовується до таких сценаріїв:
  • Ви передача логіни і паролі з SQL Server 7.0 SQL Server 2005.
  • Ви передача логіни і паролі з SQL Server 2000 SQL Server 2005.
  • Призначати ролі логіни.
Для перенесення облікових записів та паролів між різними версіями SQL Server а потім призначте логіни до ролей, виконайте такі дії:
  1. Виконано таку на джерело SQL Server.
    USE master GO IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL DROP PROCEDURE sp_hexadecimal GO CREATE PROCEDURE sp_hexadecimal @binvalue varbinary(256), @hexvalue varchar(256) OUTPUT AS DECLARE @charvalue varchar(256) DECLARE @i int DECLARE @length int DECLARE @hexstring char(16) SELECT @charvalue = '0x' SELECT @i = 1 SELECT @length = DATALENGTH (@binvalue) SELECT @hexstring = '0123456789ABCDEF' WHILE (@i <= @length) BEGIN DECLARE @tempint int DECLARE @firstint int DECLARE @secondint int SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1)) SELECT @firstint = FLOOR(@tempint/16) SELECT @secondint = @tempint - (@firstint*16) SELECT @charvalue = @charvalue + SUBSTRING(@hexstring, @firstint+1, 1) + SUBSTRING(@hexstring, @secondint+1, 1) SELECT @i = @i + 1 END SELECT @hexvalue = @charvalue GO IF OBJECT_ID ('sp_help_revlogin_2000_to_2005') IS NOT NULL DROP PROCEDURE sp_help_revlogin_2000_to_2005 GO CREATE PROCEDURE sp_help_revlogin_2000_to_2005 @login_name sysname = NULL, @include_db bit = 0, @include_role bit = 0 AS DECLARE @name sysname DECLARE @xstatus int DECLARE @binpwd varbinary (256) DECLARE @dfltdb varchar (256) DECLARE @txtpwd sysname DECLARE @tmpstr varchar (256) DECLARE @SID_varbinary varbinary(85) DECLARE @SID_string varchar(256) IF (@login_name IS NULL) DECLARE login_curs CURSOR STATIC FOR SELECT sid, [name], xstatus, password, isnull(db_name(dbid), 'master') FROM master.dbo.sysxlogins WHERE srvid IS NULL AND [name] <> 'sa' ELSE DECLARE login_curs CURSOR FOR SELECT sid, [name], xstatus, password, isnull(db_name(dbid), 'master') FROM master.dbo.sysxlogins WHERE srvid IS NULL AND [name] = @login_name OPEN login_curs FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb IF (@@fetch_status = -1) BEGIN PRINT 'No login(s) found.' CLOSE login_curs DEALLOCATE login_curs RETURN -1 END SET @tmpstr = '/* sp_help_revlogin script ' PRINT @tmpstr SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */' PRINT @tmpstr PRINT '' PRINT '' PRINT '' PRINT '/***** CREATE LOGINS *****/' WHILE @@fetch_status = 0 BEGIN PRINT '' SET @tmpstr = '-- Login: ' + @name PRINT @tmpstr IF (@xstatus & 4) = 4 BEGIN -- NT authenticated account/group IF (@xstatus & 1) = 1 BEGIN -- NT login is denied access SET @tmpstr = '' --'EXEC master..sp_denylogin ''' + @name + '''' PRINT @tmpstr END ELSE BEGIN -- NT login has access SET @tmpstr = 'IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE [name] = ''' + @name + ''')' PRINT @tmpstr SET @tmpstr = CHAR(9) + 'CREATE LOGIN [' + @name + '] FROM WINDOWS' PRINT @tmpstr END END ELSE BEGIN -- SQL Server authentication EXEC sp_hexadecimal @SID_varbinary, @SID_string OUT IF (@binpwd IS NOT NULL) BEGIN -- Non-null password EXEC sp_hexadecimal @binpwd, @txtpwd OUT SET @tmpstr = 'CREATE LOGIN [' + @name + '] WITH PASSWORD=' + @txtpwd + ' HASHED' END ELSE BEGIN -- Null password SET @tmpstr = 'CREATE LOGIN [' + @name + '] WITH PASSWORD=''''' END SET @tmpstr = @tmpstr + ', CHECK_POLICY=OFF, SID=' + @SID_string PRINT @tmpstr END FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb END IF @include_db = 1 BEGIN PRINT '' PRINT '' PRINT '' PRINT '/***** SET DEFAULT DATABASES *****/' FETCH FIRST FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb WHILE @@fetch_status = 0 BEGIN PRINT '' SET @tmpstr = '-- Login: ' + @name PRINT @tmpstr SET @tmpstr = 'ALTER LOGIN [' + @name + '] WITH DEFAULT_DATABASE=[' + @dfltdb + ']' PRINT @tmpstr FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb END END IF @include_role = 1 BEGIN PRINT '' PRINT '' PRINT '' PRINT '/***** SET SERVER ROLES *****/' FETCH FIRST FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb WHILE @@fetch_status = 0 BEGIN PRINT '' SET @tmpstr = '-- Login: ' + @name PRINT @tmpstr IF @xstatus &16 = 16 -- sysadmin BEGIN SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''sysadmin''' PRINT @tmpstr END IF @xstatus &32 = 32 -- securityadmin BEGIN SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''securityadmin''' PRINT @tmpstr END IF @xstatus &64 = 64 -- serveradmin BEGIN SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''serveradmin''' PRINT @tmpstr END IF @xstatus &128 = 128 -- setupadmin BEGIN SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''setupadmin''' PRINT @tmpstr END IF @xstatus &256 = 256 --processadmin BEGIN SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''processadmin''' PRINT @tmpstr END IF @xstatus &512 = 512 -- diskadmin BEGIN SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''diskadmin''' PRINT @tmpstr END IF @xstatus &1024 = 1024 -- dbcreator BEGIN SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''dbcreator''' PRINT @tmpstr END IF @xstatus &4096 = 4096 -- bulkadmin BEGIN SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''bulkadmin''' PRINT @tmpstr END FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb END END CLOSE login_curs DEALLOCATE login_curs RETURN 0 GOexec sp_help_revlogin_2000_to_2005 @login_name=NULL, @include_db=1, @include_role=1GO
  2. Зберегти вихід і потім вставляти і запустити вихід в SQL Server управління студії призначення SQL Server 2005.
Примітка. Якщо джерело SQL Server містить Логін, який має порожніх паролів, вихід містить твердження, що приблизно такого вигляду.
CREATE LOGIN LoginName WITH PASSWORD = '', CHECK_POLICY = OFF, SID = MySID

Зауваження

  • Огляд сценарію виводу ретельно, перш ніж запустити його на thedestination SQL Server. Якщо для передачі логіни екземпляр SQLServer в іншому домені, ніж джерело екземпляра SQL Server, редагувати thescript, породжених в sp_help_revlogin порядку і замінити ім'я домену нового домену уsp_grantlogin звітності. Тому що інтегрований логіни надано доступ в новий домен не буде мати ж SID як на логіни у вихідному домені, thedatabase користувачі будуть сиротами від цих логіни. Щоб вирішити ці orphanedusers, див у статтях, вміщених у такий елемент куля. Якщо youtransfer інтегровані логіни між екземплярами SQL-серверів в одному домені, використовується той же SID і користувач не може бути створені автоматично.
  • Після того, як ви рухатися на логіни, користувачі можуть не мати permissionsto баз даних access, які також були переміщені. Ця проблема описав як "сиріт користувача". Якщо ви намагаєтеся надати Логін доступ до бази даних, вона mayfail з вказівкою користувача вже існує:
    MicrosoftSQL Речення (ODBC SQLState: 42000) помилка 15023: користувача або роль "%s" уже існує в поточну базу даних.
    Докладніше про те, щоб зіставити з логіни бази даних користувачів вирішити сиріт SQL Server логіни та інтегрованих логіни перегляньте наступні статті в базі знань Microsoft Knowledge Base:
    240872 Як вирішити проблеми дозволу, під Вільний час переміщення бази даних між серверами, що працюють з SQL Server
    Для отримання інструкцій про за допомогою sp_change_users_login Збережена процедура виправлення безгоспних споживачів по одному (thiswill тільки адресу користувачів сиротами від стандарт SQL логінів), побачити followingarticle в базі знань Microsoft Knowledge Base:
    274188 Тема "Виправлення неполадок Orphaned користувачів" у Books Online є неповною
  • Якщо передача логіни і паролі є частиною moveof баз даних в новий сервер SQL Server, прочитайте статтю в базі знань Майкрософт Опис робочий процес і stepsinvolved:
    314546 Переміщення бази даних між комп'ютерами, які працюють з SQL Server
  • Ви можете зробити це через sp_addlogin збережену системну процедуру, яка дозволяє Логін повинен бути створений byusing зашифрований пароль, параметр @encryptopt . Щоб отримати додаткові відомості про цю процедуру звариш "sp_addlogin (T-SQL)" Тема в SQL Server Books Online.
  • за промовчанням тільки члени rolecan sysadminfixed сервера виберіть таблиці sysxlogins . Якщо член системний адміністратор роль грантів на necessarypermissions, кінцеві користувачі не вдалося створити або запустити ці збережена процедура.
  • Такий підхід не намагається передати databaseinformation за промовчанням для певного Логін тому, що бази даних за промовчанням може не alwaysexist на сервері призначення. Визначте цю базу даних за промовчанням для Логін, можна використовувати sp_defaultdb збережену системну процедуру, видаючи його Логін ім'я та thedefault бази даних аргументів. Щоб отримати додаткові відомості про сценарій виконання цієї процедури див. "sp_defaultdb" в SQL Server Books Online.
  • Під Вільний час передачі логіни між екземплярами SQLServer Якщо джерело сервера, порядок сортування не враховується регістр і sortorder сервер призначення враховується регістр, необхідно ввести allalphabetical символи в паролях регістром після transferof логіни до сервера призначення. Якщо порядку сортування на вихідний сервер iscase чутливі і порядок сортування сервер призначення iscase нечутливим, не можна увійдіть логіни transferredusing процедурою, передбаченої в цій статті, якщо не до оригінальної passwordcontains немає алфавітних знаків або якщо всі алфавітних знаків в початковий пароль не великими буквами. Якщо сервери arecase чутливих або обох серверів без урахування регістру, ви будете не experiencethis проблема. Це побічний ефект як handlespasswords що SQL Server. Для отримання додаткових відомостей див. "Ефект на паролі з зміна SortOrders" в SQL Server 7.0 Books Online.
  • Під Вільний час запуску вихід з sp_help_revlogin сценарію на сервер призначення, якщо сервер призначення вже має definedwith Логін однойменного як один з логіни на відпуск скрипта, ви можете побачити thefollowing помилка при виконання виводу sp_help_revlogin сценарію:
    Сервер: Msg 15025, рівень 16, держава 1, процедури sp_addlogin, Line 56
    Test1 Логін вже існує.
    Аналогічним чином, якщо різні Логін існує з тим самим значенням SID на цьому сервері, як той, який ви бажаєте додати, receivethe після протокол IMAP про помилку:
    Сервер: Msg15433, рівень 16, держава 1, процедури sp_addlogin, Line 93
    Suppliedparameter @sid знаходиться у використанні.
    Таким чином, ви повинні carefullyreview на вивід наступних команд, діагностуючи вміст sysxlogins таблиці і адреси цих помилок відповідно.
  • У SID значення для конкретного Логін використовується як basisfor, реалізація рівень доступу до бази даних в SQL Server. Отже, якщо на samelogin має два різних значень для SID на рівні баз даних (у twodifferent баз даних на цьому сервері), Логін доступ буде надано лише до thatdatabase, чиї SID відповідає значенню в syslogins для цього Логін. Така ситуація може виникати, якщо два databasesin питання закріпили з двох різних серверів. Щоб вирішити thisproblem, увійти в питанні повинні були б бути вручну видалені з thedatabase, що SID невідповідність за допомогою sp_dropuser Збережена процедура і потім додав знову за допомогою sp_adduser Збережена процедура.

Попередження. Цю статтю переведено автоматично

Властивості

Ідентифікатор статті: 246133 – останній перегляд: 03/03/2014 22:29:00 – виправлення: 3.0

  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL 2005 Server Workgroup
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL 2005 Server Enterprise
  • kbsqlsetup kbhowtomaster kbinfo kbmt KB246133 KbMtuk
Зворотний зв’язок