2012-04-26 2 views
1

나는 HOST_NAME() 함수를 사용하여 조치를 실행 한 사용자를 검색 한 다음 사용자가 User 테이블에 있는지 확인한 후 Raiserror를 던지는 테이블에서 삭제 트리거를 사용합니다. 작업은 ASP.NET 웹 응용 프로그램에서 수행되며 현재 동적으로 "워크 스테이션 ID"를 연결 문자열에 추가하여 삭제 트리거에 현재 로그인 된 사용자 이름을 갖습니다.
modifiy HOST_NAME() SQL 서버에서

문제는 때때로 SSMS에서 일부 스크립트를 수동으로 실행해야하며 Host_Name()은 SQL Server에 현재 로그인 한 사용자의 이름을 포함하지만이 사용자는 User 테이블에 해당 행이없고 Raiserror가 발생했습니다. 문제는 어떻게 SSMS에서 스크립트를 삭제할 수 있습니까? Rairserror가 없습니까?

+1

분명히하기 : 트리거가 권한이없는 사용자가 스크립트 삭제를 실행할 수 있도록 시스템 기능을 수정 하시겠습니까? 나는 진실로 상실감에 처해있다. 이렇게 할 수있는 방법을 찾으면 나에게 알려 주어 내가 방어 할 방법을 찾을 수있게하십시오. – JAQFrost

+0

명확히하기 :이 질문을 만들었습니다. 동적으로 웹 응용 프로그램의 연결 문자열에 "워크 스테이션 ID"를 추가하여 사용자 이름을 triger에 기록했습니다. 그런 다음 User 테이블의 Host_Name()에 저장된 이름을 확인한 다음 SQL), 때로는 사용자 테이블에 해당 행이없는 계정에서 일부 스크립트를 실행해야합니다. 잠시 휴식을 취한 후 해결책을 찾았습니다. Host_Name()을 확인하고 User 테이블에 사용자 이름 dosen't가 있지만 이름이 xyz 인 경우 User 테이블에서 사용자를 반환하는 자체 함수를 만들었습니다. 네가 내 문제를 이해했으면 좋겠다. –

+0

나는 그렇게 생각한다 : 당신은 정말로 시스템 기능을 바꾸고 싶지 않았다. 스크립트를 실행해야하는 사용자를 반환하는 커스텀 함수로 감싸고 싶었다. 그에 따라 게시물을 편집하고 원했던 것을 얻기 위해 무엇을했는지 대답하십시오. – JAQFrost

답변

0

답변은 매우 간단합니다. Host_Name()을 재정의하는 사용자 지정 함수를 만들고 Host_Name()에 XYZ 이름의 사용자가 포함되어 있으면 사용자 테이블에 해당 행이있는 시스템 사용자의 상수 이름을 반환합니다.

+0

내가 한 가지 제안 할 것은 당신이 완전히 새로운 기능을 만들고 호출하는 것입니다. 시스템 기능을 재정의한다는 것은 문서화 된대로 작동 할 것으로 예상되는 코드를 중단한다는 것을 의미합니다. – JAQFrost

+0

좋은 조언을 주셔서 감사합니다. –