Τρόπος μεταφοράς συνδέσεων και κωδικών πρόσβασης μεταξύ εμφανίσεων του SQL Server

Περίληψη
Μετά από τη μετακίνηση βάσεων δεδομένων σε ένα νέο διακομιστή, οι χρήστες ενδέχεται να μην είναι σε θέση να συνδεθούν με το νέο διακομιστή. Αντίθετα, εμφανίζεται το ακόλουθο μήνυμα λάθους:
Msg 18456, Level 16, State 1
Login failed for user '%ls'.
Πρέπει να μεταφέρετε τις συνδέσεις και τους κωδικούς πρόσβασης στο νέο διακομιστή. Αυτό το άρθρο περιγράφει τον τρόπο μεταφοράς συνδέσεων και κωδικών πρόσβασης σε νέο διακομιστή.

Τρόπος μεταφοράς συνδέσεων και κωδικών πρόσβασης μεταξύ διακομιστών που χρησιμοποιούν SQL Server 7.0

Η δυνατότητα μεταφοράς αντικειμένων (Object Transfer) DTS (Data Transformation Services) του 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 Package Transfer Logins Task στον SQL Server 2000. Για να το κάνετε αυτό, ακολουθήστε τα εξής βήματα:
  1. Συνδεθείτε με το διακομιστή προορισμού με SQL Server 2000, μετακινηθείτε στον Data Transformation Services in SQL Server Enterprise Manager, αναπτύξτε το φάκελο, κάντε δεξιό κλικ στην επιλογή Πακέτα τοπικών ρυθμίσεων (Local Packages) και, στη συνέχεια, κάντε κλικ στην επιλογή Νέο πακέτο (New Package).
  2. Μετά το άνοιγμα του σχεδιαστή πακέτων DTS, κάντε κλικ στην επιλογή Εργασία μεταφοράς συνδέσεων (Transfer Logins Task) στο μενού Εργασία (Task). Συμπληρώστε τις πληροφορίες σχετικά με τις καρτέλες Προέλευση (Source), Προορισμός (Destination) και Συνδέσεις (Logins), ανάλογα με την περίπτωσή σας.

    Σημαντικό Ο διακομιστής προορισμού SQL Server 2000 δεν είναι σε θέση να εκτελέσει την έκδοση 64-bit του SQL Server 2000. Τα στοιχεία DTS για την έκδοση 64-bit του SQL Server 2000 δεν είναι διαθέσιμα. Στην περίπτωση που εισαγάγετε συνδέσεις από μια εμφάνιση του SQL Server η οποία βρίσκεται σε ξεχωριστό υπολογιστή, για να ολοκληρωθεί η εργασία, η εμφάνιση του SQL Server πρέπει να εκτελείται σε λογαριασμό τομέα (Domain Account).

    Σημείωση Η μέθοδος DTS θα μεταφέρει τους κωδικούς πρόσβασης αλλά όχι το πρωτότυπο SID. Εάν μια σύνδεση δεν δημιουργηθεί με τη χρήση του πρωτότυπου SID και οι βάσεις δεδομένων μεταφέρονται επίσης στο νέο διακομιστή, οι χρήστες της βάσης δεδομένων θα μείνουν ορφανοί από σύνδεση. Για να μεταφέρετε το αρχικό SID και να παρακάμψετε τους ορφανούς χρήστες, ακολουθήστε τα βήματα της ενότητας "Πλήρης λύση για τη μεταφορά συνδέσεων και κωδικών πρόσβασης μεταξύ διαφορετικών εκδόσεων του SQL Server".

Τρόπος μεταφοράς συνδέσεων και κωδικών πρόσβασης μεταξύ εμφανίσεων του SQL Server 2005

Για περισσότερες πληροφορίες σχετικά με τον τρόπο μεταφοράς των συνδέσεων και των κωδικών πρόσβασης μεταξύ εμφανίσεων του SQL Server 2005, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής βάσης της Microsoft (Knowledge Base):
918992 Τρόπος μεταφοράς των συνδέσεων και των κωδικών πρόσβασης μεταξύ εμφανίσεων του SQL Server 2005

