设为主页 | 加入收藏 | 繁體中文

怎样在 SQL Server 实例之间传输登录和密码

  来自:http://blog.csdn.net/ITmuse/
  提要在将数据库移动到新服务器后,用户可能无法登录到新服务器。相反,他们会收到上面的错误信息:
  Msg 18456, Level 16, State 1
  Login failed for user '%ls'.
  您必需将登录和暗码传输到新服务器。本文先容怎样向新服务器传输登录和暗码。
  怎样在正运转 SQL Server 7.0 的服务器之间传输登录和暗码
  SQL Server 7.0 数据转换服务 (DTS) 对象传输功能可在两台服务器之间传输登录和用户,但它不传输 SQL Server 验证登录的暗码。要从一台运转 SQL Server 7.0 的服务器向另一台运转 SQL Server 7.0 的服务器传输登录和暗码,请根据本文"在 Master 数据库中创立和运转存储历程"一节中的说明操纵。您将在源服务器上创立 sp_help_revlogin 存储历程。此历程将生成一个脚本,您可以在目标服务器上运转该脚本,以重新创立带有原始宁静标识号 (SID) 的登录,并保留当前的暗码。
  怎样从 SQL Server 7.0 向 SQL Server 2000 或者在正运转 SQL Server 2000 的服务器之间传输登录和暗码
  要从 SQL Server 7.0 服务器向 SQL Server 2000 的一个实例或者在 SQL Server 2000 的两个实例之间传输登录和暗码,可以使用 SQL Server 2000 中新的 DTS Package Transfer Logins Task(DTS 包传输登录任务)。要使用此任务,请执行以下步调:
  在 Master 数据库中创立和运转存储历程
  请查看本文末尾的备注,以相识有关下列步调的紧张信息。
  1. 在源 SQL Server 上运转以下脚本。此脚本可在 master 数据库中创立称号分别为 sp_hexadecimal 和 sp_help_revlogin 的两个存储历程。请在创立完历程之后继续执行第 2 步。
  细致:上面的历程取决于 SQL Server 系统表。这些表的布局在 SQL Server 的差别版本之间可能会有变化,请不要直接从系统表中选择。
  ----- Begin Script, Create sp_help_revlogin procedure -----
  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') IS NOT NULL
  DROP PROCEDURE sp_help_revlogin
  GO
  CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
  DECLARE @name    sysname
  DECLARE @xstatus int
  DECLARE @binpwd  varbinary (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 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_name
  OPEN login_curs
  FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
  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 '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


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: