仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 817|回复: 9
打印 上一主题 下一主题

[学习教程] MSSQL教程之HOW TO:在 SQL Server 实例之间传输登...

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-16 22:38:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。server提要在将数据库挪动到新服务器后,用户大概没法登录到新服务器。相反,他们会收到上面的毛病信息:
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=0xSELECT@i=1SELECT@length=DATALENGTH(@binvalue)SELECT@hexstring=0123456789ABCDEFWHILE(@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..sysxloginsWHEREsrvidISNULLANDnamesaELSEDECLARElogin_cursCURSORFORSELECTsid,name,xstatus,passwordFROMmaster..sysxloginsWHEREsrvidISNULLANDname=@login_nameOPENlogin_cursFETCHNEXTFROMlogin_cursINTO@SID_varbinary,@name,@xstatus,@binpwdIF(@@fetch_status=-1)BEGINPRINTNologin(s)found.CLOSElogin_cursDEALLOCATElogin_cursRETURN-1ENDSET@tmpstr=/*sp_help_revloginscriptPRINT@tmpstrSET@tmpstr=**Generated+CONVERT(varchar,GETDATE())+on+@@SERVERNAME+*/PRINT@tmpstrPRINTPRINTDECLARE@pwdsysnameWHILE(@@fetch_status-1)BEGINIF(@@fetch_status-2)BEGINPRINTSET@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_oldELSESET@tmpstr=@tmpstr+skip_encryptionPRINT@tmpstrENDENDFETCHNEXTFROMlogin_cursINTO@SID_varbinary,@name,@xstatus,@binpwdENDCLOSElogin_cursDEALLOCATElogin_cursRETURN0GO-----EndScript-----
2.在创立sp_help_revlogin存储历程以后,请从源服务器上的查询剖析器中运转sp_help_revlogin历程。sp_help_revlogin存储历程可同时用于SQLServer7.0和SQLServer2000。sp_help_revlogin存储历程的输入是登录剧本,该剧本可创立带有原始SID和暗码的登录。保留输入,然后将其粘贴到方针SQLServer上的查询剖析器中,并运转它。比方:
EXECmaster..sp_help_revlogin
前往页首

备注•在方针SQLServer上运转输入剧本之前,请仔细检察此剧本。假如必需将登录传输到与SQLServer源实例不在统一个域中的SQLServer实例,请编纂由sp_help_revlogin历程天生的剧本,并在sp_grantlogin语句中将域名交换为新的域名。因为在新域中被授与会见权的集成登录与原域中的登录具有分歧的SID,因而数据库用户将被从这些登录中伶仃进来。要办理这些伶仃用户,请拜见以下项目标记项中援用的文章。假如在统一个域中的SQLServer实例之间传输集成登录,则会利用不异的SID,并且用户不太大概被伶仃。•在挪动登录以后,用户将不再具有会见已被同时挪动的数据库的权限。此成绩称为“伶仃用户”。假如实验将会见此数据库的权限授与该登录,则大概会失利,这标明该用户已存在:
MicrosoftSQL-DMO(ODBCSQLState:42000)Error15023:Userorrole%salreadyexistsinthecurrentdatabase.有关怎样将登录映照到数据库用户以办理伶仃的SQLServer登录和集成登录的申明,请拜见以下Microsoft常识库文章:240872HOWTO:在SQL服务器之间挪动数据库时怎样办理权限成绩
有关利用sp_change_users_login存储历程逐一办理伶仃用户(仅能办理从尺度SQL登录中伶仃进来的用户)的申明,请拜见以下Microsoft常识库文章:274188PRB:"TroubleshootingOrphanedUsers"TopicinBooksOnlineisIncomplete•假如传输登录和暗码是向运转SQLServer的新服务器挪动数据库的一部分,请拜见以下Microsoft常识库文章,以懂得对所触及的事情流程和步骤的申明:314546HOWTO:MoveDatabasesBetweenComputersThatAreRunningSQLServer•可以如许做的缘故原由在于:sp_addlogin体系存储过程当中的@encryptopt参数同意经由过程利用加密暗码来创立登录。有关此历程的更多信息,请拜见SQLServer联机图书中的“sp_addlogin(T-SQL)”主题。•默许情形下,只要sysadminfixed服务器脚色的成员能够从sysxlogins表中举行选择。除非sysadmin脚色的成员授与了需要的权限,不然终极用户将没法创立或运转这些存储历程。•此办法不会实验传输特定登录的默许数据库信息,由于默许数据库其实不一直存在于方针服务器中。要为某个登录界说默许数据库,您可使用sp_defaultdb体系存储历程,并将登录名和默许数据库作为参数传送给该历程。有关利用此历程的更多信息,请拜见SQLServer联机图书中的“sp_defaultdb”主题。•在SQLServer实例之间传输登录的过程当中,假如源服务器的排序按次不辨别巨细写,而方针服务器的排序按次辨别巨细写,则在将登录传输到方针服务器后,必需在暗码顶用年夜写情势输出一切字母字符。假如源服务器的排序按次辨别巨细写,而方针服务器的排序按次不辨别巨细写,则没法经由过程利用本文概述的历程传输的登录举行登录,除非原始暗码不包括字母字符,大概原始暗码中的一切字母字符都是年夜写字符。假如两个服务器都辨别巨细写大概都不辨别巨细写,则不会呈现此成绩。这是SQLServer处置暗码的体例所带来的反作用。有关更多信息,请拜见SQLServer7.0联机图书中的“EffectonPasswordsofChangingSortOrders”(变动排序按次对暗码的影响)主题。•当在服务器上运转sp_help_revlogin剧本的输入时,假如该服务器已界说了一个登录,且该登录名与剧本输入中的某个登录的称号不异,则在实行sp_help_revlogin剧本的输入时,大概会看到上面的毛病信息:


Server:Msg15025,Level16,State1,Proceduresp_addlogin,Line56
Thelogintest1alreadyexists.

一样,假如此服务器上存在其他登录,且其SID值与您要实验增加的登录像同,则会收到以下毛病信息:


Server:Msg15433,Level16,State1,Proceduresp_addlogin,Line93
Suppliedparameter@sidisinuse.

因而,您必需细心检察这些命令的输入,反省sysxlogins表的内容,并响应地办理这些毛病。•特定登录的SID值被用作在SQLServer中完成数据库级别会见的基本。因而,假如统一登录在该数据库级别(在该服务器上的两个分歧数据库中)有两个分歧的SID值,则此登录将仅能会见其SID与该登录的syslogins中的值相婚配的数据库。假如所会商的两个数据库已从两个分歧的服务器兼并在一同,则大概呈现这类情况。要办理此成绩,必要利用sp_dropuser存储历程从具有不婚配SID的数据库中手动删除所会商的登录,然后再利用sp_adduser存储历程增加它。既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
第二个灵魂 该用户已被删除
沙发
发表于 2015-1-19 20:08:53 | 只看该作者
备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
乐观 该用户已被删除
板凳
发表于 2015-1-25 19:46:07 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
再现理想 该用户已被删除
地板
发表于 2015-2-3 19:25:22 | 只看该作者
大家注意一点。如下面的例子:
飘飘悠悠 该用户已被删除
5#
发表于 2015-2-9 04:28:33 | 只看该作者
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
不帅 该用户已被删除
6#
发表于 2015-2-26 22:13:41 | 只看该作者
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
山那边是海 该用户已被删除
7#
发表于 2015-3-8 18:17:03 | 只看该作者
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
精灵巫婆 该用户已被删除
8#
发表于 2015-3-16 10:13:51 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
飘灵儿 该用户已被删除
9#
发表于 2015-3-22 22:10:46 | 只看该作者
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
因胸联盟 该用户已被删除
10#
发表于 2015-3-22 22:10:46 | 只看该作者
是要和操作系统进行Socket通讯的场景。否则建议慎重!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-9 06:58

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表