2013-11-22 51 views
2

我知道這個問題已經被問過很多次了,但是我查看了答案並沒有找到解決方案。SqlException:無法打開登錄請求的數據庫「path db.mdf」。登錄失敗。登錄失敗的用戶'NT AUTHORITY SYSTEM'

我在C#中構建了一個Windows Service,它連接到數據庫並用其他來源的數據填充它。我設置Account -> LocalSystemServiceProcessInstallerStartType -> AutomaticServiceInstaller

我使用實體框架從數據庫中生成的.edmx,這是一個連接字符串:

<add name="ConStringName" 
     connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl; 
    provider=System.Data.SqlClient;provider connection string='data source=(LocalDB)\v11.0; 
    attachdbfilename=&quot;somePath\MyDbName.mdf&quot;; 
    integrated security=True;connect timeout=30; 
    MultipleActiveResultSets=True; 
    App=EntityFramework'" 
     providerName="System.Data.EntityClient" /> 

而且我有這樣的代碼:

var objContext = ((IObjectContextAdapter)dbContext).ObjectContext; 
objContext.ExecuteStoreCommand("DELETE FROM Properties;"); 

在第二行中,我得到

Cannot open database "path\DbName.MDF" requested by the login. The login failed. 
Login failed for user 'NT AUTHORITY\SYSTEM'. 

我到目前爲止試過的東西:

1)試圖爲每個數據庫表這樣的代碼:

GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.TableName TO "NT AUTHORITY\SYSTEM"; 

和無DBO。

GRANT SELECT, INSERT, UPDATE, DELETE ON TableName TO "NT AUTHORITY\SYSTEM"; 

2)我已經爲這個用戶 'NT AUTHORITY \ SYSTEM' 在我的數據庫的權限:
在SSMS:數據庫=> MYDATABASE - >安全 - >用戶 - >「NT AUTHORITY \系統」 - >屬性 - >會員 - >的db_owner

3)試圖設置在SQL Server爲這個帳戶perissions: 數據庫 - >安全 - >登錄 - > 'NT AUTHORITY \ SYSTEM' - >屬性 - >在這裏設置db_owner

奇怪的事情: 有一次我重新啓動電腦,一切工作!像這個LocalSystem有權限,Windows服務可以訪問數據庫並執行所有操作!

但是在某些情況下,這種異常開始再次出現。我試過重新啓動計算機但失敗了。

我知道我錯過了一些明顯的東西。請幫我找到這件事。

回答

1

甚則試圖權限設置爲你的數據庫到本地系統帳戶,最好做下列之一:

  1. 更改運行Windows服務的Windows帳戶已經有一個帳戶數據庫中的權限。

  2. 請不要在連接字符串中使用integrated security=True,而應指定User IdPassword

+0

嗨!對於第二個選項,我應該創建一個基於Windows或SQL Server的用戶? –

+1

無所謂,取決於你,兩者都可以工作。 – Szymon

+0

我已經創建了一個新的基於SQL Server的用戶,但由於某種原因,當我嘗試從Visual Studio的服務器資源管理器中使用指定的用戶名和密碼連接到數據庫時,我得到:「試圖連接到db文件失敗並顯示以下信息:用戶test_user登錄失敗「。我有企業版的SQL服務器,也許這不知何故涉及到問題 –

相關問題