약 10 년 동안 저는 SQL Server 데이터 저장소를 사용하여 다양한 사내 데스크톱 클라이언트 응용 프로그램에서 일했습니다. 거의이 프로젝트를 시작하지 않았으며 대부분은 인계 작업입니다.
사방 상수를 보였다 한 가지가이 응용 프로그램은 공통 데이터베이스에에게 권한을 부여하는 데 사용하는 하나의 글로벌 SQL Server 사용자 계정, 그리고 일부 순진한 상황에서 Yes (예)가 사용 된 것이 었 sa내가 일반적으로 수정 가능한 경우에 시도 사용자 계정을 .
응용 프로그램이 데이터베이스에 액세스하는 데 사용하는이 사용자 이름과 암호를 실제로 숨길 수는 없습니다. 이들은 일반적으로 ini또는 config파일에 저장 되거나 실행 파일 자체에 구워 질 수 있습니다. 모든 경우에, 그들은 약간 파고 있으면 사용자에게 표시됩니다. 어떤 경우에는 실제로 config파일을 사용 했지만 암호화했지만, 물론 암호화 키는 실행 파일에 저장해야했습니다. 에서 볼 수 있습니다 config) 파일입니다.
이러한 모든 시스템에는 응용 프로그램에 사용자 인증 시스템이 내장되어 있지만 물론 응용 프로그램 자체를 통해 관리되었으므로 사용자 정보가 데이터베이스에 저장되었습니다. 응용 프로그램은 액세스 수준에 따라 수행 할 수있는 작업을 제한했지만 데이터베이스에 연결하고 임시 쿼리를 실행할 수 있다면 모든 종류의 문제입니다.
이 문제를 해결하기 위해 다른 시스템이 무엇을하는지 알고 싶습니다. 내가 아는 옵션은 다음과 같습니다.
- SQL Server의 보안 메커니즘을 사용하여 사용자 및 역할 목록을 유지 관리하고 데스크톱 응용 프로그램이 T-SQL 쿼리를 통해 사용자를 추가 및 제거하도록합니다.
- 데이터베이스에 직접 연결하는 대신 서버에서 실행되는 일종의 웹 서비스를 작성하고 거기에 인증 로직을 넣습니다. 모든 요청이 보안 유효성 검사를 수행하도록하십시오.
첫 번째 옵션은 데이터베이스에서 사용자를 분리하여 사용자가 더 이상 일류 엔터티가 아니므로 외래 키 관계 등으로 참조 할 수 없기 때문에 추악합니다.
두 번째는 주요 성능 문제와 많은 추가 작업처럼 보이며 NHibernate와 같은 ORM 매퍼를 쉽게 사용할 수는 없습니다 (제 생각에).
누구든지 이것에 경험이 있습니까? 모범 사례?
편집하다
좀 더 생각해 보면 SQL Server 인증이 실제로이 문제를 해결할 수 있습니까? 예를 들어 작업 표를 편집 할 수 있도록 사용자가 작업 표 레코드를 삽입하고 업데이트 할 수 있어야하는 경우 작업 표 세부 정보 테이블의 다른 행에 대한 액세스를 SQL Server가 허용 할 방법이 없으므로 다른 사람의 작업 표를 읽고 쓸 수 있습니다.