2009-05-15 5 views
8

मैंने एक सप्ताह या उससे पहले एसओएफ पर एसक्यूएल डेटा परिवर्तनों की ऑडिट करने के बारे में एक सवाल पूछा। ट्रिगर्स का उपयोग करने के बारे में सामान्य सामान आया, SQL सर्वर 2008 में सीडीसी का भी उल्लेख किया गया।एसक्यूएल सर्वर 2008 डेटा कैप्चर बदलें, किसने बदलाव किया?

मैं आज इसे आजमा रहा हूं और अब तक इतना अच्छा हूं, एक चीज जिसे मैं इसे देख नहीं पा रहा हूं वास्तव में परिवर्तन करने वाले लोगों का ट्रैक रखते हुए। बयान किसने निष्पादित किया?

मुझे यह जानने में दिलचस्पी है कि किसी ने ऑडिटिंग के लिए सीडीसी का उपयोग किया है और आपने ट्रैक किसने किया है इसका ट्रैक रखा है?

+1

क्या मुझे पता है कि आपने इस समस्या को कैसे हल किया? –

उत्तर

1

सीडीसी वास्तव में लेखा परीक्षा के लिए नहीं बनाया गया है। यदि आप ऑडिटिंग क्षमताओं की तलाश में हैं, तो आपको SQL Server Audit का उपयोग करना चाहिए।

+0

यह सख्ती से सच नहीं है। जबकि मैं समझता हूं कि डेटा वेयरहाउसिंग जैसी चीजों के लिए सीडीसी का उपयोग किया जाता है, मैंने पढ़ा है कि मैंने कई लेख पढ़े हैं, सुझाव है कि सीडीसी का उपयोग डेटा परिवर्तनों को ऑडिटिंग करने के लिए ट्रिगर्स का उपयोग करने के लिए असीमित विकल्प के रूप में किया जा सकता है। हालांकि सहमत हैं कि इसे इसके लिए डिजाइन नहीं किया गया था। – MrEdmundo

+2

SQL सर्वर ऑडिट मानों से पहले और बाद में कैप्चर नहीं करता है। यह इस बात को दबाने लगा कि एमएस दो दृष्टिकोण (सीडीसी और एसएसए) को लागू करने की दिक्कत से गुजर चुका है और उनमें से कोई भी पूरी तरह से ऑडिटिंग परिवर्तनों की समस्या को हल नहीं करता है। – tbone

+0

@tbone मुझे लगता है कि वास्तव में तीन विधियां हैं। सीडीसी, लेखा परीक्षा और परिवर्तन ट्रैकिंग। वर्तमान में सीडीसी का उपयोग करके ऑडिट सिस्टम के पहले/बाद में एक अच्छा डिजाइन किया गया है और सरल ट्रिगर्स का मिश्रण है जिसमें उपयोगकर्ता के साथ ऐप द्वारा CONTEXT_INFO पॉप्युलेट किया गया है (क्योंकि यह SQL सर्वर उपयोगकर्ताओं का उपयोग नहीं कर रहा है) और अन्य राज्य जानकारी। – GilesDMiddleton

0

हालांकि आदर्श नहीं है, आम सहमति यह है कि सीडीसी उस पर कब्जा नहीं करेगा जिसने बदलाव किया है, लेकिन हमने बनाया गया/दिनांक और अपडेट किया गया/दिनांक कॉलम लागू किया है जिसका उपयोग यह देखने के लिए किया जा सकता है कि परिवर्तन किसने ट्रिगर किया था। इसके लिए काम करने के लिए, निश्चित रूप से, पंक्ति को अद्यतन करने वाले एसपी या एसक्यूएल कथन को क्रमशः अपडेटरबी/डेट फ़ील्ड्स को निश्चित रूप से suser_name() और getDate() का उपयोग करके सेट करने की आवश्यकता है। मैं मानता हूं कि यह बॉक्स से बाहर होना अच्छा होगा और यह सीडीसी कर रहा है जिसका मतलब कुछ नहीं था, लेकिन मैं भी पारंपरिक ट्रिगर्स का उपयोग करने के बजाय डेटा परिवर्तन एसिंक को ऑडिट करने के लिए सीडीसी का उपयोग करने की कोशिश कर रहा हूं।

+0

हम वर्तमान में ऑडिट ट्रैकिंग के लिए सीडीसी का उपयोग कर रहे हैं और यह वह दृष्टिकोण है जिसके साथ हम गए थे। हमने प्रत्येक तालिका में एक ऑडिट उपयोगकर्ता आईडी कॉलम जोड़ा और उस कॉलम को अपडेट करने के लिए हमारी संग्रहीत प्रक्रियाओं को संशोधित किया। सबसे सुंदर समाधान नहीं हो सकता है, लेकिन यह काम करता है। – MrDustpan

1

श्री एडमंडो, सीडीसी मेरी राय में प्राइम-टाइम के लिए तैयार नहीं है। वर्तमान में सीडीसी सक्षम के साथ विजुअल स्टूडियो से डेटाबेस प्रोजेक्ट को तैनात करने के संबंध में काफी संघर्ष लगता है (यह डीडीएल परिवर्तन पसंद नहीं करता है)। इसके अतिरिक्त, ऐसा लगता है कि सीडीसी में एक अंतर्निहित डेटा एंड-लाइफ क्लीनअप प्रो है, इसलिए यदि आप वास्तव में लंबे समय तक अपने लेखापरीक्षा इतिहास को बनाए रखना चाहते हैं तो यह आपके लिए बुरा समय हो सकता है।

