gpt4 book ai didi

c# - 如何在 SQL Server 连接字符串中隐藏用户 ID/密码?

转载 作者:太空狗 更新时间:2023-10-29 23:22:52 27 4
gpt4 key购买 nike

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

(用 C# 编写)

我有一个高度多线程的应用程序,它可以识别多个数据库,因此为了帮助进行故障排除和调试,可以在不同的地方记录连接字符串。我无法控制使用该产品的客户将哪些连接字符串用于连接字符串,因此在其中找到密码并不少见。我知道这一点,因为人们打开 DEBUG 级别的日志记录并向我们发送日志文件和问题报告也很常见,这些日志包含他们的数据库密码(因此我们的支持票系统包含密码)。

我意识到最好的做法是不要将密码放在连接字符串中,但这部分是我无法控制的(当然除非我们更改我们的应用程序,如果您给它一个带有未加密密码的连接字符串,它会拒绝运行.. . 这对我来说似乎有点严厉)。

我真正想要它记录的是:

Server=myServerAddress;Database=myDataBase;User Id=****;Password=*****;

(我不确定用户 ID/名称是否是敏感信息,和/或是否对记录有用——欢迎发表评论)。

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

最佳答案

好吧,这个答案确实属于@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();
}

注意事项:

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

关于c# - 如何在 SQL Server 连接字符串中隐藏用户 ID/密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22819896/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com