Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Làm thế nào để chuyển các tin đăng nhập và mật khẩu giữa các trường hợp của SQL Server

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:246133
TÓM TẮT
Sau khi bạn di chuyển cơ sở dữ liệu vào một máy chủ mới, người dùng có thể không có thể đăng nhập vào hệ phục vụ mới. Thay vào đó, họ nhận được lỗi sau tin nhắn:
Msg 18456, cấp 16, bang 1
Đăng nhập không thể cho người dùng '% ls'.
Bạn phải chuyển các tin đăng nhập và mật khẩu phục vụ mới. Bài viết này mô tả làm thế nào bạn chuyển tên đăng nhập và mật khẩu máy chủ mới.

Làm thế nào chuyển tên đăng nhập và mật khẩu giữa máy chủ đang chạy SQL Server 7.0

Đối tượng dịch vụ dữ liệu biến đổi (DTS) SQL Server 7.0 Chuyển tính năng chuyển tên đăng nhập và người sử dụng giữa hai máy chủ, nhưng nó có phải không chuyển mật khẩu cho SQL Server chứng thực đăng nhập. Để chuyển tên đăng nhập và mật khẩu từ một máy chủ đang chạy SQL Server 7.0 khác máy chủ đang chạy SQL Server 7.0, làm theo các bước trong phần "Độ phân giải đầy đủ để chuyển giao tên đăng nhập và mật khẩu giữa các phiên bản khác nhau của SQL Server".

Làm thế nào để chuyển giao tên đăng nhập và mật khẩu từ SQL Máy chủ 7.0 cho SQL Server 2000 hoặc giữa các máy chủ đang chạy SQL Server 2000

Chuyển tên đăng nhập và mật khẩu từ một máy chủ SQL Server 7.0 để một thể hiện của SQL Server 2000, hoặc giữa hai thể hiện của SQL Server 2000, bạn có thể sử dụng mới DTS gói chuyển Logins Task trong SQL Server 2000. Để thực hiện việc này, hãy làm theo những bước sau:
  1. Kết nối tới hệ phục vụ đích SQL Server 2000, di chuyển sang dịch vụ chuyển đổi dữ liệu trong SQL Server quản lý doanh nghiệp, mở rộng thư mục, nhấp chuột phải Địa phương gói, và sau đó nhấp vào Trọn gói mới.
  2. Sau khi các DTS gói thiết kế mở, bấm Chuyển giao nhiệm vụ Logins trên các Nhiệm vụ trình đơn. Hoàn tất các thông tin về các Nguồn, Điểm đếnĐăng nhập Tab như là thích hợp.

    Quan trọng Máy chủ đích SQL Server 2000 không thể chạy các phiên bản 64-bit của SQL Server 2000. DTS thành phần cho các phiên bản 64-bit của SQL Server 2000 không có sẵn. Nếu bạn đang chuyển nhập đăng nhập từ một thể hiện của SQL Server đó là trên một máy tính riêng biệt, bạn thể hiện của SQL Server sẽ phải chạy dưới một trương mục vùng để hoàn thành nhiệm vụ.

    Chú ý Phương pháp DTS sẽ chuyển giao các mật khẩu nhưng không các SID ban đầu. Nếu một tên đăng nhập không được tạo ra bằng cách sử dụng bản gốc SID và người sử dụng cơ sở dữ liệu cũng được chuyển giao cho một máy chủ mới, những người sử dụng cơ sở dữ liệu sẽ mồ côi từ đăng nhập. Để chuyển SID gốc và bỏ qua các mồ côi người sử dụng, hãy làm theo các bước trong phần "Độ phân giải đầy đủ để chuyển giao tên đăng nhập và mật khẩu giữa các phiên bản khác nhau của SQL Server".

Làm thế nào để chuyển các tin đăng nhập và mật khẩu giữa các trường hợp của SQL Server 2005

