2011-08-22 3 views
2

MVC 응용 프로그램의 사용자가 변경 한 데이터를 감사해야하는 어려움이 있습니다.MVC 및 엔티티 프레임 워크 (sprocs 사용)에서 감사 변경

감사 작성 및 삭제가 쉽습니다.

업데이트가 문제가되는 것으로 확인되었습니다.

이 방법을 찾고 있는데, 문제는 응용 프로그램에서 저장 프로 시저를 사용하여 EF "복합 형식"을 가져 오는 것입니다.

다음은보기 모델을 작성하는 데 사용되며 다시 게시 한 후 컨트롤러는보기에서 다시 전달 된 양식 값으로 작성된 새로운보기 모델을 수신합니다. 따라서 원래 값은 더 이상 사용할 수 없습니다.

변경 사항을 저장할 수 있도록 원래 값을 유지하여 안전하게 업데이트 된 값과 비교할 수있는 제안 사항이 있습니까?

(나는 이것들에 대한 데이터베이스로 돌아갈 수는 있지만, 효율적이지는 않으며, 동일한 호출을 다시 작성하고 프로세스의 해당 부분을 자동화하는 방법을 찾으려면 모든 매개 변수를 유지해야 할 것입니다.

답변

0

INSERTED 및 DELETED 테이블을 사용하여 감사 트리거를 사용해 보셨습니까? 삽입에 대한 저장 프로 시저에서 http://weblogs.asp.net/jgalloway/archive/2008/01/27/adding-simple-trigger-based-auditing-to-your-sql-server-database.aspx

또는

는 XML의 AUTO 사용을 할 수 있습니다 당신을 업데이트, 삭제합니다. 레코드 용 XML을 가져 와서 감사 테이블에 추가하십시오. http://www.a2zdotnet.com/View.aspx?Id=71

당신이 테이블의 복제를 temp_table 만들 수 위의 예에서

BEGIN 
-- these tables would be in your database 
DECLARE @table TABLE(ID INT IDENTITY(1,1) PRIMARY KEY, STR VARCHAR(10), DT DATETIME) 
DECLARE @audit_table TABLE(AuditXML XML, Type VARCHAR(10), Time DATETIME) 
-- this is defined at the top of your stored procedure 
DECLARE @temp_table TABLE(PK INT) 
-- your stored procedure will add an OUTPUT to the temp table 
INSERT INTO @table 
    OUTPUT inserted.ID INTO @temp_table 
    VALUES ('test1', GetDate()), 
      ('test2', GetDate() + 2) 
-- at the end of your stored procedure update your audit table 
INSERT INTO @audit_table 
    VALUES(
     (
      SELECT * 
       FROM @table 
       WHERE ID IN (SELECT PK FROM @temp_table) 
       FOR XML AUTO 
     ), 
     'INSERTION', 
     GETDATE() 
    ) 
-- your audit table will have the record data 
SELECT * FROM @audit_table 
END 

UPDATE은 T-SQL의 예를 삽입하여 OUTPUT 절 사용 (테이블에서 모든 열을 가지고). * INTO @temp_table, 이것은 FOR XML AUTO를 얻기 전에 레코드를 다시 선택하지 않아도됩니다. 또 다른 메모, DELETE를 수행하는 저장 프로 시저의 경우 OUTPUT에서 INSERTED. * 대신 DELETED. *를 사용합니다.

+0

체크 아웃 트리거는 불행히도 허용되지 않습니다 이 기사에서는 감사를 위해이를 사용하는 방법을 자세히 설명하지 않습니다. –

+0

@CD Smith - 예제를 사용하여 답변을 업데이트했습니다. –

0

SQL Server를 사용하는 경우 Change Data Capture (CDC)을 조사하는 것이 좋습니다.

응용 프로그램의 기본 테이블에 대한 변경 감사를위한 기본 솔루션이며 설치가 비교적 간단하므로 유지 관리해야 할 사용자 지정 솔루션이 필요하지 않습니다.

사이트에 지원하는 응용 프로그램이있는 경우 해당 응용 프로그램도 다루어지며 스크립트를 실행하는 DBA에서와 같이 데이터베이스에 직접 적용된 모든 변경 사항을 감사 할 수 있습니다.

asp.net 응용 프로그램이 특정 계정으로 실행되고있을 수 있으므로 추적 정보를 추가하여 변경 한 사용자를 캡처해야 할 수 있습니다. 다행히도 이것은 비교적 간단합니다.XML를 들어이 옵션 같은 소리 때문에 다음 Stack Overflow question 내가이 자신을 lookging 된 ObjectStateManager

0

가이를 발견하여 이에 대한 접근 방법을 다루고, 우리의 환경에서 Tracker for EF