इसके अलावा, मुझे ठीक कर लें मैं गलत समझा गया है, लेकिन ऐसा लगता है एसक्यूएल लेखा परीक्षा की घटनाओं है कि इस तरह विफल रहा है लॉग-इन, DDL परिवर्तन, आदि ट्रैकिंग

बदलें के रूप में एसक्यूएल सर्वर में पाए जाते हैं की अधिकता के विश्लेषण के लिए सक्षम है केवल डीडीएल के लिए है और डीएमएल नहीं है, इसलिए आप वहां भाग्य से बाहर हैं।

यदि आपका इरादा वास्तव में 'पुराने' रिकॉर्ड को कैप्चर करना है जिसे या तो किसी तालिका से अपडेट या हटाया गया था, तो ऐसा लगता है कि अब भी सबसे अच्छा जवाब ऑडिट बनाने के लिए है। टेलनाम और अद्यतन + डीबीओ ट्रिगर पर ट्रिगर हटाएं। यह भी सुनिश्चित करें कि TableName में अंतर्निहित डिफॉल्ट सॉसर के कॉलम, अंतर्निहित डिफॉल्ट गेटेट(), संशोधित, संशोधितडेट शामिल हैं। ALTER तालिका cdc.dbo_MyTable_CT जोड़ें उपयोगकर्ता नाम nvarchar (50) शून्य डिफ़ॉल्ट (SUSER_SNAME())

BTW आप तारीख की जानकारी यह पहले से ही में है, क्योंकि की जरूरत नहीं है:

6

मैं सीधे का उपयोग कर सीडीसी तालिका बदल एलएसएन क्षेत्रों की शुरुआत और अंत।

मेरी एकमात्र समस्या यह है कि मेरे उपयोगकर्ता विंडोज समूह के माध्यम से लॉगिन करते हैं जो उन्हें अधिकारों को संशोधित करने की अनुमति देता है, लेकिन उपयोगकर्ता नाम फ़ील्ड हमेशा मेरा उपयोगकर्ता नाम है, न कि उनका। मुझे इस समस्या के आसपास कोई रास्ता नहीं मिला है।

+0

समय cdc.lsn_time_mapping तालिका – Satfactor

+0

में है यह काम नहीं कर रहा है - जब मैं एक अलग लॉगिन –

0

यहाँ ट्रिगर जो कुछ स्वचालित प्रक्रिया के माध्यम से बनाया जा सकता है या मैन्युअल रूप से जब सीडीसी कि विशिष्ट मेज पर सक्षम किया गया है, इस ट्रिगर समस्या का समाधान होगा है कि जो & जहां परिवर्तन किए गए से :

CREATE TRIGGER TR_TABLENAME_CDC 
ON TABLENAME 
FOR INSERT, UPDATE, DELETE 
AS 
DECLARE   
     @SessionID int, 
     @AppName nvarchar(255), 
     @HostName nvarchar(255), 
     @UserName nvarchar(32) 
BEGIN 
    SELECT @[email protected]@SPID 
    SELECT @AppName=program_name, @HostName=host_name from sys.dm_exec_sessions where session_id = @SessionID 

    IF(@AppName = 'BLAH BLAH' OR @AppName = 'XYZ' OR @AppName = 'ABC') 
    BEGIN 
     SELECT @UserName=login_name from sys.dm_exec_sessions where session_id = @SessionID 
     INSERT INTO UserDetail (SessionID, AppName, HostName, UserName) VALUES (@SessionID, @AppName, @HostName, @UserName) 
    END 
END 
5

डेटा कैप्चर बदलें उपयोगकर्ता को ट्रैक नहीं करता है, मशीन जिसने परिवर्तन किया है, या परिवर्तन का समय है।

सीडीसी के साथ परिवर्तन करने वाले उपयोगकर्ताओं को ट्रैक करने का सबसे अच्छा समाधान उपयोगकर्ताओं के विवरण को स्टोर करने के लिए एक नया क्षेत्र बनाना है, जो प्रत्येक परिवर्तन पर अपडेट किया जाएगा (उस विचार को here मिला)।

एक ही श्रृंखला में एक और लेख मुझे एक थर्ड पार्टी टूल पर ले जाता है जो आउट ऑफ़ द बॉक्स समाधान प्रदान करता है। मैं अभी भी प्रक्रिया का मूल्यांकन कर रहा हूं, लेकिन अब तक यह काफी अच्छा दिखता है। आप this sequel के अंत में एक सुविधाजनक तालिका में ट्रैक की गई जानकारी की तुलना देख सकते हैं।

उम्मीद है कि इससे मदद मिलती है।

+0

से अद्यतन निष्पादित करता हूं तो मुझे कॉलम में "sa" मिल रहा है "आप उपयोगकर्ताओं को स्टोर करने के लिए एक नया फ़ील्ड बना सकते हैं विवरण, जो प्रत्येक परिवर्तन पर अपडेट किया जाएगा "। क्या यह उपरोक्त उत्तर की तरह है? उपयोगकर्ता का विवरण कहां से आएगा? –

संबंधित मुद्दे