我的问题:执行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