在 C# 中,在数据库上下文中编写连接字符串是“安全”/“良好”的做法吗?

问题描述 投票:0回答:1

我正在使用 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);
    }
}
c# .net dbcontext
1个回答
0
投票

如何正确执行,取决于您部署的系统类型。 以及如何维护安全。

不将连接字符串硬编码到代码中的一点是,几乎所有“现实世界”的企业都使用 git 或其变体。

在可以公开的代码中使用纯文本形式的连接字符串是一个坏主意。

仅当您不将该配置文件上传到存储库时,将连接字符串移动到配置文件才有效。

如果您部署到云,那就简单得多,因为您拥有特定于您的部署环境的环境变量(通常是测试/登台/生产)

您可以在那里简单地引用它们。 如果你想要一些可以在本地运行的东西,比如“开发”版本,我建议你实际上只是使用带有外部组件的 docker 容器,并在该实现中硬编码密码(无论你在哪里),因为它只会永远使用您的 docker 沙箱(不要在 docker 中重复使用生产密码)。如果您不映射端口,则没有人能够连接到您的 docker 容器。

© www.soinside.com 2019 - 2024. All rights reserved.