我正在使用 C#、.net8 实体框架,目前我直接在数据库上下文中使用连接字符串。这是好的做法并且安全吗?或者为了安全起见应该在其他地方使用它?这是我当前的代码:
public class FileSystemDBContext : DbContext {
public DbSet<FileTree> FileTrees { get; set; }
public FileSystemDBContext(DbContextOptions<FileSystemDBContext> options) : base(options)
{
// Empty constructor body
}
}
public class FileSystemDBContextFactory : IDesignTimeDbContextFactory<FileSystemDBContext> {
public FileSystemDBContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<FileSystemDBContext>();
optionsBuilder.UseSqlServer(@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=FileSystemExercise;Integrated Security=True;Connect Timeout=30;Encrypt=False;Trust Server Certificate=False;Application Intent=ReadWrite;Multi Subnet Failover=False");
return new FileSystemDBContext(optionsBuilder.Options);
}
}
如何正确执行,取决于您部署的系统类型。 以及如何维护安全。
不将连接字符串硬编码到代码中的一点是,几乎所有“现实世界”的企业都使用 git 或其变体。
在可以公开的代码中使用纯文本形式的连接字符串是一个坏主意。
仅当您不将该配置文件上传到存储库时,将连接字符串移动到配置文件才有效。
如果您部署到云,那就简单得多,因为您拥有特定于您的部署环境的环境变量(通常是测试/登台/生产)
您可以在那里简单地引用它们。 如果你想要一些可以在本地运行的东西,比如“开发”版本,我建议你实际上只是使用带有外部组件的 docker 容器,并在该实现中硬编码密码(无论你在哪里),因为它只会永远使用您的 docker 沙箱(不要在 docker 中重复使用生产密码)。如果您不映射端口,则没有人能够连接到您的 docker 容器。