主页>技术社区>IT 技术>数据库>SQL Server>SQL教程

如何 SQL Server 2005 实例之间传输登录和密码

eIT.com.cn 2022/11/26 23:24:37 阅读 46 次

打印


INTRODUCTION

本文介绍如何不同服务器上的 Microsoft Server 2005 实例之间传输和密码。

本文, 服务器 A 和服务器 B 是不同的服务器。 此外, 服务器 A 和 B 服务器都运行 Server 2005。
将从服务器 A 上的 Server 实例移到 B, 服务器上的 Server 实例后可能不能够到 B 另外服务器上, 可能收到以下信息:

对于 MyUser ' ' 失败。 (MicrosoftServer、 18456:)

发生此问题是因为没有您做从服务器 A 上的 Server 实例传输和密码到服务器 B 上的 Server 实例
要从服务器 A 上的 Server 实例传输到服务器 B, 上的 Server 实例和密码请按照下列步骤操作:

1.在服务器 A, 启动 ServerManagementStu, 并然后连接到 Server 从中移动的实例。

2.打开新编辑器窗口, 然后运行以下脚本。

USE masterGOIF OBJECT_ID ('sp_hexadecimal') IS NOT NULLDROP 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)BEGINDECLARE @tempint intDECLARE @ftint intDECLARE @secondint intSELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))SELECT @ftint = FLOOR(@tempint/16)SELECT @secondint = @tempint - (@ftint*16)SELECT @charvalue = @charvalue +SUBSTRING(@hexstring, @ftint+1, 1) +SUBSTRING(@hexstring, @secondint+1, 1)SELECT @i = @i + 1ENDSELECT @hexvalue = @charvalueGOIF OBJECT_ID ('sp_help_revlogin') IS NOT NULLDROP PROCEDURE sp_help_revloginGOCREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL ASDECLARE @name sysnameDECLARE @type varchar (1)DECLARE @hasaccess intDECLARE @denylogin intDECLARE @is_abled 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 sysnameIF (@login_name IS NULL)DECLARE login_curs CURSOR FORSELECT p.sid, p.name, p.type, p.is_abled, p.default_database_name, l.hasaccess, l.denylogin FROMsys.server_principals p LEFT JOIN sys.syslogins lON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'ELSEDECLARE login_curs CURSOR FORSELECT p.sid, p.name, p.type, p.is_abled, p.default_database_name, l.hasaccess, l.denylogin FROMsys.server_principals p LEFT JOIN sys.syslogins lON ( 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_abled, @defaultdb, @hasaccess, @denyloginIF (@@fetch_status = -1)BEGINPRINT 'No login(s) found.'CLOSE login_cursDEALLOCATE login_cursRETURN -1ENDSET @tmpstr = '/* sp_help_revlogin script 'PRINT @tmpstrSET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'PRINT @tmpstrPRINT ''WHILE (@@fetch_status <> -1)BEGINIF (@@fetch_status <> -2)BEGINPRINT ''SET @tmpstr = '-- Login: ' + @namePRINT @tmpstrIF (@type IN ( 'G', 'U'))BEGIN -- NT authenticated account/groupSET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'ENDELSE BEGIN --  Server authentication-- obtain password and sidSET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUTEXEC sp_hexadecimal @SID_varbinary,@SID_string OUT-- obtain password policy stateSELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys._logins WHERE name = @nameSELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys._logins WHERE name = @nameSET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']'IF ( @is_policy_checked IS NOT NULL )BEGINSET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checkedENDIF ( @is_expiration_checked IS NOT NULL )BEGINSET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checkedENDENDIF (@denylogin = 1)BEGIN -- login is denied accessSET @tmpstr = @tmpstr + '; DENY CONNECT  TO ' + QUOTENAME( @name )ENDELSE IF (@hasaccess = 0)BEGIN -- login exists but does not have accessSET @tmpstr = @tmpstr + '; REVOKE CONNECT  TO ' + QUOTENAME( @name )ENDIF (@is_abled = 1)BEGIN -- login is abledSET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' ABLE'ENDPRINT @tmpstrENDFETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_abled, @defaultdb, @hasaccess, @denyloginENDCLOSE login_cursDEALLOCATE login_cursRETURN 0GO

此脚本 注意 master 中创建两个存储过程。 两个存储过程命名为 sp_hexadecimal 存储过程和 sp _ help _ revlogin < 存储过程。

3.运行下列语句。

EXEC sp_help_revlogin

由 sp _ help _ revlogin < 存储过程脚本是脚本。 此脚本创建具有原始安全标识符 (SID) 和原始密码。

4.在服务器 B, 启动 ServerManagementStu, 并再连接到的移动到 Server 实例。
要点 之前请您转到步骤 5, 查阅 " 备注 " 部分中信息。

5.打开新编辑器窗口, 并运行步骤 3 中脚本。

批注

对实例 B: 服务器上运行该脚本之前检查下列信息

•仔细查看脚本。 如果服务器 A 和 B 服务器位于不同域, 您需要脚本。 然后, 您需要用新域名 LOGIN CREATETABLE 语句中替换原始域。 集成授予新域中访问原域中没有相同 SID 作为。 因此, 是从这些中孤立出去。 有关如何这些孤立, 请单击下列编号以查看 Microsoft 知识库中相应:

(http://support.microsoft.com/kb/240872/) 如何运行 Server 的服务器之间移动时权限问题

如果服务器 A 和 B 服务器位于同一域, 使用相同的 SID。 因此, 是不容易被孤立。

•由使用加密密码, 脚本中创建。 这是因为存在 LOGIN CREATETABLE 语句中 HASHED 参数。 该参数指定散, 是已经列是 PASSWORD 参数后输入该密码。

•通过认, 可只是 sysadmin 固定服务器角色成员从 sys.server_principals 视图运行 SELECT 语句。 无法创建或运行脚本除非属于 sysadmin 固定服务器角色授予对, 必要权限。

•本文中步骤执行不传输用于特定认信息。 这是因为认服务器 B 上可能不总是存在 由名和认中传递作为参数来定义认为, 使用 ALTERDATABASE LOGIN 语句。

•服务器 A 的排序顺序可能区分大小写, 并且可能区分大小写排序次序的服务器 B。 此例, 必须键入作为大写字母传送后密码和密码以服务器 B 上实例中所有字母
或者, 服务器 A 的排序顺序可能是区分大小写, 并且可能区分大小写排序次序的服务器 B。 通过和密码, 除非满足下列条件之一是传输到服务器 B 上实例此时, 无法:

•原始密码包含没有字母。

•所有原始密码中字母是大写。

服务器 A 和服务器 B 的排序顺序可能区分大小写, 或者可能是区分大小写排序次序的服务器 A 和服务器 B。 不会些情况下, 遇到问题。

•服务器 B 上实例已经处于可能有, 等同于脚本中。 种情况下, B: 服务器上实例上运行脚本时收到以下信息

msg 15, 级别 16, 1, 状态行 1
服务器 ' MyLogin ' 主体已存在。

同样, 服务器 B 上实例已经处于可能与 SID 脚本中一样, SID。 种情况下, B: 服务器上实例上运行脚本时收到以下信息

msg 15433, 级别 16, 1, 状态行 1
提供参数 sid 正在使用。

因此, 必须执行以下操作:

1.仔细查看脚本。

2.检查该实例中的服务器 B 上 sys.server_principals 视图

3.相应地这些消息。

•在 Server 2005, 用于 SID 用于作为基础实现级访问。 服务器上两个不同中可能有两个不同的 SID。 此例, 只能访问具有 SID 匹配 SID sys.server_principals 视图中。 如果是从两个不同服务器合并两个可能会发生此问题。 要此问题, 通过 DROPUSER 语句具有 SID 匹配中手动。 再次通过 CREATE USER 语句然后, 。

from:

总结

以上是为你收集整理的全部内容。

如果觉得网站内容还不错,欢迎将推荐给好友。






相关内容


热门栏目


特别声明


最新资讯
热讯排行



合作媒体友情链接
生活常识小贴士 软件开发教程 智慧城市生活网 息县通生活服务[移动版] 息县商圈[移动版] 美食菜谱
健康养生 法律知识 科技频道 电影影讯 留学考研学习 星座生肖|解梦说梦




关于我们 | 联系我们 | 合作媒体 | 使用条款 | 隐私权声明 | 版权声明

      Copyright © 2023 eIT.com.cn. All Rights Reserved. 豫ICP备2022012332号