HOWTO:在实例之间传输登录和密码

来源:互联网 发布:c 定义json对象数组 编辑:程序博客网 时间:2024/05/13 05:19
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
概要在将移动到新服务器后,用户可能无法登录到新服务器。相反,他们会收到下面的错误信息:
Msg18456,Level16,State1
Loginfailedforuser'%ls'.

您必须将登录和密码传输到新服务器。本文介绍如何向新服务器传输登录和密码

返回页首
如何在正运行SQLServer7.0的服务器之间传输登录和密码SQLServer7.0数据转换服务(DTS)对象传输功能可在两台服务器之间传输登录和用户,但它不传输SQLServer验证登录的密码。要从一台运行SQLServer7.0的服务器向另一台运行SQLServer7.0的服务器传输登录和密码,请按照本文“在Master数据库中创建和运行存储过程”一节中的说明操作。您将在源服务器上创建sp_help_revlogin存储过程。此过程将生成一个脚本,您可以在目标服务器上运行该脚本,以重新创建带有原始标识号(SID)的登录,并保留当前的密码

返回页首

如何从SQLServer7.0向SQLServer2000或者在正运行SQLServer2000的服务器之间传输登录和密码要从SQLServer7.0服务器向SQLServer2000的一个实例或者在SQLServer2000的两个实例之间传输登录密码,可以使用SQLServer2000中新的DTSPackageTransferLoginsTask(DTS包传输登录任务)。要使用此任务,请执行以下步骤:

1.连接到SQLServer2000目标服务器,移动到SQLServer企业管理器中的数据转换服务,展开此文件夹,右键单击本地程序包,然后单击新增程序包。2.在DTS程序包器打开后,单击任务菜单上的传输登录任务。根据需要完成有关源、目标和登录选项卡的信息。

重要说明:SQLServer2000目标服务器不能运行64位版本的SQLServer2000。64位版本SQLServer2000的DTS组件不可用。如果要从其他计算机上的SQLServer实例中导入登录,您的SQLServer实例必须在域帐户下运行才能完成此任务。

注意:您可以使用DTS方法或本文“在Master数据库中创建和运行存储过程”一节中的脚本,从SQLServer7.0向SQLServer2000或者在SQLServer2000的实例之间传输登录。DTS方法将传输密码,但不传输原始SID。如果登录不是使用原始SID创建的,而且用户数据库也被传输到一台新服务器,则该数据库用户将被从该登录中孤立出去。要传输原始SID并回避孤立用户,请使用本文下一节中的脚本代替DTS方法。返回页首

在Master数据库中创建和运行存储过程请查看本文末尾的备注,以了解有关下列步骤的重要信息。
1.在源SQLServer上运行以下脚本。此脚本可在master数据库中创建名称分别为sp_hexadecimal和sp_help_revlogin的两个存储过程。请在创建完过程之后继续执行第2步。

注意:下面的过程取决于SQLServer系统表。这些表的结构在SQLServer的不同版本之间可能会有变化,请不要直接从系统表中选择。

-----BeginScript,Createsp_help_revloginprocedure-----USEmasterGOIFOBJECT_ID('sp_hexadecimal')ISNOTNULLDROPPROCEDUREsp_hexadecimalGOCREATEPROCEDUREsp_hexadecimal@binvaluevarbinary(256),@hexvaluevarchar(256)OUTPUTASDECLARE@charvaluevarchar(256)DECLARE@iintDECLARE@lengthintDECLARE@hexstringchar(16)SELECT@charvalue='0x'SELECT@i=1SELECT@length=DATALENGTH(@binvalue)SELECT@hexstring='0123456789ABCDEF'WHILE(@i<=@length)BEGINDECLARE@tempintintDECLARE@firstintintDECLARE@secondintintSELECT@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=@charvalueGOIFOBJECT_ID('sp_help_revlogin')ISNOTNULLDROPPROCEDUREsp_help_revloginGOCREATEPROCEDUREsp_help_revlogin@login_namesysname=NULLASDECLARE@namesysnameDECLARE@xstatusintDECLARE@binpwdvarbinary(256)DECLARE@txtpwdsysnameDECLARE@tmpstrvarchar(256)DECLARE@SID_varbinaryvarbinary(85)DECLARE@SID_stringvarchar(256)IF(@login_nameISNULL)DECLARElogin_cursCURSORFORSELECTsid,name,xstatus,passwordFROMmaster..sysxloginsWHEREsrvidISNULLANDname<>'sa'ELSEDECLARElogin_cursCURSORFORSELECTsid,name,xstatus,passwordFROMmaster..sysxloginsWHEREsrvidISNULLANDname=@login_nameOPENlogin_cursFETCHNEXTFROMlogin_cursINTO@SID_varbinary,@name,@xstatus,@binpwdIF(@@fetch_status=-1)BEGINPRINT'Nologin(s)found.'CLOSElogin_cursDEALLOCATElogin_cursRETURN-1ENDSET@tmpstr='/*sp_help_revloginscript'PRINT@tmpstrSET@tmpstr='**Generated'+CONVERT(varchar,GETDATE())+'on'+@@SERVERNAME+'*/'PRINT@tmpstrPRINT''PRINT'DECLARE@pwdsysname'WHILE(@@fetch_status<>-1)BEGINIF(@@fetch_status<>-2)BEGINPRINT''SET@tmpstr='--Login:'+@namePRINT@tmpstrIF(@xstatus&4)=4BEGIN--NTauthenticatedaccount/groupIF(@xstatus&1)=1BEGIN--NTloginisdeniedaccessSET@tmpstr='EXECmaster..sp_denylogin'''+@name+''''PRINT@tmpstrENDELSEBEGIN--NTloginhasaccessSET@tmpstr='EXECmaster..sp_grantlogin'''+@name+''''PRINT@tmpstrENDENDELSEBEGIN--SQLServerauthenticationIF(@binpwdISNOTNULL)BEGIN--Non-nullpasswordEXECsp_hexadecimal@binpwd,@txtpwdOUTIF(@xstatus&2048)=2048SET@tmpstr='SET@pwd=CONVERT(varchar(256),'+@txtpwd+')'ELSESET@tmpstr='SET@pwd=CONVERT(varbinary(256),'+@txtpwd+')'PRINT@tmpstrEXECsp_hexadecimal@SID_varbinary,@SID_stringOUTSET@tmpstr='EXECmaster..sp_addlogin'''+@name+''',@pwd,@sid='+@SID_string+',@encryptopt='ENDELSEBEGIN--NullpasswordEXECsp_hexadecimal@SID_varbinary,@SID_stringOUTSET@tmpstr='EXECmaster..sp_addlogin'''+@name+''',NULL,@sid='+@SID_string+',@encryptopt='ENDIF(@xstatus&2048)=2048--loginupgradedfrom6.5SET@tmpstr=@tmpstr+'''skip_encryption_old'''ELSESET@tmpstr=@tmpstr+'''skip_encryption'''PRINT@tmpstrENDENDFETCHNEXTFROMlogin_cursINTO@SID_varbinary,@name,@xstatus,@binpwdENDCLOSElogin_cursDEALLOCATElogin_cursRETURN0GO-----EndScript-----1<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>