PDA

View Full Version : سوال: ثبت کلیه فعالیت های یک فرد در یک برنامه دیتابیس تحت ویندوز چه راه کاری وجود دارد؟



tarak.4135
پنج شنبه 11 آذر 1400, 04:32 صبح
سلام.یک برنامه ای طراحی کردم که تعداد زیادی جدول داره (جداول به روش کد فرست طراحی شده است) که این جداول در فرم ها قابلیت اضافه ،حذف و ویرایش رو دارد.در هر جدول دو فیلد برای ثبت تاریخ تغییرات و فردی که این تغییرات را اعمال کرده است اضافه کردم.

public string DateRegister { get; set; }
public int UserRegisterID { get; set; }

حال اگر یک رکورد را یوزر 1 از جدول A حذف کند دیگر نمیتوان فهمید که رکورد حذف شده رو چه کسی و در چه زمانی حذف کرده است.آیا راحلی واسه این مشکل وجود دارد؟

برای ساخت یک گزارش کلی از فعالیت هایی که یک فرد انجام داده چه راحلی وجود دارد؟
153605
اگر من این دو فیلدی که گفتم در هر جدول ساختم حذف کنم و یک جدول مشابه جدول بالا بسازم و کلیه تغییرات را در آن ثبت کنم آیا این کار منطقی می باشد؟

336699
پنج شنبه 11 آذر 1400, 12:25 عصر
https://www.tutorialgateway.org/after-delete-triggers-in-sql-server/

tarak.4135
جمعه 12 آذر 1400, 04:19 صبح
https://www.tutorialgateway.org/after-delete-triggers-in-sql-server/

ممنون از پاسخ شما.
من قبلا در مورد تریگرها مطالبی خوندم اما اینکه میشود این را در برنامه هم استفاده کرد اطلاعی ندارم.یعنی آیا میشود کد بنویسیم که بتوانیم اطلاعات تریگر را در برنامه بخوانیم و انها را در جدولی نمایش بدهیم؟
در ضمن من از روش کدفرست در برنامه استفاده کردم.

336699
جمعه 12 آذر 1400, 11:16 صبح
ممنون از پاسخ شما.
من قبلا در مورد تریگرها مطالبی خوندم اما اینکه میشود این را در برنامه هم استفاده کرد اطلاعی ندارم.یعنی آیا میشود کد بنویسیم که بتوانیم اطلاعات تریگر را در برنامه بخوانیم و انها را در جدولی نمایش بدهیم؟
در ضمن من از روش کدفرست در برنامه استفاده کردم.

شما فقط کافیه یک بار تریگر را به دیتابیس اضافه کنید و تمام.

هر مرتبه که اطلاعات حذف و یا ویرایش شوند، تریگر اطلاعات حذف شده را در یک جدول دیگر ثبت میکند.

https://github.com/NickStrupat/EntityFramework.Triggers

https://entityframeworkcore.com/knowledge-base/55336035/is-it-possible-and-how-create-a-trigger-with-entity-framework-core

https://newbedev.com/add-database-trigger-with-entity-framework-code-first-migrations

336699
جمعه 12 آذر 1400, 15:22 عصر
قبل از شروع راه درست را انتخاب کنید. اگر می خواهید کنترل بیشتری بر دستورات و عملیات SQL داشته باشید، ADO.NET یک چارچوب عالی برای کار با آن است. Entity Framework به اندازه کافی قدرتمند است که بتواند خدمات پایگاه داده را با خودکارسازی مکانیسم تولید کد پرس و جوهای SQL اولیه مدیریت کند. شما می توانید هر دو رویکرد را در یک پروژه واحد داشته باشید، یعنی Entity Framework برای عملیات CRUD و ADO.NET برای گزارش هدف و عملیات SQL داده انبوه.

mazoolagh
شنبه 13 آذر 1400, 10:44 صبح
چگونه میتونیم مشخصات کاربر (username/workstation , ...) رو به روتین های تریگر بفرستیم؟
یا در روتین های تریگر چگونه میتونیم کاربر رو تشخیص بدیم؟

چون در پرسش استارتر تاپیک مشخصا آمده که نیاز به این هست که بدونیم کدوم کاربر تغییرات رو اعمال کرده.

336699
شنبه 13 آذر 1400, 12:26 عصر
چگونه میتونیم مشخصات کاربر (username/workstation , ...) رو به روتین های تریگر بفرستیم؟
یا در روتین های تریگر چگونه میتونیم کاربر رو تشخیص بدیم؟

چون در پرسش استارتر تاپیک مشخصا آمده که نیاز به این هست که بدونیم کدوم کاربر تغییرات رو اعمال کرده.

https://www.mssqltips.com/sqlservertip/3090/how-to-find-user-who-ran-drop-or-delete-statements-on-your-sql-server-objects/

mazoolagh
یک شنبه 14 آذر 1400, 12:32 عصر
البته پرسشی رو که مطرح کردم بخاطر کامل شدن مبحث و در نظر گرفتن همه جوانب بود و جستجو رو خودم هم میتونستم انجام بدم!

بنظر میاد استفاده از تریگر برای ساخت audit trail وقتی به مشخصات کاربر هم نیاز باشه (تقریبا همیشه نیاز هست) فقط وقتی جوابگوست که:
1- از windows authentication استفاده شده باشه و اگر sql authentication هست برای هر کاربر برنامه یک یوزر متناظر هم در sql داشته باشیم
2- برنامه دسکتاپ داشته باشیم و نه web app

در غیر اینصورت اگر از تریگر استفاده کنیم هنوز هم به یک audit جداگانه (مشخصات کاربر و خلاصه نوع عملیات و ...) که باید توسط برنامه ساخته بشه نیاز هست.

ebrahim.rayatparvar
جمعه 19 آذر 1400, 09:35 صبح
سلام دوست عزیز . همینطوری که دوستان گفتن راه حل های مختلفی وجود داره که یکی از پر کاربرد های اون از خود SQL Server استفاده کردن هست و یه راه حل دیگه از فریم ورک های آماده در سی شارپ هست ولی برای برنامه های کوچک و متوسط میتونی از ویدیویی که بر حسب سوال شما درست کردم استفاده کنید که شاید به درد شما بخوره :

یوتیوب (https://xip.li/uMHH2i)

tarak.4135
چهارشنبه 24 آذر 1400, 07:23 صبح
ممنون بابت لینک ویدیو.
بسیار جالب و کاربردی بود