2012-02-28 34 views
-4

我已經使用C#的ASP.net。我想通過Web服務器訪問SQL Server數據庫。當從開發區域執行我的應用程序時,它正在工作,但在將應用程序部署到IIS服務器後,它顯示以下異常:如何通過IIS遠程訪問數據庫?

CREATE DATABASE permission denied in database'master'。嘗試 爲文件D:\ newtest \ newtest.mdf附加一個自動命名的數據庫失敗。 存在一個同名的數據庫,或者指定的文件不能被打開,或者它位於UNC共享位置 。

我已經使用了下面的連接字符串來連接使用數據庫

Data Source = .\\SQLEXPRESS;AttachDbFileName=databasepath; Integrated Security=true 

如何通過IIS遠程訪問SQL Server數據庫?

回答

0

嘿與SQL服務器上創建憑證,並更新你的配置文件

connectionString="Data Source=Abcl\SQLEXPRESS;Initial Catalog=master;User ID=sa;Password=pwd12" providerName="System.Data.SqlClient" 

,如果您使用的是像MDF 請使用這樣

connectionString="AttachDbFilename='C:\Documents and Settings\nmartin\My Documents\PS_Upload\TimeTrack\src\TimeTracker\TimeTrack\App_Data\ASPNETDB.MDF';Integrated Security=True; User Instance=True" 
+0

沒有固定的數據庫文件,我改變我的數據庫每一次,我有過在項目文件夾中的文件一個文件包含了數據庫路徑,從這個文件讀取數據庫路徑如何每次在web.config中傳遞數據庫路徑,我已經使用了這個連接在課堂文件及如何訪問數據庫沒有用戶名在ASP.net – user847455 2012-02-28 05:37:30

+0

嗨我已經更新了我的答案作爲您的要求的基礎...請檢查 – 2012-02-28 05:40:57

+0

我將不得不建議'sa'是一個壞例子使用。 – 2012-02-28 05:45:52

0

雖然桑傑的答案是正確的數據庫文件,它並沒有真正解釋爲什麼你得到的權限被拒絕。

在ASP.NET/IIS中運行的代碼作爲特定用戶運行,如工作進程的配置中所定義的。對於IIS 6 [Server 2003](及以下版本,我認爲)IIS 7+ [Server 2008]的默認值爲NETWORK SERVICE,默認行爲是作爲特殊應用程序池用戶IISAPPPOOL\yourAppPoolName運行。

如果您在數據庫上爲正確的用戶帳戶授予必要的權限 - 您應該能夠避開該錯誤並仍然使用集成安全性。

順便說一句,在數據庫中給出最嚴格的(但仍可操作的)權限集通常是一個好主意。 CREATE DATABASE需要相當高的權限級別(我不記得我的頭頂是什麼)。如果將該權限授予您的IIS應用程序,那麼您將面臨允許不太可靠的用戶控制數據庫系統和對它造成嚴重破壞。

0

他們的關鍵是你在連接字符串中使用了Integrated Security=True

當您在開發環境中運行項目時,Web應用程序通常以您的本地用戶帳戶運行。此外,您的帳戶通常是本地SQL實例上的特權用戶(admin)。

在您的部署服務器上,IIS通常以本地計算機帳戶(或爲您的AppPool預置的帳戶)運行。該帳戶通常在SQL服務器實例上沒有任何特殊權限。

正如debhu指出的那樣,您通常不希望讓您的應用程序的SQL特權高到足以造成任何傷害(即使這是您的錯誤)。一個常見的模式,以避免tihs是讓你的應用程序兩個單獨的SQL帳戶:

  1. 的高priviledged帳戶用於創建和修改數據庫schmea訪問(如db_owner角色)
  2. 有限權限的帳戶你的數據庫,而你的應用程序運行(如擁有db_datareader和/或db_datawriter權限的角色)
在我的應用程序