首先,我從其他伺服器還原了資料庫,現在所有預存程序都被命名為 [azamsharp].[usp_getlatestposts]。我認為 [azamsharp] 是前綴,因為它是原始伺服器上的使用者。
現在,在我的本機電腦上,它無法運作。我不希望所有預存程序都帶有 [azamsharp] 前綴。
另外,當我右鍵單擊預存程序時,我什至看不到屬性選項。我在 Windows 7 上執行 SQL SERVER 2005。
更新:
奇怪的是,如果我從我的機器存取生產資料庫,我可以看到屬性選項。所以,Windows 7的安全性確實有問題。
更新2:
當我運行孤立用戶預存程序時,它顯示兩個用戶“azamsharp”和“dbo1”。我修復了“azamsharp”用戶,但“dbo1”沒有得到修復。當我運行以下腳本時:
exec sp_change_users_login 'update_one', 'dbo1', 'dbo1' 我收到以下錯誤:
訊息 15291,等級 16,狀態 1,程序 sp_change_users_login,第 131 行 終止此程序。登入名稱“dbo1”不存在或無效。
答案1
您可能有孤立使用者。當您從電腦存取伺服器時,您的網域憑證可能可以作為 DBadmin 存取生產伺服器。運行此程式碼來偵測孤立用戶:
Use TestDB
sp_change_users_login 'report'
輸出列出了所有登入名,這些登入名稱在 TestDB 資料庫的 sysusers 系統表和 master 資料庫的 sysxlogins 系統表中的條目之間不符。解決問題:
解決孤立使用者問題
Use TestDB
sp_change_users_login 'update_one', 'test', 'test'
SELECT sid FROM dbo.sysusers WHERE name = 'test'
0x40FF09E48FBD3354B7833706FD2C61E4
use master
SELECT sid FROM dbo.sysxlogins WHERE name = 'test'
0x40FF09E48FBD3354B7833706FD2C61E4
這會將伺服器登入名稱「test」與 TestDB 資料庫使用者「test」重新連結。 sp_change_users_login 預存程序也可以使用「auto_fix」參數執行所有孤立使用者的更新,但不建議這樣做,因為 SQL Server 會嘗試按名稱來匹配登入名稱和使用者。對於大多數情況,這是有效的;但是,如果錯誤的登入與使用者關聯,則使用者可能擁有不正確的權限。