【发布时间】:2020-04-03 19:13:50
【问题描述】:
我正在使用 Asp.net core 创建一个网站。
我想知道使用种子数据将网站管理员添加到数据库是一种安全且安全的方法吗?
如果没有,我该怎么做?
【问题讨论】:
标签: c# sql asp.net-mvc asp.net-core
我正在使用 Asp.net core 创建一个网站。
我想知道使用种子数据将网站管理员添加到数据库是一种安全且安全的方法吗?
如果没有,我该怎么做?
【问题讨论】:
标签: c# sql asp.net-mvc asp.net-core
您可以在program.cs文件或startup类中的configure方法中创建将用户添加到数据库和调用方法的扩展方法
根据Microsoft documentation 更好的方法是使用它来使用种子数据
Program.cs
public static void Main(string[] args)
{
var host = CreateWebHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var context = services.GetRequiredService<DbContext>();
DbInitializer.Initialize(context);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred while seeding the database.");
}
}
host.Run();
}
或配置方法方式
public static void Initialize(this IApplicationBuilder app)
{
using (var scope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
var dbContext = scope.ServiceProvider.GetServices<DbContext>();
//insert data in database
}
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Initialize();
}
这个link 可以帮助管理用户播种
【讨论】:
我认为 farhad 已经很好地解释了“如何”。我想添加以下内容。
我与一家机器制造商合作,我们必须与食品和药物管理局(一个为美国公众行使食品和药品安全和监管权力的美国法律实体)及其欧洲同行打交道。我们属于食品类别,因此它不像药品监管那样严格、法律明智,但仍然相当严格。我们也按照您在此处描述的方式进行操作。
我们有特定的角色、管理员、操作员等,并且为每个用户创建了每个角色的“默认”帐户。这也适用于何时,例如有人忘记添加操作员,而您接到电话说有人需要访问您的系统以担任该特定角色..
当我们最终将机器运送给客户时,它就成为他们的财产,因此我们会更改大多数角色和他们的帐户。我们有一个 OEM 角色,它基本上可以做任何事情,只有我们有登录名。这基本上是一个超级用户,仅供我们维护使用。其详细信息在公司外部保密。
所以 - 我认为将管理数据播种到您的数据库中非常好,但是强制执行“首次使用更改密码”策略可能是明智的。
【讨论】: