【问题标题】:How to get connection string in run-time with password in ASP.NET Core如何在 ASP.NET Core 中使用密码在运行时获取连接字符串
【发布时间】:2019-07-02 13:33:32
【问题描述】:

这里我使用 appsettings.json 文件作为连接字符串。 我在运行时得到了没有密码的连接字符串。

例子:

((MySql.Data.MySqlClient.MySqlConnection)DataContext.Database.GetDbConnection()).ConnectionString

请帮忙在运行时获取密码。

提前致谢。

【问题讨论】:

  • 为什么要密码?你想达到什么目的?
  • 您是否尝试跳过 DataContext 并简单地从 Configuration.ConnectionStrings 检索它?
  • 我想同时处理多个服务器数据库。这就是我在运行时获得密码的原因。在这里,我使用了这种类型的课程。从不同的服务器获取记录。示例: public static DataTable GetDataTable(System.Data.CommandType commandType, string commandText, string Connectionstring) { System.Data.DataTable dt = new DataTable(); MySql.Data.MySqlClient.MySqlDataAdapter da = new MySqlDataAdapter(commandText, Connectionstring); da.填充(dt);返回 dt; }
  • 你应该在这里做的是遵循选项模式:docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/…

标签: c# mysql asp.net-core


【解决方案1】:

出于安全原因,这是设计使然。来自MSDN:

ConnectionString 类似于 OLE DB 连接字符串,但不相同。与 OLE DB 或 ADO 不同,返回的连接字符串与用户设置的 ConnectionString 相同,如果 Persist Security Info 值设置为 false(默认值),则减去安全信息。除非您将 Persist Security Info 设置为 true,否则用于 SQL Server 的 .NET Framework 数据提供程序不会在连接字符串中保留或返回密码。

所以,请尝试在您的连接字符串中添加Persist Security Info=true;。

【讨论】:

    【解决方案2】:

    您应该尝试从配置中获取连接字符串,而不是从DbConnection。例如appsettings.json包含以下内容,则可以通过Configuration.GetConnectionString("mydb")获取连接字符串。

    {
      "ConnectionStrings": {
        "mydb": "server=DBSERVER;user=myuser;password=pwd;database=DB"
      }
    }
    

    也就是说,如果您确实有一个DbConnection(或MySqlConnection)对象,那么如果以下一项或两项为真,您可以从MySqlConnection.ConnectionString 属性中获取密码:

    如果您能够修改应用程序使用的原始连接字符串,则可以添加 PersistSecurityInfo=true 标志。否则,您将需要获取未打开的数据库连接才能检索完整的连接字符串,包括密码。

    【讨论】:

      猜你喜欢
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-06-08
      相关资源
      最近更新 更多