在EF Core运行时数据库创建过程中如何创建和分配SQL Server用户?

时间:2019-04-15 14:55:39

标签: c# sql-server ef-migrations

我需要知道如何创建SQL Server数据库和新的SQL Server用户,以及如何在我的.NET Core应用程序首次使用Entity Framework Core迁移运行时将用户以db_owner的身份分配给数据库(当前这些步骤是在首次部署之前手动完成的。

我试图在首次运行时自动执行数据库创建和用户创建,以保存我们的实现分析人员步骤。另外,如果这是最佳做法,我想提供一些指导。我们没有DBA,并且不允许我进入SQL Server手动创建所需的所有内容。

我尝试将Sql()命令注入到我的第一次迁移的Up()方法中,但是由于连接字符串已经具有我要手动创建的用户的SQL Server凭据,登录显然失败了。

我假设我需要对SQL Server使用某种Windows身份验证来创建数据库和用户,但是我不确定如何对迁移使用Windows身份验证,而对于其余部分则如何使用SQL Server身份验证的应用程序。

这是我尝试过的Up()代码:

protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.Sql("CREATE LOGIN svc_appname_env WITH PASSWORD = 'app_password'");
    migrationBuilder.Sql("CREATE USER [svc_appname_env] FOR LOGIN [svc_appname_env]");
    migrationBuilder.Sql("EXECUTE sp_addrolemember N'db_owner', N'svc_appname_env'");
    ...
}

Startup.cs中:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
    {
        var context = serviceScope.ServiceProvider.GetRequiredService<MyDatabaseContext>();
        context.Database.Migrate();
    }
    ...
}

我希望创建用户和数据库,但是却出现以下错误:

  

用户'svc_appname_env'登录失败

0 个答案:

没有答案