Anda sedang offline saat ini, menunggu internet Anda untuk menyambung kembali

Cara mentransfer login dan sandi di antara contoh SQL Server

PENTING: Artikel ini diterjemahkan oleh perangkat lunak penerjemahan mesin Microsoft, dan mungkin telah diedit oleh Masyarakat Microsoft melalui teknologi CTF dan bukan oleh seorang penerjemah profesional. Microsoft menawarkan baik artikel yang diterjemahkan oleh manusia maupun artikel hasil editan terjemahan oleh mesin/komunitas, sehingga Anda dapat mengakses semua artikel di Sentra Pengetahuan yang kami miliki dalam berbagai bahasa. Namun artikel hasil editan mesin atau bahkan komunitas tidak selalu sempurna. Artikel ini dapat mengandung kesalahan dalam hal kosa kata, sintaksis atau tatabahasa, sangat mirip dengan penutur asing yang membuat kekeliruan ketika berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab atas ketidakakuratan, kesalahan atau kerugian apa pun akibat dari kekeliruan dalam penerjemahan isi atau penggunaannya oleh pelanggan kami. Microsoft juga akan senantiasa memperbarui perangkat lunak penerjemahan mesin dan alat untuk menyempurnakan Editan Hasil Penerjemahan Mesin.

Klik disini untuk melihat versi Inggris dari artikel ini: 918992
PENDAHULUAN
Artikel ini menjelaskan cara mentransfer login dan sandi antara beberapa contoh Microsoft SQL Server 2005, Microsoft SQL Server 2008, dan Microsoft SQL Server 2012 di server yang berbeda.

Untuk informasi selengkapnya tentang cara mentransfer login dan sandi antara beberapa contoh versi lainnya dari SQL Server, klik nomor artikel berikut ini untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
246133 Cara mentransfer login dan sandi di antara contoh SQL Server
Informasi lebih lanjut
Di dalam artikel ini, A server dan B adalah server yang berbeda. Selain itu, server A dan server B yang menjalankan SQL Server 2005.

Catatan Informasi ini juga berlaku untuk SQL Server 2008 dan SQL Server 2012.

Setelah Anda memindahkan pangkalan data dari contoh SQL Server di server A ke contoh SQL Server di server B, pengguna mungkin tidak dapat masuk ke pangkalan data di server B. Selain itu, pengguna akan menerima pesan galat berikut:
Login gagal untuk pengguna 'MyUser'. (Microsoft SQL Server, Error: 18456)
Masalah ini terjadi karena Anda lakukan tidak mentransfer login dan sandi dari contoh SQL Server di server A ke contoh SQL Server di server B.

Untuk mentransfer login, gunakan salah satu metode berikut, yang sesuai untuk situasi Anda.

Metode 1: Log in dengan menggunakan pra-SQL Server 2000 sandi

Untuk mengatasi masalah ini, minta pengguna untuk masuk ke server yang menjalankan SQL Server dengan menggunakan pra-SQL Server 2000 login.

Catatan Menerapkan algoritma sandi akan diperbarui secara otomatis ketika pengguna log in dengan menggunakan pra-SQL Server 2000 sandi.

Metode 2: Reset sandi di SQL Server

Untuk mengatasi masalah ini, atur ulang kata sandi di SQL Server, dan kemudian skrip keluar masuk.

Catatan Sandi hashing algoritma digunakan ketika Anda me-reset sandi.

Metode 3: Membuat log pada skrip yang memiliki sandi kosong

