2013-01-10 35 views
3

我被要求維護使用SQL Server數據庫的ASP經典版創建的網站。恢復後連接到SQL Server數據庫

我以備份的形式獲得數據庫。我在本地計算機上恢復了數據庫,併爲其創建了一個DSN connection。但是,當我嘗試加載我的網站時,網站stored procedures依賴於提供執行權限被拒絕的錯誤。

有問題的存儲過程中有一個名爲UserSecure表示作爲唯一的人與EXECUTE權限的用戶,我曾嘗試創建同名的用戶,但不工作,即使我可以用手動登錄到SQL Server Management Studio中UserSecure嘗試使用這些憑據從網頁進行連接時出現login failed error

如果我運行sp_helplogins我的Windows憑據顯示爲數據庫的所有者,實際上我可以在SSMS內執行,但不能從ADO連接執行。

另一方面,webpage中的連接是這樣編碼的,我不熟悉連接的應用部分。也許這是問題的一部分?我曾嘗試連接DSNDSN-less連接,並可以連接但不對數據庫做任何事情?

+1

你能提供更多的上下文嗎?什麼版本的SQL?有多少數據庫被調用?您的存儲過程或視圖中是否有跨數據庫引用? – Watki02

+2

您是否在數據庫安全中創建了**用戶**,或者您是否在服務器安全性下創建了**登錄**? –

+0

我最終做的是不是專注於一個程序,而是關注整個數據庫的權限並授予訪客用戶的EXECUTE權限。這一切都在本地IIS上進行測試,因此安全性不成問題。 – valis

回答

0

這可能不是最優秀的修復程序,但我不再專注於一個過程,而是將整個數據庫上的來賓用戶的執行權限授予給用戶。由於這只是在我的個人計算機上運行,​​安全性不是問題,它似乎已解決了問題。

0

一個問題是咬我幾次:

如果你的存儲過程(或視圖),需要許可用戶(假設userA),以及存儲過程調用另一個數據庫中的表或視圖(比如viewB ),僅在viewB的數據庫上登錄是不夠的,您還必須明確授予userA選擇/執行/ etc的權限。在viewB(這又需要對viewB的數據庫用戶)

所以你的情況,你可能需要明確授予UserSecure由你恢復一個引用現有的數據庫上的存儲過程的執行權限。

3

您應該確保數據庫服務器登錄映射到適當的數據庫用戶(在處理數據庫備份時經常遇到此問題)。如果不是,那麼你需要修復映射。幸運的是,您可以使用一個名爲sp_change_users_login的命令來解決此問題。

首先,檢查您的登錄是否映射到您的數據庫用戶。使用SQL Server Management Studio(假設SQL Server 2008),請查看安全/登錄下的UserSecure。如果您在列表中看到它,請雙擊它並選擇User Mapping。從那裏找到您要連接的數據庫,並查看UserSecure是否映射到該數據庫。如果不是,您可以使用下面的命令來修復它(假設UserSecure既是登錄用戶名):

EXEC sp_change_users_login AUTO_FIX, UserSecure 

查看MSDN瞭解更多信息上sp_change_users_login
http://msdn.microsoft.com/en-us/library/ms174378.aspx

0

知道的問題都非常清楚,

用戶(名)的ID將從備份數據庫恢復的一個不同。 MSSQL存儲用戶的ID而不是用戶名(文本),因此每臺計算機和備份的ID會有所不同(99%的時間)。所以,當身份證不符時,您無權訪問。

所有你需要做的就是刪除用戶並重新創建它,確保你做,在這兩個地方:

從數據庫中先刪除用戶:

數據庫 - >安全 - >用戶 - >右鍵單擊(用戶名)+刪除

然後轉到

安全性 - >登錄 - >右鍵點擊(用戶名)+刪除

然後再創建用戶併爲該帳戶提供正確的權限,並且您都很好。