2017-04-18 13 views
0

我的問題:執行MigrateDatabaseToLatestVersion初始化所需的(服務器和數據庫)權限是什麼?Azure SQL中MigrateDatabaseToLatestVersion的用戶/登錄所需的權限是什麼

問題背景:

我有一個藍色的SQL數據庫和連接到它的Azure的應用服務。我希望應用服務使用database contained user來最大限度地提高數據庫的靈活性並最大限度地降低安全攻擊面。

我的代碼使用EF6 Code First遷移,我想讓我的DEV(在Azure)環境中使用MigrateDatabaseToLatestVersion數據庫初始值設定項。

我可以作爲用戶連接到有問題的數據庫,並使用Visual Studio或SSMS會話運行查詢,因此我知道用戶有訪問權限(防火牆規則是適當的)。

然而,當我嘗試運行與DbInitializer任何東西(包括應用程序服務和控制檯程序),我總是得到「用戶登錄失敗‘我的用戶’」

因爲我已經創建了一個服務器登錄爲用戶授予登錄dbmanager訪問權限,然後初始化程序工作,太棒了! 看到問題在帖子頂部

更新:

這不是我一直在尋找的答案,這可能是更多的權限必需的,但我想提供的我得到了我的細節代碼工作。

  1. 創建在服務器級別
  2. 登錄創建master數據庫
  3. 登錄用戶的用戶添加到dbmanager角色在主數據庫
  4. 爲登錄中創建用戶目標數據庫
  5. 添加用戶,在目標數據庫,到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'; 

回答

0

根據您的描述,您需要先向適當的用戶授予足夠的權限。

我建議你可以先找到正確的數據庫並授予足夠的權限。

您需要授予對包含數據庫的用戶帳戶的CONNECT,CREATE TABLE,SELECT,REFERENCES,INSERT,UPDATE,DELETE權限。

更多細節,你可以參考下面的查詢。

GRANT CONNECT TO {username} 
--The ALL permission is deprecated and maintained only for compatibility. It DOES NOT imply ALL permissions defined on the entity. 
GRANT ALL TO {username} 
GRANT SELECT, REFERENCES ,INSERT, UPDATE, DELETE ON SCHEMA :: dbo TO {username} 

更新:

你也可以試試下面的查詢。

Use brandotestsql 

CREATE USER test5 WITH PASSWORD = 'aaaa12356!'; 

ALTER ROLE db_owner ADD MEMBER test5 

有了這個ConnectionString的:

<add name="DefaultConnection" connectionString="Server=tcp:yourazuresqlserver.database.windows.net,1433;Initial Catalog=brandotestsql;Persist Security Info=False;User ID=test5;Password=aaaa12356!;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" 
     providerName="System.Data.SqlClient" /> 

此外,我建議你也可以查看你直接在你的DbContext類的ConnectionString的權利。


我問的問題是明確實際所需的權限。這樣我就可以將用戶限制在最少的特權(這是很好的安全實踐)。

權限是根據EF將用於您的應用程序的查詢。

首先,您需要啓用連接權限。其次,如果要使用EF創建表,則需要啓用CREATE TABLE權限。

第三,如果你想創建刪除更新和插入數據,你需要啓用它們。通常情況下,我們只啓用一個SCHEMA「dbo」。

所以我建議你可以啓用下面的權限。

CONNECT 
CREATE TABLE 
SELECT, REFERENCES ,INSERT,ALTER, UPDATE, DELETE ON SCHEMA :: dbo 
+1

實際上,我的用戶是db_owner角色的成員,所以(我的理解)他們應該可以完全訪問有問題的數據庫。儘管如此,我仍然得到了登錄失敗的錯誤 – Kepboy

+0

我還測試了一個具有dbb_owner角色的新用戶[ALTER ROLE db_owner ADD MEMBER test3],我可以很好地執行MigrateDatabaseToLatestVersion初始化。我建議你可以檢查連接字符串以確保用戶名和密碼是正確的,然後重試。我建議你也可以確保在azure sql防火牆中啓用了正確的IP地址。 –

+0

我實際上得到了我的代碼的工作版本。我問的問題是澄清實際需要的權限。這樣我就可以將用戶限制在最少的特權(這是很好的安全實踐)。 – Kepboy

相關問題