Để biết thêm chi tiết về làm thế nào để chuyển các tin đăng nhập và mật khẩu giữa các trường hợp của SQL Server 2005, nhấp vào số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
918992Làm thế nào để chuyển các tin đăng nhập và mật khẩu giữa các trường hợp của SQL Server 2005

Độ phân giải đầy đủ để chuyển các tin đăng nhập và mật khẩu giữa các phiên bản khác nhau của SQL Server

Để thực hiện việc này, sử dụng một trong các phương pháp sau.
Chú ý
  • Các kịch bản trong các phương pháp sau đây tạo hai thủ tục được lưu trữ được đặt tên theo các sp_hexadecimal lưu trữ thủ tục và các sp_help_revlogin lưu trữ thủ tục tại của bạn Thạc sĩ cơ sở dữ liệu.
  • Các script đang phụ thuộc vào máy chủ SQL hệ thống bàn. Cơ cấu của các bảng có thể thay đổi giữa các phiên bản của máy chủ SQL. Chọn trực tiếp từ hệ thống bảng khuyến khích.
  • Xem xét những nhận xét ở phần cuối của bài viết này cho quan trọng thông tin về các bước trong các phương pháp.
  • Phương pháp 2 gán tên đăng nhập cho vai trò.

Phương pháp 1

Phương pháp này áp dụng cho các kịch bản sau đây:
  • Bạn truyền tin đăng nhập và mật khẩu từ SQL Server 7.0 cho SQL Server 7.0.
  • Bạn truyền tin đăng nhập và mật khẩu từ SQL Server 7.0 cho SQL Server 2000.
  • Bạn truyền tin đăng nhập và mật khẩu giữa máy chủ đang chạy SQL Server 2000.
Để chuyển các tin đăng nhập và mật khẩu giữa các phiên bản khác nhau của SQL Server, hãy làm theo các bước sau:
  1. Chạy đoạn mã sau vào nguồn SQL Server. Tiếp tục bước 2 khi bạn kết thúc việc tạo cácsp_help_revlogin thủ tục được lưu trữ.
    ----- 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. Sau khi bạn tạo các sp_help_revlogin lưu trữ thủ tục, chạy các sp_help_revlogin thủ tục từ phân tích truy vấn trên máy chủ nguồn. Các sp_help_revlogin thủ tục được lưu trữ có thể được sử dụng trên cả SQL Server 7.0 và SQL Server 2000. Đầu ra của các sp_help_revlogin thủ tục được lưu trữ là kịch bản đăng nhập tạo ra các tin đăng nhập với các bản gốc SID và mật khẩu. Tiết kiệm đầu ra, và sau đó dán và chạy nó trong truy vấn Phân tích về điểm đến máy chủ SQL. Ví dụ:
    EXEC master..sp_help_revlogin

Phương pháp 2

Phương pháp này áp dụng cho các kịch bản sau đây:
  • Bạn truyền tin đăng nhập và mật khẩu từ SQL Server 7.0 cho SQL Server 2005.
  • Bạn truyền tin đăng nhập và mật khẩu từ SQL Server 2000-SQL Server 2005.
  • Bạn chỉ định tên đăng nhập cho vai trò.
Để chuyển các tin đăng nhập và mật khẩu giữa các phiên bản khác nhau của SQL Server và sau đó chỉ định tên đăng nhập cho vai trò, hãy làm theo các bước sau:
  1. Chạy đoạn mã sau vào nguồn 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. Tiết kiệm đầu ra, và sau đó dán và chạy đầu ra trong SQL Server Management Studio vào đích SQL Server 2005.
Chú ý Nếu nguồn SQL Server chứa một đăng nhập có mật khẩu trống, đầu ra có một tuyên bố tương tự như dưới đây.
CREATE LOGIN LoginName WITH PASSWORD = '', CHECK_POLICY = OFF, SID = MySID