Πλήρης λύση για τη μεταφορά συνδέσεων και κωδικών πρόσβασης μεταξύ διαφορετικών εκδόσεων του SQL Server

Για να γίνει αυτό, χρησιμοποιήστε μία από τις ακόλουθες μεθόδους.
Σημειώσεις (Notes)
  • Οι δέσμες ενεργειών που περιγράφονται στις ακόλουθες μεθόδους δημιουργούν δύο αποθηκευμένες διαδικασίες, οι οποίες ονομάζονται αποθηκευμένη διαδικασία sp_hexadecimal και αποθηκευμένη διαδικασία sp_help_revlogin στη βάση δεδομένων master.
  • Οι δέσμες ενεργειών εξαρτώνται από τους πίνακες του συστήματος 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 όσο και στον SQL Server 2000. Το αποτέλεσμα της αποθηκευμένης διαδικασίας sp_help_revlogin είναι δέσμες ενεργειών σύνδεσης, οι οποίες δημιουργούν συνδέσεις με το πρωτότυπο SID και κωδικό πρόσβασης. Αποθηκεύστε το αποτέλεσμα και, στη συνέχεια, επικολλήστε και εκτελέστε τον στον Query Analyzer στον 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 Management Studio του SQL Server 2005 προορισμού.
Σημείωση Στην περίπτωση που ο SQL Server προέλευσης περιέχει μια σύνδεση που έχει κενό κωδικό πρόσβασης, το αποτέλεσμα περιέχει μια δήλωση που μοιάζει με την ακόλουθη.
CREATE LOGIN LoginName WITH PASSWORD = '', CHECK_POLICY = OFF, SID = MySID

