Получить строку подключения без пароля в C # - PullRequest
3 голосов
/ 20 октября 2011

Я пытаюсь создать метод для получения значения строки подключения, но без значения для пароля, или показать пароль в виде символа *. Мне нужно использовать его в журнале.

Я использую ConnectionStringBuilder для Oracle, SqlServer.

Во всяком случае, другой способ - лучше - реализовать это? Может быть, более общий. И что это происходит, ProviderName пусто ...

public static string GetConnectionStringWithouPassword(this ConnectionStringSettings cs)
{
    if (cs == null || string.IsNullOrEmpty(cs.ConnectionString)) return null;

    if (cs.ProviderName.ToLower().Equals("Oracle.DataAccess.Client".ToLower()))
    {
        var builderOra = new Oracle.DataAccess.Client.OracleConnectionStringBuilder(cs.ConnectionString);
        return "";
    }

    if (cs.ProviderName.ToLower().Equals("System.Data.SqlClient".ToLower()))
    {
        var builderSql = new SqlConnectionStringBuilder(cs.ConnectionString);
        return "";
    }

    return null;
}

//
public static string ObtenerCadenasConexion()
{
    var sb = new StringBuilder();
    ConnectionStringSettingsCollection settings = ConfigurationManager.ConnectionStrings;

    if (settings != null)
    {
        foreach (ConnectionStringSettings cs in settings)
        {
            sb.AppendLine("Name: " + cs.Name);
            sb.AppendLine("ProviderName: " + cs.ProviderName);
            sb.AppendLine("ConnectionString: " + cs.GetConnectionStringWithouPassword() + Environment.NewLine);
        }
    }

    return sb.ToString();
}

Ответы [ 2 ]

6 голосов
/ 20 октября 2011

отметьте это: DbConnectionStringBuilder Class

вы можете использовать метод Remove, не требуется никакого магического анализа: например,

со страницы MSDN:

static void Main()
{
    DbConnectionStringBuilder builder = new
        DbConnectionStringBuilder();
    builder.ConnectionString =
        @"Provider=Microsoft.Jet.OLEDB.4.0;Data 
            Source=C:\Demo.mdb;" +
        "Jet OLEDB:System Database=system.mdw;";

    // Try to remove an existing item.
    TryRemove(builder, "Provider");

    // Try to remove a nonexistent item.
    TryRemove(builder, "User ID");

    // Try to remove an existing item, 
    // demonstrating that the search isn't 
    // case sensitive.
    TryRemove(builder, "DATA SOURCE");
    Console.ReadLine();
}

static void TryRemove(DbConnectionStringBuilder builder, string itemToRemove)
{
    if (builder.Remove(itemToRemove))
    {
        Console.WriteLine(@"Removed '{0}'", itemToRemove);
    }
    else
    {
        Console.WriteLine(@"Unable to remove '{0}'", itemToRemove);
    }
    Console.WriteLine(builder.ConnectionString);
}
1 голос
/ 20 октября 2011

Проверьте свойство Connection.PersistSecurityInfo, вы можете удалить эту информацию, как только соединение будет создано автоматически.

...