2017-04-18 68 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

相关问题