Untuk membuat log pada skrip yang memiliki sandi kosong, ikuti langkah-langkah berikut:
  1. Server A, mulai SQL Server Management Studio, dan kemudian Sambungkan ke SQL Server dari mana Anda memindahkan pangkalan data.
  2. Buka jendela Editor kueri baru, dan kemudian jalankan skrip berikut ini.
    USE masterGOIF OBJECT_ID ('sp_hexadecimal') IS NOT NULL  DROP PROCEDURE sp_hexadecimalGOCREATE PROCEDURE sp_hexadecimal    @binvalue varbinary(256),    @hexvalue varchar (514) OUTPUTASDECLARE @charvalue varchar (514)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 = @charvalueGO IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL  DROP PROCEDURE sp_help_revloginGOCREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL ASDECLARE @name sysnameDECLARE @type varchar (1)DECLARE @hasaccess intDECLARE @denylogin intDECLARE @is_disabled intDECLARE @PWD_varbinary  varbinary (256)DECLARE @PWD_string  varchar (514)DECLARE @SID_varbinary varbinary (85)DECLARE @SID_string varchar (514)DECLARE @tmpstr  varchar (1024)DECLARE @is_policy_checked varchar (3)DECLARE @is_expiration_checked varchar (3)DECLARE @defaultdb sysname IF (@login_name IS NULL)  DECLARE login_curs CURSOR FOR      SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM sys.server_principals p LEFT JOIN sys.syslogins l      ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'ELSE  DECLARE login_curs CURSOR FOR      SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM sys.server_principals p LEFT JOIN sys.syslogins l      ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_nameOPEN login_cursFETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denyloginIF (@@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 ''WHILE (@@fetch_status <> -1)BEGIN  IF (@@fetch_status <> -2)  BEGIN    PRINT ''    SET @tmpstr = '-- Login: ' + @name    PRINT @tmpstr    IF (@type IN ( 'G', 'U'))    BEGIN -- NT authenticated account/group      SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'    END    ELSE BEGIN -- SQL Server authentication        -- obtain password and sid            SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )        EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT        EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT         -- obtain password policy state        SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name        SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name             SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']'        IF ( @is_policy_checked IS NOT NULL )        BEGIN          SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked        END        IF ( @is_expiration_checked IS NOT NULL )        BEGIN          SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked        END    END    IF (@denylogin = 1)    BEGIN -- login is denied access      SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )    END    ELSE IF (@hasaccess = 0)    BEGIN -- login exists but does not have access      SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )    END    IF (@is_disabled = 1)    BEGIN -- login is disabled      SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'    END    PRINT @tmpstr  END  FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin   ENDCLOSE login_cursDEALLOCATE login_cursRETURN 0GO


    Catatan Skrip ini membuat dua prosedur tersimpan dalam masterdatabase. Prosedur yang diberi namasp_hexadecimal dan sp_help_revlogin.
  3. Jalankan pernyataan berikut ini:
    EXEC sp_help_revlogin
    Skrip output yang menghasilkan sp_help_revlogin disimpan prosedur adalah skrip login. Skrip login ini membuat login yang asli pengidentifikasi kemanan (SID) dan sandi asli.
  4. Di server B, mulai SQL Server Management Studio, dan kemudian Sambungkan ke SQL Server di mana Anda memindahkan pangkalan data.

    Penting Sebelum melanjutkan ke langkah 5, Periksa informasi di dalam bagian "Keterangan".
  5. Buka jendela Editor kueri baru, dan kemudian jalankan skrip output yang dibuat di langkah 3.

Komentar

