मार्टिन ने पहले ही सर्वश्रेष्ठ एवेन्यू की ओर इशारा किया, प्रशासनिक ऑडिट ट्रेस जो आमतौर पर है (जब तक कि यह स्पष्ट रूप से अक्षम नहीं किया गया है)। यदि आपको व्यवस्थापक ट्रेस में जानकारी नहीं मिली है (यह अक्षम था या इसे पुनर्नवीनीकरण किया गया था) तो आप लॉग बैकअप से जानकारी प्राप्त कर सकते हैं। चूंकि एक उत्पादन डीबी है, मुझे लगता है कि आपके पास एक नियमित बैकअप चक्र है, आवधिक पूर्ण बैकअप और लॉग बैकअप के साथ। आपको एक अलग सर्वर पर, घटना के समय के आसपास डेटाबेस को पुनर्स्थापित करने की आवश्यकता होगी, ताकि डीडीएल वर्तमान बहाल लॉग में हो। फिर fn_dblog()
लॉग का उपयोग करने और निरीक्षण करने का एक सरल मामला है ।
एक तरीका लेन-देन शुरू संचालन से जाना है:
select [Begin Time], [Transaction Name], [Transaction SID], *
from fn_dblog(null, null)
where Operation = 'LOP_BEGIN_XACT';
यदि ALTER VIEW
एक स्वसंपूर्ण लेन-देन में जारी किया गया था (यानी BEGIN TRANSACTION
/ से घिरा नहीं है COMMIT
) तो यह नाम से एक लेनदेन शुरू करेगा CreatProc transaction
। इसके लिए देखो, और [Transaction SID]
लॉगिन SID आप चाहते हैं।
एक अन्य संभावना यह है कि उस लेन-देन की तलाश करें जो आपके इच्छित दृश्य पर SCH_M का अधिग्रहण करता है:
select [Lock Information], *
from fn_dblog(null, null)
where [Lock Information] like '%' + cast(object_id('...') as varchar(10))+'%'
and [Lock Information] like '%LOCK_SCH_M%'
go
ध्यान दें कि यदि DROP द्वारा दृश्य परिवर्तित किया गया था, तो CREATE द्वारा ऑब्जेक्ट आईडी की संभावना बदल दी गई थी, लेकिन कम से कम आपको वह लेन-देन मिलेगा जो पिछली बार CREATE किया था (पुनर्स्थापना db में दृश्य की वर्तमान ऑब्जेक्ट आईडी)। लेन-देन आईडी के साथ आप वापस जाते हैं और आरंभ लेनदेन जानकारी प्राप्त करते हैं:
select [Begin Time], [Transaction Name], [Transaction SID], *
from fn_dblog(null, null)
where [Transaction ID] = '...'
and Operation = 'LOP_BEGIN_XACT';
[लेनदेन SID], फिर से, आपका लड़का है। SUSER_SNAME
लॉगिन SID से लॉगिन नाम को पुनः प्राप्त करने के लिए उपयोग करें । यदि SID 0x01 है, तो इसका मतलब है कि लॉगिन था sa
, जिसका अर्थ है कि कोई भी व्यक्ति जो sa
पासवर्ड जानता है वह कर सकता था।