Παρατηρήσεις

  • Μελετήστε προσεκτικά τη δέσμη ενεργειών που προκύπτει προτού την εκτελέσετε στο διακομιστή SQL Server προορισμού. Εάν χρειάζεται να μεταφέρετε συνδέσεις σε μια εμφάνιση του SQL Server διαφορετικού τομέα από αυτού της εμφάνισης προέλευσης του SQL Server, τροποποιήστε τη δέσμη ενεργειών που δημιουργήθηκε από τη διαδικασία sp_help_revlogin και αντικαταστήστε το όνομα τομέα με το νέο όνομα στις δηλώσεις sp_grantlogin. Επειδή οι ενσωματωμένες συνδέσεις στις οποίες έχει εκχωρηθεί πρόσβαση στο νέο τομέα, δεν θα έχουν το ίδιο SID με τις συνδέσεις του πρωτότυπου τομέα, οι χρήστες της βάσης δεδομένων δεν θα διαθέτουν αυτές τις συνδέσεις. Για να επιλύσετε το πρόβλημα με τους χρήστες που δεν διαθέτουν τις συνδέσεις, ανατρέξτε στα άρθρα που αναφέρονται στο ακόλουθο στοιχείο με κουκκίδες. Εάν μεταφέρετε ενσωματωμένες συνδέσεις μεταξύ εμφανίσεων του SQL Servers στον ίδιο τομέα, χρησιμοποιείται το ίδιο SID και ο χρήστης είναι απίθανο να μην διαθέτει τις συνδέσεις.
  • Μετά τη μετακίνηση των συνδέσεων, οι χρήστες ενδέχεται να μην έχουν δικαιώματα πρόσβασης σε βάσεις δεδομένων οι οποίες έχουν επίσης μετακινηθεί. Αυτό το πρόβλημα περιγράφεται ως "ορφανοί χρήστες". Εάν επιχειρήσετε να εκχωρήσετε δικαιώματα πρόσβασης σε σύνδεση στη βάση δεδομένων, ενδέχεται να αποτύχει η υπόδειξη του χρήστη που υπάρχει ήδη:
    Microsoft SQL-DMO (ODBC SQLState: 42000) Error 15023: User or role '%s' already exists in the current database.
    Για οδηγίες σχετικά με την αντιστοίχηση των συνδέσεων με χρήστες της βάσης δεδομένων για την επίλυση ορφανών συνδέσεων SQL Server και ενσωματωμένων συνδέσεων, ανατρέξτε στο ακόλουθο άρθρο της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
    240872 Τρόπος επίλυσης ζητημάτων δικαιωμάτων κατά τη μετακίνηση μιας βάσης δεδομένων μεταξύ διακομιστών που χρησιμοποιούν SQL Server
    Για οδηγίες σχετικά με τη χρήση της αποθηκευμένης διαδικασίας sp_change_users_login για τη διόρθωση των ορφανών χρηστών έναν προς έναν (αυτό θα βοηθήσει μόνο τους χρήστες που είναι ορφανοί από τυπικές συνδέσεις SQL), ανατρέξτε στο ακόλουθο άρθρο της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
    274188 Το θέμα "Αντιμετώπιση προβλημάτων με ορφανούς χρήστες" στα ηλεκτρονικά βιβλία (Books Online) είναι ελλιπές
  • Εάν οι μεταφορά συνδέσεων και κωδικών πρόσβασης αποτελεί μέρος μιας μετακίνησης βάσεων δεδομένων σε ένα νέο διακομιστή που χρησιμοποιεί SQL Server, ανατρέξτε στο ακόλουθο άρθρο της Γνωσιακής Βάσης της Microsoft (Knowledge Base) για μια περιγραφή της ροής εργασίας και των βημάτων που περιλαμβάνονται:
    314546 Τρόπος μετακίνησης βάσεων δεδομένων μεταξύ υπολογιστών που χρησιμοποιούν SQL Server
  • Αυτό μπορείτε να το κάνετε μέσω της παραμέτρου @encryptopt της αποθηκευμένης διαδικασίας συστήματος sp_addlogin, η οποία επιτρέπει τη δημιουργία μιας σύνδεσης, χρησιμοποιώντας τον κρυπτογραφημένο κωδικό πρόσβασης. Για περισσότερες πληροφορίες σχετικά με αυτήν τη διαδικασία, ανατρέξτε στο θέμα "sp_addlogin (T-SQL)" στο SQL Server Books Online.
  • Από προεπιλογή, μόνο τα μέλη του ρόλου διακομιστή sysadminfixed έχουν το δικαίωμα επιλογής από τον πίνακα sysxlogins . Αν δεν παραχωρηθούν τα απαραίτητα δικαιώματα από ένα μέλος του ρόλου sysadmin, οι τελικοί χρήστες δεν μπορούν να δημιουργήσουν ή να εκτελέσουν αποθηκευμένες διαδικασίες.
  • Αυτή η προσέγγιση δεν επιχειρεί να μεταφέρει τις πληροφορίες της προεπιλεγμένης βάσης δεδομένων για μια συγκεκριμένη σύνδεση, επειδή η προεπιλεγμένη βάση δεδομένων ενδέχεται να μην υπάρχει στο διακομιστή προορισμού. Για να καθορίσετε την προεπιλεγμένη βάση δεδομένων για μια σύνδεση, μπορείτε να χρησιμοποιήσετε την αποθηκευμένη διαδικασία συστήματος sp_defaultdb, μεταφέροντας σε αυτήν το όνομα σύνδεσης και την προεπιλεγμένη βάση δεδομένων ως ορίσματα. Για περισσότερες πληροφορίες σχετικά με τη χρήση αυτής της διαδικασίας, ανατρέξτε στο θέμα "sp_defaultdb" στο SQL Server Books Online.
  • Στη διάρκεια της μεταφοράς συνδέσεων μεταξύ εμφανίσεων του SQL Server, εάν η σειρά ταξινόμησης του διακομιστή προέλευσης και του διακομιστή προορισμού κάνουν διάκριση πεζών-κεφαλαίων, πρέπει να καταχωρήσετε όλους τους αλφαβητικούς χαρακτήρες των κωδικών πρόσβασης με κεφαλαία γράμματα, μετά από τη μεταφορά των συνδέσεων στο διακομιστή προορισμού. Εάν η σειρά ταξινόμησης του διακομιστή προέλευσης κάνει διάκριση πεζών-κεφαλαίων και η σειρά ταξινόμησης του διακομιστή προορισμού δεν κάνει διάκριση πεζών-κεφαλαίων, δεν θα έχετε τη δυνατότητα να συνδεθείτε με τις συνδέσεις που μεταφέρθηκαν χρησιμοποιώντας τη διαδικασία που περιγράφεται σε αυτό το άρθρο, εκτός αν ο αρχικός κωδικός πρόσβασης περιέχει μη αλφαβητικούς χαρακτήρες ή αν όλοι οι αλφαβητικοί χαρακτήρες του αρχικού κωδικού πρόσβασης είναι με κεφαλαία γράμματα. Στην περίπτωση που και οι δύο διακομιστές κάνουν διάκριση πεζών-κεφαλαίων ή δεν κάνουν διάκριση πεζών-κεφαλαίων, δεν θα αντιμετωπίσετε αυτό το πρόβλημα. Αυτή είναι μια παρενέργεια του τρόπου χειρισμού κωδικών πρόσβασης από τον SQL Server. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα "Επίδραση της αλλαγής σειράς ταξινόμησης σε κωδικούς πρόσβασης" στο SQL Server 7.0 Books Online.
  • Όταν εκτελείτε το αποτέλεσμα της δέσμης ενεργειών sp_help_revlogin στο διακομιστή προορισμού, εάν ο διακομιστής προορισμού διαθέτει ήδη μια σύνδεση που έχει καθοριστεί με το ίδιο όνομα που έχει μία από τις συνδέσεις του αποτελέσματος της δέσμης ενεργειών, ενδέχεται να δείτε το ακόλουθο σφάλμα κατά την εκτέλεση του αποτελέσματος της δέσμης ενεργειών sp_help_revlogin:
    Server: Msg 15025, Level 16, State 1, Procedure sp_addlogin, Line 56
    The login 'test1' already exists.
    Ομοίως, εάν σε αυτόν το διακομιστή υπάρχει μια διαφορετική σύνδεση με την ίδια τιμή SID με αυτήν που προσπαθείτε να προσθέσετε, εμφανίζεται το ακόλουθο μήνυμα λάθους:
    Server: Msg 15433, Level 16, State 1, Procedure sp_addlogin, Line 93
    Supplied parameter @sid is in use.
    Κατά συνέπεια, πρέπει να μελετήσετε προσεκτικά το αποτέλεσμα αυτών των εντολών, να εξετάσετε τα περιεχόμενα του πίνακα sysxlogins και να αντιμετωπίσετε ανάλογα αυτά τα σφάλματα.
  • Η τιμή SID μιας συγκεκριμένης σύνδεσης χρησιμοποιείται ως βάση για την υλοποίησης πρόσβασης επιπέδου βάσης δεδομένων στον SQL Server. Επομένως, εάν η ίδια σύνδεση έχει δύο διαφορετικές τιμές για το SID στο επίπεδο βάσης δεδομένων (σε δύο διαφορετικές βάσεις δεδομένων αυτού του διακομιστή), η σύνδεση θα έχει δικαίωμα πρόσβασης μόνο σε αυτήν τη βάση δεδομένων της οποίας το SID ταιριάζει με την τιμή του syslogins για αυτήν τη σύνδεση. Μια τέτοια κατάσταση μπορεί να προκύψει όταν οι εν λόγω δύο βάσεις δεδομένων έχουν ενοποιηθεί από δύο διαφορετικούς διακομιστές. Για να επιλύσετε αυτό το πρόβλημα, η εν λόγω σύνδεση πρέπει να καταργηθεί με μη αυτόματο τρόπο από τη βάση δεδομένων, στην οποία εμφανίζεται ασυμφωνία SID, χρησιμοποιώντας την αποθηκευμένη διαδικασία sp_dropuser και, στη συνέχεια, να προστεθεί ξανά χρησιμοποιώντας την αποθηκευμένη διαδικασία sp_adduser.
Ιδιότητες

Αναγνωριστικό άρθρου: 246133 - Τελευταία αναθεώρηση: 02/26/2008 09:04:11 - Αναθεώρηση: 8.2

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 Server 2005 Workgroup Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition

  • kbhowtomaster kbinfo KB246133
Σχόλια