문제

애플리케이션 서버가 데이터베이스에 연결할 때 각 응용 프로그램은 항상 동일한 자격 증명을 사용하여 각 데이터베이스에 첨부 할 때 애플리케이션 사용자를 SQL Server의 사용자로 구현하지 않으므로 각 응용 프로그램은 항상 동일한 자격 증명을 사용합니다.

이것은 감사 문제를 나타냅니다. 트리거를 사용하여 모든 업데이트를 저장하고, 삽입하고 삭제하고, 각각 특정 사용자에게 속성을 원합니다. 가능한 해결책 중 하나는 모든 테이블에 "사용자 별 업데이트"열을 추가하고 매번 업데이트하는 것입니다. 이는 모든 테이블의 새 열과 저장된 모든 절차의 새로운 매개 변수를 의미합니다. 또한 소프트 삭제 만 수행 할 수 있음을 의미합니다.

이 대신에 연결 문자열의 응용 프로그램 이름 속성을 사용하고 트리거 내부의 app_name () 속성 으로이 글을 읽습니다. 간단한 앱으로 이것을 테스트했는데 작동하는 것 같습니다 (형식은 다음과 같습니다. app = myapp | user = 100).

너희들을위한 질문은, 이것은 나쁜 생각이고 더 나은 아이디어가 있습니까?

도움이 되었습니까?

해결책

나는 사용한다 context_info를 설정하십시오 이것을 위해. 그것은 당신이 필요로하는 것입니다.

다른 팁

응용 프로그램이로드 될 때마다 사용자 이름을 연결 문자열에 주입해야하지만 확실히 실현 가능한 솔루션처럼 보입니다. 이 솔루션은 연결 문자열이 매번 다르기 때문에 웹 애플리케이션과 함께 작동하지 않을 것입니다. 이는 막대한 연결 풀링 문제로 이어질 수 있습니다.

또 다른 옵션은 hostname/ip 주소 (select host_name ())를 검색하고 대신 저장하는 것입니다.

각 저장 프로 시저에 새 매개 변수가 필요하지는 않습니다. 각 저장 프로 시저 (또는 트리거)를 수정하여 APP_Name/Hostname을 자동으로 삽입 할 수 있습니다.

잠재적 인 단점은 관리 스튜디오를 통해 수행 된 모든 수정에 사용자 정의 APP_Name이 없으며 사용자로서 "Microsoft Management Studio"가 남아 있다는 것입니다.

우리는 응용 프로그램 이름 속성을 사용하여 감사 트리거를 제어하고이를 사용하는 문제를 보지 못했으며 속도 문제를 눈치 채지 못했습니다 (우리의 경우 특정 응용 프로그램에 대해 감사하지 않으므로 측정하기가 어렵습니다. 시간이 걸리지 않는 시간 :))

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top