2012-07-12 226 views
1

我正在考慮將用於數據存儲的LocalDB添加到我的應用程序。SQl服務器2012 LocalDb共享訪問

背景:

1)我的應用程序有2個部分。 a。桌面客戶端。 (在登錄到計算機的用戶下運行) b。 NT服務。 (作爲本地系統運行)

NT服務: 1)針對客戶端特定的設置和配置選項,對我們的後端服務器進行Web服務調用。
2)上傳客戶端創建的記錄。

桌面應用程序: 1)加載由NT服務下載的設置並根據這些設置運行。 2)創建客戶記錄。

LocalDB似乎很適合這裏,但是這兩個項目可以同時訪問LOCALDB嗎?在線調查後,它看起來像一個LOCALDB共享實例可能是可能的。但是這是否意味着NT服務將不得不始終保持LOCALDB連接的連接?

回答

2

完成了與您所描述的非常類似的部署,可以這樣做。不過,我強烈建議不要這樣做。

的幾點思考:

  1. 的LocalDB '實例' 要求的用戶配置文件被加載。始終加載的唯一使用配置文件是本地系統,也稱爲NT Authority \ SYSTEM帳戶。
  2. 只有'實例'的所有者才能啓動或停止它。可以將'automagic'實例設置爲忽略自動攤牌超時,但仍必須至少啓動一次。我通過創建一個Windows任務解決了這個問題,該任務啓動了一個引導程序,該引導程序在啓動時將'sqllocaldb start v11.0''刪除。 Windows任務以'低於正常'的進程優先級執行,因此啓動的引導程序實際上將SQLEnv.exe優先級提升爲高,以用於我的用例。
  3. 假設你使用NT Authority \ SYSTEM作爲實例配置文件,使用類似SQL Management Studio的可能需要系統上的PsExec。這是一個安全風險,因爲它使您可以交互訪問以本地系統運行的進程。不要這樣做。
  4. 我們使用組訪問我們的客戶端部分,因此我們將這些組的訪問權限授予實際的數據庫/實例。沒有這一點,幾乎不可能授予新用戶訪問實例/數據庫的權限。

您真的需要一個數據庫嗎?或者厚客戶端可以將文件寫出到服務隨後檢查(或構建緩衝區)併發送它的每個記錄的特定位置?

另一種替代方法是刪除NT服務,並使其功能成爲客戶端啓動過程的一部分。爲什麼有一個長期運行的進程不斷檢查配置更改,並且只在用戶正在使用系統時才推送數據?假設你沒有要求/現有系統。

+0

我決定反對這個。我要去使用SQL CE的路線來代替。我爲客戶端建立了一個IPC層來與NT服務進行通信。 – Nikoli 2012-08-09 14:02:49