چطور بفهمیم چه کسی دستورات DDL را در Instance ما اجرا کرده؟
چگونه می توانیم متوجه شویم چه کسی دستورات DDL (Create ، Drop ، Alter) را در Instance ما اجرا کرده است؟ برای یادگیری این مقاله را مطالعه کنید.
یکی از وظایف مهم هر DBA ای محافظ از آبجکت های موجود در یک Instance می باشد. همانطور که می دانید DDL مخفف Data Definition Language بوده که شامل سه دستور Create، Drop، Alter است.
- دستور Create : از این دستور برای ایجاد یک آبجکت در اسکیوال سرور استفاده می شود. مانند ایجاد یک دیتابیس و یا ایجاد یک جدول و غیره
- دستور Drop : از این دستور برای حذف یک آبجکت در اسکیوال سرور می توانیم استفاده نماییم. به طور مثال جهت حذف یک View و یا حذف یک ایندکس و غیره
- دستور Alter : از این دستور جهت تغییر ساختار یک آبجکت می توانیم استفاده نماییم. به طور مثال تغییر سایز فایل های دیتابیس و تغییر نام فیزیکی نام فایل های دیتابیس و غیره.
از آنجایی که آبجکت های موجود در Instance ما بسیار مهم بوده و باید به خوبی از آنها نگهداری نماییم. لذا باید تدابیری را اتخاذ کنیم تا چنانچه اتفاقی در Instance ما افتاد، سریعا از آن با خبر شویم. به طور مثال میخواهیم متوجه شویم چه کاربری دیتابیس ما را پاک کرده است؟ و یا اینکه چه کسی فلان جدول ما را پاک کرده است؟
برای اینکه متوجه شویم چه کسی آبجکت ما را تغییر داده و یا پاک کرده است ویا آبجکتی را ایجاد کرده است، روش های مختلفی وجود دارد.
روش اول: استفاده از گزارش های خود اسکیوال سرور
برای اینکار کافیست در محیط اسکیوال سرور بر روی Instance خود مطابق شکل زیر کلیک راست نموده و گزینه Reports را کلیک و سپس گزینه Standards Reports را کلیک نماییم و نهایتا بر روی Schema Changes History را کلیک نماییم.
در این صورت پنجره ای مطابق شکل زیر نمایان می گردد. در این گزارش علاوه بر نام کاربری که باعث این تغییر شده است. اطلاعات دیگری را نیز می توان یافت. به طور مثال تاریخ و زمانی که باعث این تغییر شده است یا اینکه از کدام دیتابیس، چه آبجکتی حذف و ایجاد و تغییر یافته است.
روش دوم: ایجاد Audit در اسکیوال سرور
شما می توانید بر روی دیتابیس هایی که مهم هستند Audit قرار دهید تا متوجه تمامی تغییرات بر روی آن دیتابیس گردید. برای این کار ابتدا باید در قسمت Security بر روی گزینه Audit کلیک راست نموده و گزینه New Audit را مطابق شکل زیر کلیک نمایید.
حال در پنجره باز شده ابتدا یک نام گویا و دلخواه به Audit خود اختصاص دهید. سپس مسیر ذخیره شدن فایل ها را مشخص نمایید. در قدم بعدی، قسمت Maximum files را انتخاب نموده و به طور مثال عدد 10 را وارد نمایید. این بدان معناست که حداکثر ده عدد فایل در مسیر که مشخص نمودید، جهت ثبت تغییرات ایجاد شود.
حال برای وارد کردن سایز عدد مربوط به Maximum file ابتدا چک مارک مربوط به unlimited را بردارید و سپس به طور مثال عدد 215 را در قسمت Maximum file وارد نمایید. این عدد به طور پیش فرض به مگابایت می باشد.
در قدم بعدی باید برویم سراغ دیتابیسی که می خواهیم تغییرات آن را ثبت نماییم. مطابق شکل زیر کافیست علامت مثبت دیتابیس SalesDB را باز کرده و به قسمت Security برویم. سپس بر روی گزینه Database Audit Specification کلیک راست زده و گزینه New Database Audit Spesification را کلیک نمایید.
در پنجره باز شده درقسمت Name ابتدا یک نام مناسب وارد می نماییم. سپس در قسمت Audit باید نام Audit ای قبلا تعریف کرده ایم را در این جا تنظیم نماییم. درقدم بعدی باید Action ای که می خواهیم را تنظیم نمایید. به طور مثال ما به دنبال این هستیم که بعدا اگر گزارش گرفتیم متوجه شویم چه کسی دیتابیس ما را پاک کرده است. کافیست در اینجا دستور Delete را انتخاب نماییم.
سپس در قسمت object Class کافیست گزینه DATABASE را انتخاب نمایید.
در قسمت بعدی نام دیتابیس خود را مشخص می نماییم.
و نهایتا در قسمت بعدی باید نام User خود را اضافه می نماییم. لازم به ذکر است که اگر چند کاربر داشته باشیم باید به ازاء تک تک این کاربرها در همین صفحه این تظیمات را انجام دهیم.
در آخر بر روی دکمه OK کلیک کنید. در قدم آخر باید از کوئری زیر جهت خواندن این فایل های مربوط به Audit اقدام نمایید.
SELECT *
FROM sys.fn_get_audit_file ('C:\Temp\*.*', default, default)
روش سوم: استفاده از SQL Server Profiler
این روش اصلا پیشنهاد نمی شود و سیستم شما را خصوصا در محیط های عملیاتی واقعی به شدت کند می کند.
روش چهارم: استفاده از کوئری ها و اسکریپت های آماده
در سایت های معتبر این کوئری ها موجود می باشند. با یک جستجو ساده می توانید این کوئری ها را پیدا کنید.
روش پنجم: استفاده از ابزار ها
با استفاده از یکسری ابزارهای موجود مثل Redgate و یا APEX و غیره می توانید پی به تغییرات ایجاد شده بر روی دیتابیس خود پی ببرید.