sqlserver搭建網(wǎng)站遇到問題“對(duì)象名無效”
2023-03-24 17:20:17
10316
在進(jìn)行站點(diǎn)搬遷時(shí),我們通常會(huì)把sql server數(shù)據(jù)庫備份成.bak文件,再到新的sql server環(huán)境下還原。在網(wǎng)站搭建完成后訪問時(shí)可能會(huì)出現(xiàn)“對(duì)象名無效”的錯(cuò)誤,如下圖:
以下是sql server出現(xiàn)報(bào)錯(cuò)的原因以及解決方法:
這其實(shí)是sql server孤立用戶的問題。
如上圖所示,a0805120154為恢復(fù)完的數(shù)據(jù)庫。該數(shù)據(jù)庫的很多表是用戶a0805120154建立的,但是當(dāng)我們恢復(fù)sql server數(shù)據(jù)庫后,a0805120154用戶此時(shí)就成了孤立用戶。沒有與之對(duì)應(yīng)的sql server登錄用戶名,哪怕你建立了一個(gè)a0805120154登錄用戶名,而且是以前的用戶密碼,用該用戶登錄后同樣沒辦法操作以前屬于a0805120154的用戶表。
比如在sql server查詢語句中訪問上圖中的三個(gè)視圖時(shí),就會(huì)提示“對(duì)象名無效”
這個(gè)問題有兩種辦法解決。
先說解決的前提條件。 首先,如上還原sql server數(shù)據(jù)庫a0805120154。
數(shù)據(jù)庫恢復(fù)后,就產(chǎn)生了孤立用戶a0805120154。 然后,用sa用戶或者具有DBA權(quán)限的sql server用戶登錄,創(chuàng)建一個(gè)a0805120154數(shù)據(jù)庫登錄用戶,密碼隨便設(shè)置,也可以和以前的保持一致。

我們用它來對(duì)應(yīng)孤立的a0805120154用戶,使登錄用戶和sql server數(shù)據(jù)庫的孤立用戶對(duì)應(yīng)起來,其實(shí)我們建立了同樣名稱的數(shù)據(jù)庫登錄用戶后,數(shù)據(jù)庫中的表我們照樣不能使用,因?yàn)閟id的不同,就是系統(tǒng)登錄表和數(shù)據(jù)庫用戶表中的用戶名相同, 單是sid字段數(shù)據(jù)庫中的還是以前舊系統(tǒng)的sid值,所以我們就要把它對(duì)應(yīng)成我們新建的。sql server數(shù)據(jù)庫就是靠sid來識(shí)別用戶的。
這里可以使用sql server存儲(chǔ)過程sp_change_users_login。它有三種動(dòng)作,分別是report,update_one和auto_fix。
運(yùn)行sp_change_users_login 'report',系統(tǒng)會(huì)列出當(dāng)前數(shù)據(jù)庫的孤立用戶數(shù)。
我們只需要選擇當(dāng)前數(shù)據(jù)庫為a0805120154,然后運(yùn)行 sp_change_users_login 'update_one','a0805120154','a0805120154' --系統(tǒng)就會(huì)提示修復(fù)了一個(gè)孤立用戶。
重新打開網(wǎng)站,問題就解決了。