新聞中心
如果你在SQL Server實(shí)例之間傳輸?shù)卿浐兔艽a的實(shí)際操作中,你對(duì)SQL Server實(shí)例之間傳輸?shù)卿浐兔艽a有不解之處時(shí),你可以通過(guò)以下的文章對(duì)其的實(shí)際應(yīng)用與功能有所了解,以下是文章的具體介紹,望你瀏覽完以下的內(nèi)容會(huì)有所收獲。

概要
在將數(shù)據(jù)庫(kù)移動(dòng)到新服務(wù)器后,用戶可能無(wú)法登錄到新服務(wù)器。相反,他們會(huì)收到下面的錯(cuò)誤消息:
Msg 18456, Level 16, State 1 Login failed for user '%ls'.
您必須將登錄和密碼傳輸?shù)叫路?wù)器。本文介紹如何將登錄和密碼傳輸?shù)叫路?wù)器。
如何在運(yùn)行 SQL Server 7.0 的服務(wù)器之間傳輸?shù)卿浐兔艽a
SQL Server 7.0 數(shù)據(jù)轉(zhuǎn)換服務(wù) (DTS) 對(duì)象傳輸功能可在兩臺(tái)服務(wù)器之間傳輸?shù)卿浐陀脩?,但它不傳?SQL Server 驗(yàn)證登錄的密碼。要將登錄和密碼從一臺(tái)運(yùn)行 SQL Server 7.0 的服務(wù)器傳輸?shù)搅硪慌_(tái)運(yùn)行 SQL Server 7.0 的服務(wù)器,請(qǐng)執(zhí)行“在不同版本的 SQL Server 之間傳輸?shù)卿浐兔艽a的完整解決方案”一節(jié)中的步驟。
如何從 SQL Server 7.0 向 SQL Server 2000 或者在運(yùn)行 SQL Server 2000 的服務(wù)器之間傳輸?shù)卿浐兔艽a
要從 SQL Server 7.0 服務(wù)器向 SQL Server 2000 的一個(gè)實(shí)例或者在 SQL Server 2000 的兩個(gè)SQL Server實(shí)例之間傳輸?shù)卿浐兔艽a,可以使用 SQL Server 2000 中新的 DTS 包傳輸?shù)卿浫蝿?wù)。為此,請(qǐng)按照下列步驟操作:1. 連接到 SQL Server 2000 目標(biāo)服務(wù)器,移動(dòng)到 SQL Server 企業(yè)管理器中的數(shù)據(jù)轉(zhuǎn)換服務(wù),展開(kāi)此文件夾,右鍵單擊“本地包”,然后單擊“新增包”。
2. 在 DTS 程序包設(shè)計(jì)器打開(kāi)后,單擊“任務(wù)”菜單上的“傳輸?shù)卿浫蝿?wù)”。根據(jù)需要完成有關(guān)“源”、“目標(biāo)”和“登錄”選項(xiàng)卡的信息。
重要說(shuō)明:SQL Server 2000 目標(biāo)服務(wù)器不能運(yùn)行 64 位版本的 SQL Server 2000。64 位版本 SQL Server 2000 的 DTS 組件不可用。如果要從其他計(jì)算機(jī)上的 SQL Server 實(shí)例中導(dǎo)入登錄,您的 SQL Server 實(shí)例必須在域帳戶下運(yùn)行才能完成此任務(wù)。
注意:DTS 方法將傳輸密碼,但不會(huì)傳輸原始 SID。如果登錄不是使用原始 SID 創(chuàng)建的,而且用戶數(shù)據(jù)庫(kù)也被傳輸?shù)揭慌_(tái)新服務(wù)器,則該數(shù)據(jù)庫(kù)用戶將從該登錄中孤立出去。要傳輸原始 SID 并繞過(guò)被孤立的用戶,請(qǐng)執(zhí)行“在不同版本的 SQL Server 之間傳輸?shù)卿浐兔艽a的完整解決方案”一節(jié)中的步驟。
在不同版本的 SQL Server 之間傳輸?shù)卿浐兔艽a的完整解決方案
此方法適用于以下情況:
從 SQL Server 7.0 向 SQL Server 7.0 傳輸?shù)卿浐兔艽a。
從 SQL Server 7.0 向 SQL Server 2000 傳輸?shù)卿浐兔艽a。
從 SQL Server 7.0 向 SQL Server 2005 傳輸?shù)卿浐兔艽a。
在運(yùn)行 SQL Server 2000 的服務(wù)器之間傳輸?shù)卿浐兔艽a。
從 SQL Server 2000 向 SQL Server 2005 傳輸?shù)卿浐兔艽a。
注意:請(qǐng)查看本文末尾的備注,以了解有關(guān)下列步驟的重要信息。
要在不同版本的 SQL Server 之間傳輸?shù)卿浐兔艽a,請(qǐng)按下列步驟操作:1. 在源 SQL Server 上運(yùn)行以下腳本。此腳本可在 master 數(shù)據(jù)庫(kù)中創(chuàng)建名為 sp_hexadecimal 和 sp_help_revlogin 的兩個(gè)存儲(chǔ)過(guò)程。請(qǐng)?jiān)谕瓿蛇^(guò)程的創(chuàng)建之后繼續(xù)執(zhí)行第 2 步。
注意:下面的過(guò)程取決于 SQL Server 系統(tǒng)表。這些表的結(jié)構(gòu)在 SQL Server 的不同版本之間可能會(huì)有變化,請(qǐng)不要直接從系統(tǒng)表中選擇。
- ----- 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()) + '>2.
在創(chuàng)建 sp_help_revlogin 存儲(chǔ)過(guò)程后,請(qǐng)從源服務(wù)器上的查詢分析器中運(yùn)行 sp_help_revlogin 過(guò)程。sp_help_revlogin 存儲(chǔ)過(guò)程可同時(shí)用于 SQL Server 7.0 和 SQL Server 2000。sp_help_revlogin 存儲(chǔ)過(guò)程的輸出是登錄腳本,該腳本可創(chuàng)建帶有原始 SID 和密碼的登錄。
保存輸出,然后將其粘貼到目標(biāo) SQL Server 上的查詢分析器中,并運(yùn)行它。例如:EXEC master..sp_help_revlogin
備注
在目標(biāo) SQL Server 上運(yùn)行輸出腳本之前,請(qǐng)認(rèn)真查看此腳本。如果必須將登錄傳輸?shù)脚c SQL Server 源實(shí)例不在同一個(gè)域中的 SQL Server 實(shí)例,請(qǐng)編輯由 sp_help_revlogin 過(guò)程生成的腳本,并在 sp_grantlogin 語(yǔ)句中將域名替換為新的域名。
由于在新域中被授予訪問(wèn)權(quán)的集成登錄與原始域中的登錄具有不同的 SID,因此數(shù)據(jù)庫(kù)用戶將從這些登錄中孤立出去。要解決這些孤立用戶,請(qǐng)查看以下項(xiàng)目符號(hào)項(xiàng)中引用的文章。如果在同一個(gè)域中的 SQL Server 實(shí)例之間傳輸集成登錄,則會(huì)使用相同的 SID,而且用戶不太可能被孤立。
在移動(dòng)登錄之后,用戶將不再具有訪問(wèn)已被同時(shí)移動(dòng)的數(shù)據(jù)庫(kù)的權(quán)限。此問(wèn)題稱(chēng)為“孤立用戶”。如果嘗試將訪問(wèn)此數(shù)據(jù)庫(kù)的權(quán)限授予該登錄,則可能會(huì)失敗,這表明該用戶已存在:
- Microsoft SQL-DMO (ODBC SQLState:42000) Error 15023:User or role '%s' already exists in the current database.
有關(guān)如何將登錄映射到數(shù)據(jù)庫(kù)用戶以解決孤立的 SQL Server 登錄和集成登錄的說(shuō)明,請(qǐng)查看相關(guān)文章: (http://support.microsoft.com/kb/240872/) 如何解決在運(yùn)行 SQL Server 的服務(wù)器之間移動(dòng)數(shù)據(jù)庫(kù)時(shí)的權(quán)限問(wèn)題。
有關(guān)使用 sp_change_users_login 存儲(chǔ)過(guò)程逐個(gè)解決孤立用戶(僅能解決從標(biāo)準(zhǔn) SQL 登錄中孤立出去的用戶)的說(shuō)明,請(qǐng)查看相關(guān)文章: (http://support.microsoft.com/kb/274188/) PRB:聯(lián)機(jī)叢書(shū)中的“孤立用戶疑難解答”主題不完整。
如果傳輸?shù)卿浐兔艽a是向運(yùn)行 SQL Server 的新服務(wù)器移動(dòng)數(shù)據(jù)庫(kù)的一部分,請(qǐng)查看相關(guān)文章,以了解對(duì)所涉及的工作流程和步驟的說(shuō)明: (http://support.microsoft.com/kb/314546/) 如何在運(yùn)行 SQL Server 的計(jì)算機(jī)之間移動(dòng)數(shù)據(jù)庫(kù)。
能夠這樣做的原因在于:sp_addlogin 系統(tǒng)存儲(chǔ)過(guò)程中的 @encryptopt 參數(shù)允許通過(guò)使用加密密碼來(lái)創(chuàng)建登錄。有關(guān)此過(guò)程的更多信息,請(qǐng)參見(jiàn) SQL Server 聯(lián)機(jī)叢書(shū)中的“sp_addlogin (T-SQL)”主題。
默認(rèn)情況下,只有 sysadminfixed 服務(wù)器角色的成員可以從 sysxlogins 表中進(jìn)行選擇。除非 sysadmin 角色的成員授予了必要的權(quán)限,否則最終用戶將無(wú)法創(chuàng)建或運(yùn)行這些存儲(chǔ)過(guò)程。
此方法不會(huì)嘗試傳輸特定登錄的默認(rèn)數(shù)據(jù)庫(kù)信息,因?yàn)槟J(rèn)數(shù)據(jù)庫(kù)并不始終存在于目標(biāo)服務(wù)器中。要為某個(gè)登錄定義默認(rèn)數(shù)據(jù)庫(kù),您可以使用 sp_defaultdb 系統(tǒng)存儲(chǔ)過(guò)程,方法是將登錄名和默認(rèn)數(shù)據(jù)庫(kù)作為參數(shù)傳遞給該過(guò)程。有關(guān)使用此過(guò)程的更多信息,請(qǐng)參見(jiàn) SQL Server 聯(lián)機(jī)叢書(shū)中的“sp_defaultdb”主題。
在 SQL Server 實(shí)例之間傳輸?shù)卿浀倪^(guò)程中,如果源服務(wù)器的排序順序不區(qū)分大小寫(xiě),而目標(biāo)服務(wù)器的排序順序區(qū)分大小寫(xiě),則在將登錄傳輸?shù)侥繕?biāo)服務(wù)器后,必須以大寫(xiě)形式輸入密碼中的所有字母字符。
如果源服務(wù)器的排序順序區(qū)分大小寫(xiě),而目標(biāo)服務(wù)器的排序順序不區(qū)分大小寫(xiě),則無(wú)法通過(guò)本文所述的步驟使用已傳輸?shù)牡卿涍M(jìn)行登錄,除非原始密碼不包括字母字符或原始密碼中的所有字母字符都是大寫(xiě)字符。
如果兩個(gè)服務(wù)器都區(qū)分大小寫(xiě)或者都不區(qū)分大小寫(xiě),則不會(huì)出現(xiàn)此問(wèn)題。這是 SQL Server 處理密碼的方式所帶來(lái)的副作用。有關(guān)更多信息,請(qǐng)參見(jiàn) SQL Server 7.0 聯(lián)機(jī)叢書(shū)中的“Effect>在目標(biāo)服務(wù)器上運(yùn)行“sp_help_revlogin”腳本的輸出時(shí),如果該目標(biāo)服務(wù)器已經(jīng)定義了一個(gè)登錄,且該登錄名與腳本輸出中的某個(gè)登錄名相同,則在執(zhí)行“sp_help_revlogin”腳本的輸出時(shí),可能會(huì)看到下面的錯(cuò)誤:
- Server:Msg 15025, Level 16, State 1, Procedure sp_addlogin, Line 56 The login 'test1' already exists.
同樣,如果此服務(wù)器上存在其他登錄,且其 SID 值與您要嘗試添加的登錄的 SID 值相同,則會(huì)收到以下錯(cuò)誤消息:
- Server:Msg 15433, Level 16, State 1, Procedure sp_addlogin, Line 93 Supplied parameter @sid is in use.
因此,您必須仔細(xì)復(fù)查這些命令的輸出,檢查 sysxlogins 表的內(nèi)容,并相應(yīng)地解決這些錯(cuò)誤。
特定登錄的 SID 值用作在 SQL Server 中實(shí)現(xiàn)數(shù)據(jù)庫(kù)級(jí)別訪問(wèn)的基礎(chǔ)。因此,如果同一登錄在該數(shù)據(jù)庫(kù)級(jí)別(在該服務(wù)器上的兩個(gè)不同數(shù)據(jù)庫(kù)中)有兩個(gè)不同的 SID 值,則此登錄將僅能訪問(wèn)其 SID 與該登錄的 syslogins 中的值相匹配的數(shù)據(jù)庫(kù)。
如果所討論的兩個(gè)數(shù)據(jù)庫(kù)已從兩個(gè)不同的服務(wù)器合并在一起,則可能出現(xiàn)這種情形。要解決此問(wèn)題,必須使用 sp_dropuser 存儲(chǔ)過(guò)程從具有不匹配 SID 的數(shù)據(jù)庫(kù)中手動(dòng)刪除所討論的登錄,然后再使用 sp_adduser 存儲(chǔ)過(guò)程添加它。
這篇文章中的信息適用于:
Microsoft SQL Server 7.0 標(biāo)準(zhǔn)版
- Microsoft SQL Server 2000 Personal Edition Service Pack 3
Microsoft SQL Server 2000 標(biāo)準(zhǔn)版
- Microsoft SQL Server 2000 Workgroup Edition
- Microsoft SQL Server 2000 Developer Edition
- Microsoft SQL Server 2000 Enterprise Edition
- Microsoft SQL Server 2005 Standard Edition
- Microsoft SQL 2005 Server Workgroup
- Microsoft SQL Server 2005 Developer Edition
- Microsoft SQL 2005 Server Enterprise
上述的相關(guān)內(nèi)容就是對(duì)在SQL Server實(shí)例之間傳輸?shù)卿浐兔艽a的描述,希望會(huì)給你帶來(lái)一些幫助在此方面。
網(wǎng)站題目:SQLServer實(shí)例之間傳輸?shù)卿浥c密碼的描述
鏈接分享:http://www.fisionsoft.com.cn/article/cdocdpi.html


咨詢
建站咨詢
