보안 위험은 데이터베이스에 연결할 때 항상 존재합니다. LINQ to SQL에는 SQL Server에서 데이터를 사용하는 몇 가지 새로운 방법이 포함될 수 있지만 추가 보안 메커니즘은 제공하지 않습니다.
액세스 제어 및 인증
LINQ to SQL에는 자체 사용자 모델 또는 인증 메커니즘이 없습니다. SQL Server 보안을 사용하여 개체 모델에 매핑된 데이터베이스, 데이터베이스 테이블, 뷰 및 저장 프로시저에 대한 액세스를 제어합니다. 사용자에게 최소로 필요한 액세스 권한을 부여하고 사용자 인증을 위해 강력한 암호를 요구합니다.
매핑 및 스키마 정보
개체 모델 또는 외부 매핑 파일의 SQL-CLR 형식 매핑 및 데이터베이스 스키마 정보는 파일 시스템의 해당 파일에 액세스할 수 있는 모든 사용자에게 제공됩니다. 개체 모델 또는 외부 매핑 파일에 액세스할 수 있는 모든 사용자가 스키마 정보를 사용할 수 있다고 가정합니다. 스키마 정보에 대한 보다 광범위한 액세스를 방지하려면 파일 보안 메커니즘을 사용하여 원본 파일 및 매핑 파일을 보호합니다.
연결 문자열
가능하면 연결 문자열에서 암호를 사용하지 않아야 합니다. 연결 문자열은 자체적으로 보안 위험을 초래할 뿐만 아니라 개체 관계형 디자이너 또는 SQLMetal 명령줄 도구를 사용할 때 개체 모델 또는 외부 매핑 파일에 대한 명확한 텍스트로 연결 문자열을 추가할 수도 있습니다. 파일 시스템을 통해 개체 모델 또는 외부 매핑 파일에 액세스할 수 있는 모든 사용자가 연결 암호를 볼 수 있습니다(연결 문자열에 포함된 경우).
이러한 위험을 최소화하려면 통합 보안을 사용하여 SQL Server와 신뢰할 수 있는 연결을 만듭니다. 이 방법을 사용하면 연결 문자열에 암호를 저장할 필요가 없습니다. 자세한 내용은 SQL Server 보안을 참조하세요.
통합 보안이 없으면 연결 문자열에 명확한 텍스트 암호가 필요합니다. 위험의 증가 순서로 연결 문자열을 보호하는 가장 좋은 방법은 다음과 같습니다.
통합 보안을 사용합니다.
암호를 사용하여 연결 문자열을 보호하고 연결 문자열 전달을 최소화합니다.
System.Data.SqlClient.SqlConnection 노출 기간을 제한하기 때문에 연결 문자열 대신 클래스를 사용합니다. LINQ to SQL System.Data.Linq.DataContext 클래스는 .를 사용하여 SqlConnection인스턴스화할 수 있습니다.
모든 연결 문자열의 수명 및 터치 포인트를 최소화합니다.