Nhận xét

  • Xem lại đoạn mã đầu ra một cách cẩn thận trước khi bạn chạy nó trên các điểm đến máy chủ SQL. Nếu bạn có thể chuyển giao tên đăng nhập cho một thể hiện của SQL Máy chủ trong một tên miền khác với ví dụ mã nguồn của SQL Server, chỉnh sửa các kịch bản được tạo ra bởi các sp_help_revlogin thủ tục, và thay thế tên miền tên với tên miền mới trong cácsp_grantlogin phát biểu. Bởi vì các tin đăng nhập tích hợp cấp quyền truy cập vào các tên miền mới sẽ không có SID tương tự như các tin đăng nhập trong tên miền gốc, các cơ sở dữ liệu người dùng sẽ được mồ côi từ các tin đăng nhập. Để giải quyết những mồ côi người sử dụng, xem các bài viết được tham chiếu trong mục đạn sau. Nếu bạn chuyển tên đăng nhập tích hợp giữa các trường hợp của các máy chủ SQL trong cùng một tên miền, SID tương tự được sử dụng và người sử dụng không phải là khả năng được mồ côi.
  • Sau khi bạn di chuyển các tin đăng nhập, người dùng có thể không có quyền để truy cập vào cơ sở dữ liệu cũng đã được di chuyển. Vấn đề này được mô tả như một "mồ côi người dùng". Nếu bạn cố gắng để cấp quyền truy cập đăng nhập vào cơ sở dữ liệu, nó có thể không cho thấy người dùng đã tồn tại:
    Microsoft SQL-DMO (ODBC SQLState: 42000) lỗi 15023: người sử dụng hoặc vai trò '% s' đã tồn tại trong cơ sở dữ liệu hiện tại.
    Để được hướng dẫn về làm thế nào để lập bản đồ các tin đăng nhập để người sử dụng cơ sở dữ liệu để giải quyết mồ côi SQL Server đăng nhập và đăng nhập tích hợp, Xem bài viết sau trong cơ sở kiến thức Microsoft:
    240872 Làm thế nào để giải quyết các vấn đề quyền khi bạn di chuyển một cơ sở dữ liệu giữa các máy chủ đang chạy SQL Server
    Để được hướng dẫn về cách sử dụng các sp_change_users_login lưu trữ thủ tục để khắc phục những người sử dụng mồ côi cái một (điều này sẽ chỉ có địa chỉ người dùng mồ côi từ tiêu chuẩn SQL đăng nhập), xem sau đây bài viết trong cơ sở kiến thức Microsoft:
    274188 "Giải đáp thắc mắc người dùng Orphaned" chủ đề trong cuốn sách trực tuyến là không đầy đủ
  • Nếu việc chuyển giao các tin đăng nhập và mật khẩu là một phần của một di chuyển cơ sở dữ liệu vào một máy chủ mới chạy SQL Server, xem bài viết sau đây trong cơ sở kiến thức Microsoft cho một mô tả về quy trình làm việc và bước tham gia:
    314546 Làm thế nào để di chuyển cơ sở dữ liệu giữa các máy tính đang chạy SQL Server
  • Bạn có thể làm điều này vì các @ encryptopt tham số trong các sp_addlogin hệ thống lưu trữ thủ tục, mà cho phép một đăng nhập được tạo ra bởi bằng cách sử dụng mật khẩu được mật mã hóa. Để biết thêm chi tiết về thủ tục này, xem chủ đề "sp_addlogin (T-SQL)" trong SQL Server sách trực tuyến.
  • Theo mặc định, chỉ có thành viên vai trò máy chủ sysadminfixed có thể chọn từ các sysxlogins bảng. Trừ khi một thành viên của vai trò Ilos cấp cần thiết cấp phép, người dùng không thể tạo hoặc chạy các thủ tục được lưu trữ.
  • Cách tiếp cận này không nên cố gắng chuyển cơ sở dữ liệu mặc định thông tin cho một đăng nhập đặc biệt vì cơ sở dữ liệu mặc định có thể không phải luôn luôn tồn tại trên máy chủ đích. Để xác định cơ sở dữ liệu mặc định cho một đăng nhập, bạn có thể sử dụng các sp_defaultdb hệ thống lưu trữ thủ tục bằng cách gởi nó tên đăng nhập và các mặc định cơ sở dữ liệu như là đối số. Cho biết thêm thông tin về việc sử dụng thủ tục này, xem chủ đề "sp_defaultdb" trong SQL Server sách trực tuyến.
  • Trong một chuyển giao tên đăng nhập giữa trường hợp của SQL Máy chủ, nếu thứ tự sắp xếp của các máy chủ nguồn là quản và phân loại đặt hàng của máy chủ đích là chữ, bạn phải nhập tất cả ký tự thứ tự chữ cái trong mật khẩu như ký tự chữ hoa sau khi việc chuyển giao của đăng nhập vào hệ phục vụ đích. Nếu thứ tự sắp xếp của các máy chủ nguồn là chữ và thứ tự sắp xếp của máy chủ đích là quản, bạn sẽ không thể đăng nhập với tên đăng nhập chuyển bằng cách sử dụng các thủ tục được nêu trong bài viết này, trừ khi mật khẩu gốc có không có ký tự chữ cái hoặc trừ khi tất cả các ký tự chữ cái trong gốc mật khẩu là ký tự chữ hoa. Nếu cả hai máy chủ chữ hoặc cả hai máy chủ được quản, bạn sẽ không kinh nghiệm vấn đề này. Đây là một tác dụng phụ của quá trình xử lý SQL Server mật khẩu. Để biết thêm thông tin, xem "có hiệu lực vào mật khẩu của thay đổi loại Đơn đặt hàng"chủ đề trong SQL Server 7.0 sách trực tuyến.
  • Khi bạn chạy sản lượng từ các sp_help_revlogin kịch bản trên máy chủ đích, nếu máy chủ đích đã có một tên đăng nhập được định nghĩa có cùng tên như là một trong các tin đăng nhập vào đầu ra kịch bản, bạn có thể xem các sau lỗi khi thực hiện của đầu ra của các sp_help_revlogin kịch bản:
    Máy chủ: Msg 15025, Cấp 16, bang 1, thủ tục sp_addlogin, Line 56
    Đăng nhập 'test1' đã tồn tại.
    Tương tự, nếu một đăng nhập khác nhau tồn tại với cùng một giá trị SID trên máy chủ này là một trong những bạn đang cố gắng để thêm, bạn nhận được thông báo lỗi sau:
    Máy chủ: Msg 15433, Cấp 16, bang 1, thủ tục sp_addlogin, Line 93
    Cung cấp tham số @ sid đang dùng.
    Vì vậy, bạn phải cẩn thận xem xét đầu ra từ lệnh này, kiểm tra nội dung của các sysxlogins bảng, và giải quyết các lỗi này cho phù hợp.
  • Giá trị SID cho một đăng nhập cụ thể được sử dụng làm cơ sở cho việc thực hiện truy cập cấp cơ sở dữ liệu trong SQL Server. Vì vậy, nếu như vậy đăng nhập có hai giá trị khác nhau cho SID cấp cơ sở dữ liệu (tại hai khác nhau databases trên máy chủ đó), đăng nhập sẽ chỉ có quyền truy cập vào đó cơ sở dữ liệu mà SID phù hợp với giá trị trong syslogins cho rằng đăng nhập. Một tình huống có thể xảy ra nếu hai cơ sở dữ liệu trong câu hỏi đã được hợp nhất từ hai máy chủ khác nhau. Để giải quyết này vấn đề, đăng nhập trong câu hỏi phải được gỡ bỏ bằng tay từ các cơ sở dữ liệu này có một SID không phù hợp bằng cách sử dụng các sp_dropuser lưu trữ thủ tục, và sau đó thêm một lần nữa bằng cách sử dụng các sp_adduser thủ tục được lưu trữ.

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 246133 - Xem lại Lần cuối: 09/17/2011 23:06:00 - Bản sửa đổi: 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 Server 2005 Workgroup Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition

  • kbsqlsetup kbhowtomaster kbinfo kbmt KB246133 KbMtvi
Phản hồi