다음을 통해 공유


연결 문자열 빌더

적용 대상: .NET Framework .NET .NET Standard

ADO.NET 다운로드

이전 버전의 ADO.NET에서는 연결된 문자열 값이 있는 연결 문자열의 컴파일 시간 검사가 발생하지 않았으므로 런타임에 잘못된 키워드가 ArgumentException을 생성했습니다. Microsoft SqlClient Data Provider for SQL Server에는 DbConnectionStringBuilder에서 상속하는 연결 문자열 작성기 클래스 Microsoft.Data.SqlClient.SqlConnectionStringBuilder이 포함되어 있습니다.

연결 문자열 삽입 공격

연결 문자열 삽입 공격은 사용자 입력에 대해 동적 문자열 연결을 사용하여 연결 문자열을 작성할 때 발생할 수 있습니다. 문자열의 유효성 검사가 실시되지 않고 악성 텍스트 또는 문자가 이스케이프되지 않은 경우 공격자는 잠재적으로 서버의 중요한 데이터 또는 기타 리소스에 액세스할 수 있습니다. 예를 들어 공격자는 세미콜론을 제공하고 다른 값을 추가하여 공격할 수 있습니다. 연결 문자열은 "최신항목 사용(last one wins)" 알고리즘을 사용하여 구문 분석되고 악의적인 입력이 적법한 값으로 대체됩니다.

연결 문자열 작성기 클래스는 모호한 작업을 제거하고 구문 오류 및 보안 취약점으로부터 보호하도록 디자인되었습니다. 즉, 데이터 공급자에서 허용하는 알려진 키/값 쌍에 해당하는 메서드와 속성을 제공합니다. 각 클래스는 고정된 동의어 컬렉션을 유지하며 동의어를 그에 해당하는 잘 알려진 키 이름으로 변환할 수 있습니다. 유효한 키/값 쌍에 대한 검사가 이루어지고 잘못된 쌍은 예외를 throw합니다. 또한 삽입된 값은 안전한 방식으로 처리됩니다.

다음 예제에서는 SqlConnectionStringBuilder에서 Initial Catalog 설정에 삽입된 추가 값을 처리하는 방법을 보여 줍니다.

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "(local)";
builder.IntegratedSecurity = true;
builder.InitialCatalog = "AdventureWorks;NewValue=Bad";
Console.WriteLine(builder.ConnectionString);

출력을 통해 SqlConnectionStringBuilder에서 추가 값을 연결 문자열에 새로운 키/값 쌍으로 추가하는 대신 큰따옴표로 묶어 올바르게 이스케이프 처리했음을 알 수 있습니다.

data source=(local);Integrated Security=True;
initial catalog="AdventureWorks;NewValue=Bad"

구성 파일에서 연결 문자열 작성

연결 문자열의 특정 요소가 이미 알려져 있는 경우 해당 요소를 구성 파일에 저장하고 런타임에 검색하여 완전한 연결 문자열을 구성할 수 있습니다. 예를 들어 데이터베이스 이름은 미리 알고 있는 경우가 많지만 서버 이름은 그렇지 않습니다. 또는 사용자가 연결 문자열에 다른 값을 삽입하지 않고 런타임에 이름과 암호를 제공하려고 할 수 있습니다.

연결 문자열 작성기의 오버로드된 생성자 중 하나는 String을 인수로 사용하므로 작성기를 사용하면 부분 연결 문자열을 제공하여 이러한 사용자 입력을 통해 연결 문자열을 완성하는 것이 가능합니다. 이 부분 연결 문자열을 구성 파일에 저장한 후 런타임에 검색할 수 있습니다.

참고 항목

System.Configuration 네임스페이스를 사용하면 WebConfigurationManager(웹 애플리케이션의 경우) 및 ConfigurationManager(Windows 애플리케이션의 경우)를 통해 구성 파일에 프로그래밍 방식으로 액세스할 수 있습니다. 연결 문자열 및 구성 파일 작업에 대한 자세한 내용은 연결 문자열 및 구성 파일을 참조하세요.

예시

이 예제에서는 구성 파일에서 부분 연결 문자열을 검색한 후 DataSourceUserID, PasswordSqlConnectionStringBuilder 속성을 설정하여 완성하는 방법을 보여 줍니다. 구성 파일은 다음과 같이 정의됩니다.

<connectionStrings>
  <clear/>
  <add name="partialConnectString"
    connectionString="Initial Catalog=Northwind;"
    providerName="Microsoft.Data.SqlClient" />
</connectionStrings>

참고 항목

코드를 실행하려면 프로젝트에서 System.Configuration.dll에 대한 참조를 설정해야 합니다.

private static void BuildConnectionString(string dataSource,
    string userName, string userPassword)
{
    // Retrieve the partial connection string named databaseConnection
    // from the application's app.config or web.config file.
    ConnectionStringSettings settings =
        ConfigurationManager.ConnectionStrings["partialConnectString"];

    if (null != settings)
    {
        // Retrieve the partial connection string.
        string connectString = settings.ConnectionString;
        Console.WriteLine("Original: {0}", connectString);

        // Create a new SqlConnectionStringBuilder based on the
        // partial connection string retrieved from the config file.
        SqlConnectionStringBuilder builder =
            new SqlConnectionStringBuilder(connectString);

        // Supply the additional values.
        builder.DataSource = dataSource;
        builder.UserID = userName;
        builder.Password = userPassword;
        Console.WriteLine("Modified: {0}", builder.ConnectionString);
    }
}

참고 항목