ورود

View Full Version : خواندن log کاربران



archi
پنج شنبه 05 شهریور 1383, 18:10 عصر
چند تا user برای دیتا بیس تعریف شده می خوام ببینم هر رکوردی توسط کدوم user وارد شده. آیا SP خاصی برای این کار هست؟ آیا اصلا SQL Server این اطلاعات را ذخیره میکند؟ ساعت و زمان آخرین ویرایش هر رکورد را چطور؟

AminSobati
پنج شنبه 05 شهریور 1383, 20:07 عصر
دوست عزیزم،
زمانی که کنترل فعالیت یوزرها به طور محدودی قراره انجام بشه، میتونیم به صورت دستی این اطلاعات رو Log کنیم. مثلا در جدولی که Data Entry انجام میشه، یک فیلد با مقدار پیش فرض CURRENT_USER (برای اینکه بدونیم کدام یوزر این رکورد رو وارد کرده) و یک فیلد از جنس DateTime با مقدار پیش فرض GETDATE (برای ذخیره زمان وارد شدن رکورد) در نظر میگیریم. اگر قصد داریم زمان آخرین عمل Update روی یک رکورد و اینکه کدام یوزر رکورد رو Update کرده نیز ثبت کنیم، براشون فیلدی در نظر میگیریم که توسط Update Trigger این اطلاعات رو به روز میکنیم.
اما اگر قراره کارهای متنوع تر با جزییات بیشتر ثبت بشه، وارد مبحث مفصلی میشیم به اسم Auditing(بازرسی). این روزها در بین بانکهای کشور هم صحبت IT Auditing داغ شده که بخشی از اون Database Auditing یا همین کار مد نظر شما هستش. هر نوع دیتابیسی امکانات خاصی رو برای این کار فراهم میکنه و در SQL Server این قابلیت به اسم Trace عرضه و معرفی شده. Profiler که در بین Iconهای ابزار SQL Server مشاهده میکنید، در حقیقت یک ابزار Visual برای استفاده از امکانات Trace هست و شما میتونین بدون استفاده از Profiler، اقدام به ساختن Trace از داخل Stored Procedure کنین و به عنوان مثال، تمام SELECTهایی که روی یک تیبل خاص اتفاق میافته رو ذخیره کنین. بعدا امکان پردازش این SELECTهای به دام افتاده(یا هر دستور دیگه ای) وجود داره!

موفق باشید،
امین ثباتی MCSD

archi
شنبه 07 شهریور 1383, 07:32 صبح
ممنون ولی مشکلم حل نشد چون پروفایلر خیلی کنده.
آیا SQL server این اطلاعات رو به طور پیش فرض و بدون اجرا کردن پروفایلر در جایی ثبت نمی کنه؟ مثلا ترانزکشن لاگ یا جایی مشابه؟

AminSobati
یک شنبه 08 شهریور 1383, 00:10 صبح
کاملا صحیحه، Profiler از سرعت کمتری برخورداره ولی بنده Trace رو پیشنهاد کردم به جای Profiler. علت عمده اش اینه که در Profiler تمام فعالیتهای Capture شده باید به یک اینترفیس منتقل بشن و این اینترفیس مرتبا Update میشه. اما فراموش نکنید: به ازای هر امکانی، بهایی باید پرداخت. اگر دیتابیس ما از اهمیت خاصی برخورداره تا حدی که باید فعالیت کاربران اون رو زیر نظر بگیریم، پس ارزش داره که کمی از توانایی CPU رو برای این منظور به خدمت بگیریم. ساختن Trace توسط دستورات TSQL بهترین انتخاب برای این هدفه چون اینترفیسی هم در کار نیست.
در مورد Transaction Log، نرم افزار SQL Server تمام فعالیتهای انجام شده توسط کاربران و حتی پروسسهای Background مثل Check Point و Lazy Writer رو ثبت میکنه. الگوریتم کار Transaction Log در SQL Server به Write ahead log file معروفه که تقریبا بالاترین ضریب امنیت در مواقع بروز حوادث روی دیتابیس رو فراهم میکنه و به خوبی دیتابیس بعد از هر اتفاقی احیا(Recover) میشه. ولی این اطلاعات ثبت شده، توسط ما یا دستورات TSQL قابل خواندن نیست. اگر چه با این دستور:


DBCC LOG ('Northwind')

محتویات Log File نمایش داده میشه، اما این همه اطلاعات نیست. در حقیقت Microsoft با این کار، دست بعضی شرکتها که تکنولوژی انجام این کار رو دارن باز گذاشته تا نرم افزارهایی مختص خوانده Log File تهیه کنند.
این آدرس یکی از چندین شرکتی هستش که در رابطه با Auditing و SQL Server فعالیت میکنند:
http://www.apexsql.com/index_lognavigator.htm

موفق باشید..