如何在SQL Server连接字符串中隐藏用户标识/密码?

gre*_*mac 5 .net c# sql-server security connection-string

在重新发明轮子之前,是否有一种标准方法可以在SQL Server连接字符串中隐藏至少一个密码?

(用C#编写)

我有一个高度多线程的应用程序,它知道多个数据库,因此为了帮助进行故障排除和调试,可以记录连接字符串的各个位置.我无法控制使用此产品的客户使用什么连接字符串,因此在其中找到密码并不常见.我知道这是因为它也并不少见,人们打开调试级记录,并给我们的日志文件有问题报告一起,这些日志中包含的数据库密码(和结果我们的支持票系统包含口令).

我知道最好的做法是不要把连接字符串中的密码,但一部分是出于我的控制(当然,除非我们改变我们的应用程序,所以它拒绝,如果你给它用未加密的密码连接字符串跑......这似乎对我来说有点严厉).

真的希望我想要它的日志是:

Server=myServerAddress;Database=myDataBase;User Id=****;Password=*****;
Run Code Online (Sandbox Code Playgroud)

(如果用户ID /名称是否是敏感信息,或者/或者对于日志记录是否有用 - 我对此表示欢迎).

我可以构建一个简单的正则表达式(例如/Password=[^;]+/),但在此之前,我只是想看看是否还有其他情况我不考虑,特别是如果已经完成的话.

gre*_*mac 5

好的,这个答案确实属于@mellamokb,但这是我使用的:

    /// <summary>
    /// Accepts a SQL Connection string, and censors it by *ing out the password.
    /// </summary>
    /// <param name="connectionString"></param>
    /// <returns></returns>
    public static string CensorConnectionString(string connectionString)
    {
        var builder = new DbConnectionStringBuilder() {ConnectionString = connectionString};
        if (builder.ContainsKey("password"))
        {
            builder["password"] = "*****";
        }
        return builder.ToString();
    }
Run Code Online (Sandbox Code Playgroud)

夫妻注意事项:

  • 它似乎确实保留了属性的顺序。
  • 我认为我实际上没有发现输出与输入不完全相同的情况(当然不是密码),但是我仍然不会依赖于此。就我的目的而言,我不在乎,因为它是调试信息,而查看此信息的人可以找出正在使用的数据库,这是目标。
  • 我故意将密码始终按5 *进行检查:我不想泄漏有关密码长度的信息。