国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

如何在正運行 SQL Server 7.0 的服務器之間傳輸登錄和密碼

2024-08-31 00:48:00
字體:
來源:轉載
供稿:網友
sql server 7.0 數據轉換服務 (dts) 對象傳輸功能可在兩臺服務器之間傳輸登錄和用戶,但它不傳輸 sql server 驗證登錄的密碼。要從一臺運行 sql server 7.0 的服務器向另一臺運行 sql server 7.0 的服務器傳輸登錄和密碼,請按照本文“在 master 數據庫中創建和運行存儲過程”一節中的說明操作。您將在源服務器上創建 sp_help_revlogin 存儲過程。此過程將生成一個腳本,您可以在目標服務器上運行該腳本,以重新創建帶有原始安全標識號 (sid) 的登錄,并保留當前的密碼。

返回頁首

如何從 sql server 7.0 向 sql server 2000 或者在正運行 sql server 2000 的服務器之間傳輸登錄和密碼要從 sql server 7.0 服務器向 sql server 2000 的一個實例或者在 sql server 2000 的兩個實例之間傳輸登錄和密碼,可以使用 sql server 2000 中新的 dts package transfer logins task(dts 包傳輸登錄任務)。要使用此任務,請執行以下步驟:

1.連接到 sql server 2000 目標服務器,移動到 sql server 企業管理器中的數據轉換服務,展開此文件夾,右鍵單擊本地程序包,然后單擊新增程序包。2.在 dts 程序包設計器打開后,單擊任務菜單上的傳輸登錄任務。根據需要完成有關源、目標和登錄選項卡的信息。

重要說明:sql server 2000 目標服務器不能運行 64 位版本的 sql server 2000。64 位版本 sql server 2000 的 dts 組件不可用。如果要從其他計算機上的 sql server 實例中導入登錄,您的 sql server 實例必須在域帳戶下運行才能完成此任務。

注意:您可以使用 dts 方法或本文“在 master 數據庫中創建和運行存儲過程”一節中的腳本,從 sql server 7.0 向 sql server 2000 或者在 sql server 2000 的實例之間傳輸登錄。dts 方法將傳輸密碼,但不傳輸原始 sid。如果登錄不是使用原始 sid 創建的,而且用戶數據庫也被傳輸到一臺新服務器,則該數據庫用戶將被從該登錄中孤立出去。要傳輸原始 sid 并回避孤立用戶,請使用本文下一節中的腳本代替 dts 方法。返回頁首

在 master 數據庫中創建和運行存儲過程請查看本文末尾的備注,以了解有關下列步驟的重要信息。
1.在源 sql server 上運行以下腳本。此腳本可在 master 數據庫中創建名稱分別為 sp_hexadecimal 和 sp_help_revlogin 的兩個存儲過程。請在創建完過程之后繼續執行第 2 步。

注意:下面的過程取決于 sql server 系統表。這些表的結構在 sql server 的不同版本之間可能會有變化,請不要直接從系統表中選擇。

