혼합 모드 인증을 사용하는 Microsoft SQL Server 2008 Express 인스턴스에 MyDB라는 데이터베이스가 있습니다. 현재 MyDB 데이터베이스를 사용하는 응용 프로그램은 현재 사용자의 Windows 자격 증명을 사용하여 Windows 인증을 사용하여 연결합니다. 이 로그인은 '공용'서버 역할의 구성원이며 사용자가 MyDB 데이터베이스에 매핑되어 있습니다. 이 데이터베이스 사용자는 db_datareader 및 db_datawriter 데이터베이스 역할의 구성원입니다.로그온 트리거 내에서 실행 컨텍스트 전환
응용 프로그램이 연결되면 MyDB에서 읽고 쓸 수있는 권한이 있습니다. 그러나 다른 응용 프로그램이 동일한 로그인을 사용하여 연결하면 읽을 수 있어야합니다.
내 생각에 연결 문자열의 응용 프로그램 이름 부분을 검사하고 실행 컨텍스트를 전환해야하는지 여부를 결정하는 로그온 트리거를 만들 것이라고 생각했습니다. (레코드의 경우 연결 문자열의 응용 프로그램 이름에 의존하는 것이 안전하지 않으며 회피하기가 매우 쉽다는 것을 알고 있습니다. 여기에있는 목적은 데이터베이스를 보호하는 것이 아니라 사용자가 데이터베이스를 보호하지 못하게하는 것입니다.
db_datareader의 구성원 인 MyDB 데이터베이스의 사용자에게 매핑 된 'myapp_reader'라는 새 로그인을 만들었습니다.
CREATE TRIGGER CheckUser
ON ALL SERVER
AFTER LOGON AS
BEGIN
IF APP_NAME() <> 'My Application Name'
BEGIN
EXECUTE AS LOGIN = 'myapp_reader' WITH NO REVERT
END
END
그러나 불행하게도, 그것은 작동하지 않습니다
나는 다음 TSQL로 로그온 트리거를 작성했습니다. 내가 연결하려고하면 나는 다음과 같은 오류 얻을 :Logon failed for login 'MyComputer\MyWindowsUsername' due to trigger execution.
Changed database context to 'master'.
Changed language setting to us_english. (Microsoft SQL Server, Error: 17892)
을 내가 오류 로그에서 볼 때 그것은 말합니다 :
는Error: 15590, Severity: 16, State: 1.
Can only use the 'No Revert' or 'Cookie' options with the 'Execute As' statement at the adhoc level.
Error: 17892, Severity: 20, State: 1.
Logon failed for login 'MyComputer\MyWindowsUsername' due to trigger execution. [CLIENT: xxx.xxx.xxx.xxx]
이 오류는 내가 영구적으로 로그온 트리거의 실행 컨텍스트를 변경할 수 없습니다 의미 하는가 ?
음,이 방법을 추구 할 것입니다. 감사! –