Tinjau informasi berikut sebelum Anda menjalankan skrip output pada contoh di server B:
  • Jika Anda mencoba untuk membuat login SQL Server 2012 baru menggunakan pra-SQL Server 2000 login yang telah diatur, Anda menerima galat berikut ini:
    MSG 15021, tingkat 16, negara bagian 2, baris 1
    Invalid nilai yang diberikan untuk parameter sandi. Tetapkan nilai parameter yang valid.
    Catatan Anda menerima galat ini di SQL Server 2012 karena hash 16-byte sandi yang disediakan untuk membuat LOGIN dan mengubah LOGIN pernyataan.

    Untuk mengatasi masalah ini di server yang menjalankan SQL Server 2012, buat login yang memiliki sandi kosong. Untuk melakukannya, jalankan skrip berikut ini:
    CREATE LOGIN [Test] WITH PASSWORD = '', SID = 0x90FD605DCEFAE14FAB4D5EB0BBA1AECC, DEFAULT_DATABASE = [master], CHECK_POLICY = ON, CHECK_EXPIRATION = OFF

    Setelah Anda membuat login yang memiliki sandi kosong, pengguna dapat mengubah sandi pada upaya masuk berikutnya.
  • Sandi dapat hashed dalam tiga cara:
    • VERSION_LEGACY: hash ini adalah hash 16-byte pra-SQL Server 2000.
    • VERSION_SHA1: hash ini dibuat dengan menggunakan algoritma SHA1 dan digunakan di SQL Server 2000 melalui SQL Server 2008 R2.
    • VERSION_SHA2: hash ini dibuat dengan menggunakan algoritma SHA2 512 dan digunakan dalam SQL Server 2012.
  • Pada SQL Server 2008 R1 dan versi yang lebih lawas, pra-SQL Server 2000 sandi hash yang didukung. Saat pengguna masuk menggunakan sandi yang digunakan pra-SQL Server 2000 hash, hash ditingkatkan untuk menggunakan sandi SHA1 hash.
  • Jika pengguna yang memiliki sandi yang menggunakan pra-SQL Server 2000 hash ada di server yang menjalankan SQL Server 2008 R2, ini berarti bahwa pengguna telah tidak masuk ke server.
  • Meninjau skrip output dengan seksama. Jika server A dan server B berada di domain yang berbeda, Anda harus mengubah skrip output. Kemudian, Anda harus mengganti nama domain asli dengan menggunakan nama domain baru pada LOGIN membuat laporan. Login terpadu yang diberikan akses di domain baru tidak memiliki SID sama sebagai login di domain yang asli. Oleh karena itu, pengguna yang ditinggalkan dari login ini. Untuk informasi selengkapnya tentang cara menyelesaikan pengguna ditinggalkan ini, klik nomor artikel berikut ini untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
    240872 Cara menyelesaikan masalah izin saat Anda memindahkan pangkalan data antara server yang menjalankan SQL Server
    Jika server A dan server B di domain yang sama, SID sama digunakan. Oleh karena itu, pengguna tidak mungkin dapat ditinggalkan.
  • Dalam output skrip login dibuat dengan menggunakan sandi yang dienkripsi. Hal ini karena argumen HASHED dalam LOGIN membuat pernyataan. Argumen ini menentukan bahwa sandi yang dimasukkan setelah argumen sandi telah hashed.
  • secara asali, hanya anggota dari peran sysadmin tetap server dapat menjalankan pernyataan SELECT dari tampilan sys.server_principals . Kecuali anggota sysadmin tetap peran server memberikan izin yang diperlukan untuk pengguna, pengguna tidak dapat membuat atau menjalankan skrip output.
  • Langkah-langkah dalam artikel ini tidak mentransfer informasi database default untuk masuk tertentu. Hal ini karena pangkalan data asali mungkin tidak selalu ada di server B. Untuk menentukan pangkalan data asali untuk login, gunakan pernyataan mengubah LOGIN oleh lewat di nama untuk masuk dan pangkalan data asali sebagai argumen.
  • Case-sensitive A sensitif server dan B: urutan menurun server A mungkin case-sensitive, dan urutan menurun server B mungkin sensitif. Dalam hal ini, pengguna harus mengetik sandi di semua huruf setelah Anda mentransfer login dan sandi untuk contoh di server B.

    Sensitif A case-sensitive server dan B: urutan menurun server A mungkin sensitif, dan urutan menurun server B mungkin case-sensitive. Dalam hal ini, pengguna tidak dapat masuk menggunakan login dan sandi yang Anda mentransfer ke contoh di server B kecuali jika salah satu dari kondisi berikut ini benar:
    • Sandi asli berisi surat tidak ada.
    • Semua huruf dalam sandi asli adalah huruf.
    Sensitif atau case-sensitive pada kedua server: urutan menurun server A dan server B mungkin sensitif, atau urutan menurun server A dan server B mungkin case-sensitive. Dalam kasus ini, pengguna tidak mengalami masalah.
  • Login yang sudah ada di contoh di server B mungkin memiliki nama yang sama dengan nama dalam skrip output. Dalam hal ini, Anda menerima pesan galat ketika Anda menjalankan skrip output pada contoh di server B:
    MSG 15025, tingkat 16, negara bagian 1, baris 1
    Pimpinan server 'MyLogin' sudah ada.
    Demikian pula, login yang sudah ada di contoh di server B bisa SID yang sama dengan SID dalam skrip output. Dalam hal ini, Anda menerima pesan galat ketika Anda menjalankan skrip output pada contoh di server B:
    MSG 15433, tingkat 16, negara bagian 1, baris 1
    Parameter disediakan sid sedang digunakan.
    Oleh karena itu, Anda harus melakukan hal berikut ini:
    1. Meninjau skrip output dengan seksama.
    2. Periksa konten tampilan sys.server_principals dalam contoh di server B.
    3. alamat penyuratan pesan galat ini yang sesuai.
  • Di SQL Server 2005, SID for login yang digunakan untuk menerapkan database tingkat akses. Login mungkin memiliki SID berbeda dalam database yang berbeda di server. Dalam hal ini, login hanya dapat mengakses pangkalan data yang telah SID yang cocok dengan SID dalam tampilan sys.server_principals . Masalah ini dapat terjadi jika dua database gabungan dari server yang berbeda. Untuk mengatasi masalah ini, secara manual menghapus login dari pangkalan data yang telah ketidakcocokan SID menggunakan pernyataan DROP pengguna. Kemudian, tambahkan login lagi menggunakan pernyataan membuat pengguna.
Referensi
Untuk informasi selengkapnya tentang cara memecahkan masalah ditinggalkan pengguna, kunjungi Memecahkan masalah ditinggalkan pengguna situs web Microsoft Developer Network (MSDN).

Untuk informasi selengkapnya tentang membuat LOGIN pernyataan, kunjungi MEMBUAT LOGIN (Transact-SQL) MSDN website.

Untuk informasi lebih lanjut tentang pernyataan mengubah LOGIN, kunjungi MENGUBAH LOGIN (Transact-SQL) MSDN website.

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 918992 - Tinjauan Terakhir: 07/03/2016 12:42:00 - Revisi: 3.0

Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Workgroup Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise

  • kbsqlsetup kbexpertiseadvanced kbhowto kbinfo kbmt KB918992 KbMtid
Tanggapan
p;t=">