2011-07-11 52 views
3

我與實體框架代碼優先和SQL Server 2008開發實體框架創建沒有「數據庫創建」權限的表?

我想支持這個共同的安裝方案:

  1. 數據庫管理員手動創建一個新的數據庫,並只具有訪問新用戶該數據庫database_owner許可)
  2. 我的應用程序配置與數據庫的細節和新用戶的登錄
  3. 我的應用程序使用實體框架AUTOMATICA LLY初始化數據庫(創建表,視圖等)

然而,當我試圖讓實體框架初始化數據庫:

context.Database.Create(); 

我會得到一個異常,因爲這個方法嘗試創建數據庫,而不僅僅是在數據庫中創建表,視圖等。

如何獲得Entity Framework初始化數據庫的用戶沒有「創建數據庫」權限,使用已經爲其創建的數據庫?

+1

你的問題是混亂的。如果您只希望用戶擁有創建表權限,那麼爲什麼您希望他們能夠創建數據庫?要讓他們首先創建數據庫,您需要在SQL Server登錄級別給予他們權限,而不是數據庫用戶級別。您是否已將任何角色或權限應用於SQL Server登錄名?是否真的打算授予他們創建數據庫的權限?你如何確保他們只創建一個?您想在服務器上放置多少個數據庫?通常你創建一個數據庫,然後讓用戶在該數據庫中創建對象。 –

+0

簡而言之:**不**。如果您沒有「創建數據庫」權限 - 您無法在任何情況下**創建數據庫 - 這就是權限的全部要點...... –

+1

此問題與數據庫安全無關。這是關於實體框架惱人的堅持給予創建數據庫權限,即使你想要做的就是創建表。我已經提交了一個編輯,希望能夠澄清這個問題。 –

回答

3

正在使用的技術不相關,應用程序應該將部署特權與正常使用特權分開。完全可以接受要求更高的部署特權,並且您應該遵循相同的模型。換句話說,您的部署(讀取:'Setup'或'MSI'或'Installation')應該需要更高的權限(例如dbcreator成員資格),並且在此高級部署環境下,創建'code first'模型。因此,只需將'context.Database.Create'移動到您的應用程序安裝程序中並讓管理員安裝該應用程序。