灵魂腐蚀 发表于 2015-1-16 22:16:11

MYSQL网页设计MSSQL数据库迁徙之用户名成绩

人力成本上的节省,MySQL的用户Spacemonkey实验室的首席执行官MitchPirtle如此表示:“维护MySQL使得你不需要一个年薪15万美元的DBA。可是,此时用户A存在于数据库A中,而新的MSSQL中固然能创立用户A,但没法把权限赋于用户A。新创立一个用户B吧,用户A创立的表和别的信息就又没法会见。在这里找到懂得决办法:
在源SQLServer上运转以下剧本。此剧本可在master数据库中创立名为sp_hexadecimal和sp_help_revlogin的两个存储历程。请在完成历程的创立以后持续实行第2步。
注重:上面的历程取决于SQLServer体系表。这些表的布局在SQLServer的分歧版本之间大概会有变更,请不要间接从体系表当选择。
-----BeginScript,Createsp_help_revloginprocedure-----
复制代码代码以下:
USEmaster
GO
IFOBJECT_ID(sp_hexadecimal)ISNOTNULL
DROPPROCEDUREsp_hexadecimal
GO
CREATEPROCEDUREsp_hexadecimal
@binvaluevarbinary(256),
@hexvaluevarchar(256)OUTPUT
AS
DECLARE@charvaluevarchar(256)
DECLARE@iint
DECLARE@lengthint
DECLARE@hexstringchar(16)
SELECT@charvalue=0x
SELECT@i=1
SELECT@length=DATALENGTH(@binvalue)
SELECT@hexstring=0123456789ABCDEF
WHILE(@i<=@length)
BEGIN
DECLARE@tempintint
DECLARE@firstintint
DECLARE@secondintint
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
IFOBJECT_ID(sp_help_revlogin)ISNOTNULL
DROPPROCEDUREsp_help_revlogin
GO
CREATEPROCEDUREsp_help_revlogin@login_namesysname=NULLAS
DECLARE@namesysname
DECLARE@xstatusint
DECLARE@binpwdvarbinary(256)
DECLARE@txtpwdsysname
DECLARE@tmpstrvarchar(256)
DECLARE@SID_varbinaryvarbinary(85)
DECLARE@SID_stringvarchar(256)
IF(@login_nameISNULL)
DECLARElogin_cursCURSORFOR
SELECTsid,name,xstatus,passwordFROMmaster..sysxlogins
WHEREsrvidISNULLANDnamesa
ELSE
DECLARElogin_cursCURSORFOR
SELECTsid,name,xstatus,passwordFROMmaster..sysxlogins
WHEREsrvidISNULLANDname=@login_name
OPENlogin_curs
FETCHNEXTFROMlogin_cursINTO@SID_varbinary,@name,@xstatus,@binpwd
IF(@@fetch_status=-1)
BEGIN
PRINTNologin(s)found.
CLOSElogin_curs
DEALLOCATElogin_curs
RETURN-1
END
SET@tmpstr=/*sp_help_revloginscript
PRINT@tmpstr
SET@tmpstr=**Generated
+CONVERT(varchar,GETDATE())+on+@@SERVERNAME+*/
PRINT@tmpstr
PRINT
PRINTDECLARE@pwdsysname
WHILE(@@fetch_status-1)
BEGIN
IF(@@fetch_status-2)
BEGIN
PRINT
SET@tmpstr=--Login:+@name
PRINT@tmpstr
IF(@xstatus&4)=4
BEGIN--NTauthenticatedaccount/group
IF(@xstatus&1)=1
BEGIN--NTloginisdeniedaccess
SET@tmpstr=EXECmaster..sp_denylogin+@name+
PRINT@tmpstr
END
ELSEBEGIN--NTloginhasaccess
SET@tmpstr=EXECmaster..sp_grantlogin+@name+
PRINT@tmpstr
END
END
ELSEBEGIN--SQLServerauthentication
IF(@binpwdISNOTNULL)
BEGIN--Non-nullpassword
EXECsp_hexadecimal@binpwd,@txtpwdOUT
IF(@xstatus&2048)=2048
SET@tmpstr=SET@pwd=CONVERT(varchar(256),+@txtpwd+)
ELSE
SET@tmpstr=SET@pwd=CONVERT(varbinary(256),+@txtpwd+)
PRINT@tmpstr
EXECsp_hexadecimal@SID_varbinary,@SID_stringOUT
SET@tmpstr=EXECmaster..sp_addlogin+@name
+,@pwd,@sid=+@SID_string+,@encryptopt=
END
ELSEBEGIN
--Nullpassword
EXECsp_hexadecimal@SID_varbinary,@SID_stringOUT
SET@tmpstr=EXECmaster..sp_addlogin+@name
+,NULL,@sid=+@SID_string+,@encryptopt=
END
IF(@xstatus&2048)=2048
--loginupgradedfrom6.5
SET@tmpstr=@tmpstr+skip_encryption_old
ELSE
SET@tmpstr=@tmpstr+skip_encryption
PRINT@tmpstr
END
END
FETCHNEXTFROMlogin_cursINTO@SID_varbinary,@name,@xstatus,@binpwd
END
CLOSElogin_curs
DEALLOCATElogin_curs
RETURN0
GO

-----EndScript-----
2.在创立sp_help_revlogin存储历程后,请从源服务器上的查询剖析器中运转sp_help_revlogin历程。sp_help_revlogin存储历程可同时用于SQLServer7.0和SQLServer2000。sp_help_revlogin存储历程的输入是登录剧本,该剧本可创立带有原始SID和暗码的登录。保留输入,然后将其粘贴到方针SQLServer上的查询剖析器中,并运转它。比方:EXECmaster..sp_help_revlogin
复制代码代码以下:SP_DEFAULTDBcyiyun,DB_WAYUP
第1步后,在源服务器上运转sp_help_revlogin后,会发生创立用户数据的SQL,比方:
复制代码代码以下:
/*sp_help_revloginscript
**Generated062420091:40PMonWORKGROU-B1XTVC*/
DECLARE@pwdsysname
--Login:hxtest
SET@pwd=CONVERT(varbinary(256),0x0100CF4E7D342B359438E4BCCA72E6C83F44FCCF30C8016286DE2B359438E4BCCA72E6C83F44FCCF30C8016286DE)
EXECmaster..sp_addlogin520web,@pwd,@sid=0x1738BB6AD0CD24498F67FB5589E8EDCB,@encryptopt=skip_encryption
......

把这段间接在新服务器上运转,大概找到响应的用户名创立,就能够办理这个成绩了!关于这个理由我把它放在最后一位。在很多业界专家中有一个相当一致的观点:MySQL不能很好的扩展。关于这点可能有很大的分歧,争论的焦点主要集中于水平可扩展性和垂直可扩展性上。MySQL则更倾向于垂直可扩展性。

飘飘悠悠 发表于 2015-1-19 06:27:59

个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。

小魔女 发表于 2015-1-27 22:56:41

这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。

再见西城 发表于 2015-2-5 15:45:54

groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。

兰色精灵 发表于 2015-2-12 20:17:56

也可谈一下你是怎么优化存储过程的?

admin 发表于 2015-3-3 08:53:55

我们学到了什么?思考问题的时候从表的角度来思考问

山那边是海 发表于 2015-3-11 10:22:57

原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!

若天明 发表于 2015-3-18 06:28:17

再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。

简单生活 发表于 2015-3-25 14:05:02

以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
页: [1]
查看完整版本: MYSQL网页设计MSSQL数据库迁徙之用户名成绩