我的問題:執行MigrateDatabaseToLatestVersion初始化所需的(服務器和數據庫)權限是什麼?Azure SQL中MigrateDatabaseToLatestVersion的用戶/登錄所需的權限是什麼
問題背景:
我有一個藍色的SQL數據庫和連接到它的Azure的應用服務。我希望應用服務使用database contained user來最大限度地提高數據庫的靈活性並最大限度地降低安全攻擊面。
我的代碼使用EF6 Code First遷移,我想讓我的DEV(在Azure)環境中使用MigrateDatabaseToLatestVersion數據庫初始值設定項。
我可以作爲用戶連接到有問題的數據庫,並使用Visual Studio或SSMS會話運行查詢,因此我知道用戶有訪問權限(防火牆規則是適當的)。
然而,當我嘗試運行與DbInitializer任何東西(包括應用程序服務和控制檯程序),我總是得到「用戶登錄失敗‘我的用戶’」
因爲我已經創建了一個服務器登錄爲用戶授予登錄dbmanager訪問權限,然後初始化程序工作,太棒了! 看到問題在帖子頂部
更新:
這不是我一直在尋找的答案,這可能是更多的權限必需的,但我想提供的我得到了我的細節代碼工作。
- 創建在服務器級別
- 登錄創建master數據庫
- 登錄用戶的用戶添加到dbmanager角色在主數據庫
- 爲登錄中創建用戶目標數據庫
- 添加用戶,在目標數據庫,到db_owner角色
-- Connect to master CREATE LOGIN a_database_login WITH PASSWORD = 'complex_password'; CREATE USER a_user FOR LOGIN a_database_login; ALTER ROLE dbmanager ADD MEMBER a_user; -- Connect to 'target' database CREATE USER a_user FOR LOGIN a_database_login; EXEC sp_addrolemember 'db_owner', 'a_user';
實際上,我的用戶是db_owner角色的成員,所以(我的理解)他們應該可以完全訪問有問題的數據庫。儘管如此,我仍然得到了登錄失敗的錯誤 – Kepboy
我還測試了一個具有dbb_owner角色的新用戶[ALTER ROLE db_owner ADD MEMBER test3],我可以很好地執行MigrateDatabaseToLatestVersion初始化。我建議你可以檢查連接字符串以確保用戶名和密碼是正確的,然後重試。我建議你也可以確保在azure sql防火牆中啓用了正確的IP地址。 –
我實際上得到了我的代碼的工作版本。我問的問題是澄清實際需要的權限。這樣我就可以將用戶限制在最少的特權(這是很好的安全實踐)。 – Kepboy