----- begin script, create sp_help_revlogin procedure -----use mastergoif object_id ('sp_hexadecimal') is not null drop procedure sp_hexadecimalgocreate procedure sp_hexadecimal @binvalue varbinary(256), @hexvalue varchar(256) outputasdeclare @charvalue varchar(256)declare @i intdeclare @length intdeclare @hexstring char(16)select @charvalue = '0x'select @i = 1select @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 + 1endselect @hexvalue = @charvaluegoif object_id ('sp_help_revlogin') is not null drop procedure sp_help_revlogingocreate procedure sp_help_revlogin @login_name sysname = null asdeclare @name sysnamedeclare @xstatus intdeclare @binpwd varbinary (256)declare @txtpwd sysnamedeclare @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_nameopen login_cursfetch next from login_curs into @sid_varbinary, @name, @xstatus, @binpwdif (@@fetch_status = -1)begin print 'no login(s) found.' close login_curs deallocate login_curs return -1endset @tmpstr = '/* sp_help_revlogin script 'print @tmpstrset @tmpstr = '** generated ' + convert (varchar, getdate()) + ' on ' + @@servername + ' */'print @tmpstrprint ''print 'declare @pwd sysname'while (@@fetch_status <> -1)begin if (@@fetch_status <> -2) begin print '' set @tmpstr = '-- login: ' + @name print @tmpstr if (@xstatus & 4) = 4 begin -- nt authenticated account/group if (@xstatus & 1) = 1 begin -- nt login is denied access set @tmpstr = 'exec master..sp_denylogin ''' + @name + '''' print @tmpstr end else begin -- nt login has access set @tmpstr = 'exec master..sp_grantlogin ''' + @name + '''' print @tmpstr end end else begin -- sql server authentication if (@binpwd is not null) begin -- non-null password exec sp_hexadecimal @binpwd, @txtpwd out if (@xstatus & 2048) = 2048 set @tmpstr = 'set @pwd = convert (varchar(256), ' + @txtpwd + ')' else set @tmpstr = 'set @pwd = convert (varbinary(256), ' + @txtpwd + ')' print @tmpstrexec sp_hexadecimal @sid_varbinary,@sid_string out set @tmpstr = 'exec master..sp_addlogin ''' + @name + ''', @pwd, @sid = ' + @sid_string + ', @encryptopt = ' end else begin -- null passwordexec sp_hexadecimal @sid_varbinary,@sid_string out set @tmpstr = 'exec master..sp_addlogin ''' + @name + ''', null, @sid = ' + @sid_string + ', @encryptopt = ' end if (@xstatus & 2048) = 2048 -- login upgraded from 6.5 set @tmpstr = @tmpstr + '''skip_encryption_old''' else set @tmpstr = @tmpstr + '''skip_encryption''' print @tmpstr end end fetch next from login_curs into @sid_varbinary, @name, @xstatus, @binpwd endclose login_cursdeallocate login_cursreturn 0go ----- end script -----
2.在創建 sp_help_revlogin 存儲過程之后,請從源服務器上的查詢分析器中運行 sp_help_revlogin 過程。sp_help_revlogin 存儲過程可同時用于 sql server 7.0 和 sql server 2000。sp_help_revlogin 存儲過程的輸出是登錄腳本,該腳本可創建帶有原始 sid 和密碼的登錄。保存輸出,然后將其粘貼到目標 sql server 上的查詢分析器中,并運行它。例如:
exec master..sp_help_revlogin
返回頁首

備注•在目標 sql server 上運行輸出腳本之前,請認真查看此腳本。如果必須將登錄傳輸到與 sql server 源實例不在同一個域中的 sql server 實例,請編輯由 sp_help_revlogin 過程生成的腳本,并在 sp_grantlogin 語句中將域名替換為新的域名。由于在新域中被授予訪問權的集成登錄與原域中的登錄具有不同的 sid,因此數據庫用戶將被從這些登錄中孤立出去。要解決這些孤立用戶,請參見以下項目符號項中引用的文章。如果在同一個域中的 sql server 實例之間傳輸集成登錄,則會使用相同的 sid,而且用戶不太可能被孤立。•在移動登錄之后,用戶將不再具有訪問已被同時移動的數據庫的權限。此問題稱為“孤立用戶”。如果嘗試將訪問此數據庫的權限授予該登錄,則可能會失敗,這表明該用戶已存在:
microsoft sql-dmo (odbc sqlstate:42000) error 15023:user or role '%s' already exists in the current database.有關如何將登錄映射到數據庫用戶以解決孤立的 sql server 登錄和集成登錄的說明,請參見以下 microsoft 知識庫文章: 240872 how to:在 sql 服務器之間移動數據庫時如何解決權限問題
有關使用 sp_change_users_login 存儲過程逐個解決孤立用戶(僅能解決從標準 sql 登錄中孤立出去的用戶)的說明,請參見以下 microsoft 知識庫文章: 274188 prb: "troubleshooting orphaned users" topic in books online is incomplete •如果傳輸登錄和密碼是向運行 sql server 的新服務器移動數據庫的一部分,請參見以下 microsoft 知識庫文章,以了解對所涉及的工作流程和步驟的說明: 314546 how to: move databases between computers that are running sql server •能夠這樣做的原因在于:sp_addlogin 系統存儲過程中的 @encryptopt 參數允許通過使用加密密碼來創建登錄。有關此過程的更多信息,請參見 sql server 聯機圖書中的“sp_addlogin (t-sql)”主題。•默認情況下,只有 sysadminfixed 服務器角色的成員可以從 sysxlogins 表中進行選擇。除非 sysadmin 角色的成員授予了必要的權限,否則最終用戶將無法創建或運行這些存儲過程。•此方法不會嘗試傳輸特定登錄的默認數據庫信息,因為默認數據庫并不始終存在于目標服務器中。要為某個登錄定義默認數據庫,您可以使用 sp_defaultdb 系統存儲過程,并將登錄名和默認數據庫作為參數傳遞給該過程。有關使用此過程的更多信息,請參見 sql server 聯機圖書中的“sp_defaultdb”主題。•在 sql server 實例之間傳輸登錄的過程中,如果源服務器的排序順序不區分大小寫,而目標服務器的排序順序區分大小寫,則在將登錄傳輸到目標服務器后,必須在密碼中用大寫形式輸入所有字母字符。如果源服務器的排序順序區分大小寫,而目標服務器的排序順序不區分大小寫,則無法通過使用本文概述的過程傳輸的登錄進行登錄,除非原始密碼不包含字母字符,或者原始密碼中的所有字母字符都是大寫字符。如果兩個服務器都區分大小寫或者都不區分大小寫,則不會出現此問題。這是 sql server 處理密碼的方式所帶來的副作用。有關更多信息,請參見 sql server 7.0 聯機圖書中的“effect on passwords of changing sort orders”(更改排序順序對密碼的影響)主題。•當在服務器上運行 sp_help_revlogin 腳本的輸出時,如果該服務器已經定義了一個登錄,且該登錄名與腳本輸出中的某個登錄的名稱相同,則在執行 sp_help_revlogin 腳本的輸出時,可能會看到下面的錯誤信息:


server:msg 15025, level 16, state 1, procedure sp_addlogin, line 56
the login 'test1' already exists.

同樣,如果此服務器上存在其他登錄,且其 sid 值與您要嘗試添加的登錄相同,則會收到以下錯誤信息:


server:msg 15433, level 16, state 1, procedure sp_addlogin, line 93
supplied parameter @sid is in use.

因此,您必須仔細查看這些命令的輸出,檢查 sysxlogins 表的內容,并相應地解決這些錯誤。•特定登錄的 sid 值被用作在 sql server 中實現數據庫級別訪問的基礎。因此,如果同一登錄在該數據庫級別(在該服務器上的兩個不同數據庫中)有兩個不同的 sid 值,則此登錄將僅能訪問其 sid 與該登錄的 syslogins 中的值相匹配的數據庫。如果所討論的兩個數據庫已從兩個不同的服務器合并在一起,則可能出現這種情形。要解決此問題,需要使用 sp_dropuser 存儲過程從具有不匹配 sid 的數據庫中手動刪除所討論的登錄,然后再使用 sp_adduser 存儲過程添加它。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜昌市| 堆龙德庆县| 双峰县| 东阿县| 德江县| 临邑县| 上高县| 交口县| 六盘水市| 青阳县| 榆中县| 北安市| 新邵县| 周宁县| 方城县| 固始县| 望江县| 石泉县| 桃江县| 军事| 太和县| 新津县| 临清市| 陵水| 宾川县| 临沂市| 四会市| 太仆寺旗| 崇信县| 鄂尔多斯市| 长宁区| 洛南县| 宜兴市| 灵山县| 文成县| 新沂市| 民和| 灵台县| 鄂尔多斯市| 清水县| 灌云县|