PDA

View Full Version : سوال: فهميدن اينکه هر کاربر چه عملياتي بر روي بانک انجام ميدهد



mehrnoosh_al62
چهارشنبه 20 شهریور 1387, 08:31 صبح
ميخوام بدونم چطور ميشه مدير يه سايت عملياتي که هر کاربربر روي بانک انجام ميده مثل حذف،اضافه ، ويرايش رو کنترل کنه و يه گزارش از عمليات هر کاربرداشته باشه...


یعنی فهمیدن اینکه از لحظه ای که کاربر لاگین میشه تا لحظه ای که خارج میشه چه عملیاتی و بر روی چه جداولی از بانک انجام میده و این عملیات رو باید ثبت کنم تا بعد بشه ازش گزارش گرفت... فعلا فقط اضافه و حذف و ویرایشو باید ثبت کنم.
همچنین زمان انجام عملیات هم باید ثبت شه...

parsavb
چهارشنبه 20 شهریور 1387, 08:50 صبح
دوست عزیز این کار با استفاده از بانکهای اطلاعاتی و نرم افزارهای مربوطه به راحتی قابل کنترل هستش و برای اینکار بهتره قدری در مورد بانک های اطلاعاتی تحقیق کنید

mehrnoosh_al62
چهارشنبه 20 شهریور 1387, 08:56 صبح
ممنون از جوابتون . من باید یه برنامه با vb.net بنویسم که همچین امکانی داشته باشه. چطور میتونم از داخل برنامه این کار رو بکنم؟ اصلا چطور میشه فهمید کاربری که وارد سیستم شده چه کاری بر روی بانک انجام داده؟

eli_joon
چهارشنبه 20 شهریور 1387, 09:38 صبح
منم دقیقا مشکل مهرنوش رو دارم , یعنی میخوام روی کاربران مدیریت کامل داشته باشم از طریق نرم افزار(vb.net 2005) لطفا راهنمایی کنید ....

parsavb
چهارشنبه 20 شهریور 1387, 09:53 صبح
شما می تونید جدولی رو توبانکتون طراحی کنید تا هر کاربر در هنگام انجام هر کاری برنامه شما یک رکورد در اون جدول ایجاد کنه و نوع عمل انجام شده و زمان اون رو ثبت کنه تا در صورت انجام موارد خاص قابل پیگیری باشد

mehrnoosh_al62
چهارشنبه 20 شهریور 1387, 09:57 صبح
ممنون از جواب. ولی مشکل منم اینه که چطور تشخیص بدم که کاربر در اون زمان خاص چه کاری بر روی بانک انجام میده؟

eli_joon
چهارشنبه 20 شهریور 1387, 10:03 صبح
از راهنماییتون ممنونم , فکر میکنم اگه برای هر عملیاتی یه کد خاص تعریف بشه و هر کاربر هم کد خاصی داشته باشه مشکل کاملا حل بشه

mehrnoosh_al62
چهارشنبه 20 شهریور 1387, 10:07 صبح
ببینید برنامه ای که باید بنویسم یه برنامه کلیه. چطور اینکه میگید برای هر برنامه یه کد خاص تعریف شه و همینطور برای کاربر، چطور میخواید اونهارو به هم نسبت بدید؟
فکر میکنم بهتره این کار رو بر اساس زمان ورود و خروج کاربر انجام بدم.
اینطوری که شما میگید باید تو کل برنامم مثلا هر جا یه Button حذف دارم این کدو تعریف کنم.
فکر نمیکنم به این سادگی باشه...

parsavb
چهارشنبه 20 شهریور 1387, 10:13 صبح
البته این موضوع بستگی به سلیقه شما داره و شما می تونید با تعریف یک جدول دیگه این کار رو انجام بدید به این صورت که حتی فرمهائی رو که کاربر شما می تونه وارد بشه رو هم مشخص کنید و یا همچنین کارهائی رو که مجاز به انجام اون هستشض رو هم از قبل تعیین کنید و جدول قبلی رو هم که گفتم هم برای تکمیل این جدول و مدیریت خودتون رو در کنار این جدول استفاده کنید

eli_joon
چهارشنبه 20 شهریور 1387, 10:17 صبح
من نگفتم برای هر برنامه کد خاصی تعریف بشه , گفتم برای هر عملیات (ثبت,اصلاح,حذف,گزارشگیری و ...) .
واضحتر بگم مثلا برای عمل ثبت کد 1 و برای عمل اصلاح کد 2 و همینطور تا آخر . اینطوری در جدول بانک اطلاعاتی این اطلاعات ذخیره میشه : 1(کد کاربر) و 1(عمل ثبت) و 13860620(تاریخ) و 1100(ساعت)
امیدوارم منظورم درست بیان کرده باشم

parsavb
چهارشنبه 20 شهریور 1387, 10:27 صبح
دوست عزیز نیازی به تعریف این مورد در همه جای برنامه نیست بلکه روتینی رو تویه ماژول تعریف کنید که کلیه اعمال مورد نظرتون توی اون تعریف شده باشه و در هنگام هر عمل خاصی فراخوانی بشه به این ترتیب تو کدتون هم خلاصه نویسی می شه

mehrnoosh_al62
چهارشنبه 20 شهریور 1387, 10:29 صبح
بله من متوجه منظورتون شدم. ولی ظاهرا شما متوجه منظورم نشدین.
این پیشنهادی که شما دادین پیشناهاد خوبیه اما تو مرحله بعد از تشخیص میشه ازش استفاده کرد. من هنوز نمیدونم چطور نوع عملیات کاربر رو تشخیص بدم.
ببینید بذارید این طور بگم:
کاربر ساعت x وارد سیستم شد و ساعت y خارج شد. حالا من باید کلیه عملیاتی که کاربر دراین زمان روی بانک انجام داده مثل حذف و اضافه و ویرایش رو با ذکر نام جدول و حتی رکوردی که تغییر کرده رو ثبت کنم.
حالا مشکل اینجاست که این عملیات بر روی بانک از کجا باید تشخیص داده شه؟

parsavb
چهارشنبه 20 شهریور 1387, 10:36 صبح
ببینید شما بالاخره دستورات خودتون برای ثبت تو دیتابیس رو که می خواهید خودتون بنویسید و همین برای تشخیص کافیه

mehrnoosh_al62
چهارشنبه 20 شهریور 1387, 10:41 صبح
این جمله ای که گفتید یعنی چی ؟؟؟!!! من دارم یه قسمتی از یه برنامه رو مینویسم و از جزییات برنامه مطلع نیستم. برنامم بایدبه شکل کلی باشه.

Dariuosh
پنج شنبه 21 شهریور 1387, 05:40 صبح
فک کنم اگه سوالتون رو تو تالاز Sql Server مطرح بکنيد زودتر و بهتر نتيجه ميگيريد
در هر صورت شما برا اين کار احتياج ندارين تو کد چيزي رو تغيير بدين شما از طريق خود Sql Server ميتونيد به راحتي اين مطلب رو پوشش بديد
اول :يه جدول براي نگهداري تراکنش کاربران
دوم : ايجاد Trigger بر روي جداولي که قصد ثبت تراکنش اونها رو داريد
سوم : استفاده از Viewهاي ثابت در ديتابيس مثلاً با استفاده از sys.sysprocesses ميتونيد وضعيت کانکشن ها (نام کامپيوتر ، نام کاربري ويندوز و ... ) رو پيدا کنيد
نکته : SPID@@ شماره کانکشني رو که باهاش در فعل حال متصل هستين رو برميگزدونه

mehrnoosh_al62
پنج شنبه 21 شهریور 1387, 08:35 صبح
ممنون از جوابتون تو تالار sql مطرح کردم ولی جواب نگرفتم.
چرا انقدر جواب های که میدید کلیه؟؟
اول: من چطور به تراکنش هر کاربر پی ببرم ؟
دوم : واسه دیتا بیسی که مثلا 100 تا جدول داره باید 100 تا تریگر ایجاد کنم ؟
سوم : از sql2000 استفاده میکنم در ضمن من به نام کاربری و نام کامپیوتر نیاز ندارم

از نام کاربری توبرنامه خودم استفاده میکنم که خوب فعلا مهم نیست.
مهم اینه که من تشخیص بدم از لحظه ورود هر کاربر به برنامه تا زمان خروج چه تغییراتی بر روی بانک ایجاد شده

parsavb
پنج شنبه 21 شهریور 1387, 09:13 صبح
ببینید دلیل اینکه جوابهائی که می گیرید کلی هستش اینه که سوالهای شما کلی مطرح میشه
ببینید تشخیص اعمال کاربر که کاری نداره در صورتی که شما کلیه اعمالی که کاربر انجام خواهد داد رو پیش بینی کنید که این خود از اصول برنامه نویسی هست. نه اینکه بعد از انجام عملی دنبال نوع آن باشید.

mehrnoosh_al62
پنج شنبه 21 شهریور 1387, 09:38 صبح
ببینید دلیل اینکه جوابهائی که می گیرید کلی هستش اینه که سوالهای شما کلی مطرح میشه
ببینید تشخیص اعمال کاربر که کاری نداره در صورتی که شما کلیه اعمالی که کاربر انجام خواهد داد رو پیش بینی کنید که این خود از اصول برنامه نویسی هست. نه اینکه بعد از انجام عملی دنبال نوع آن باشید.

خوب میشه بگید چطور عملی که کاربر هنوز انجام نداده رو پیش بینی کنم؟؟؟ میشه یه مثال بزنید؟

Dariuosh
پنج شنبه 21 شهریور 1387, 10:26 صبح
چرا انقدر جواب های که میدید کلیه؟؟
خوب اينجا بايد به هم سرخط بديم !!
________

1- کاربر که تائين نميکنه با ديتابیس چي کار ميخواد بکنه ! اين شمائيد که دارين کد ميکنيد
2- برنامه شما به غير از Select با ديتابيس 3تا کار بيشتر نميکنه که Insert ، Update يا Delete که اصلاً کاره Trigger (http://msdn.microsoft.com/en-us/library/ms189799.aspx) اعمال يه سري دستورات بعد از اين دستوراته

دوم : واسه دیتا بیسی که مثلا 100 تا جدول داره باید 100 تا تریگر ایجاد کنم ؟
3- اصولاً Log گرفتن هميشه جزوه سرويس هائي هستش که تو همه برنامه ها به صورت دلخواه فعال ميشه چون باره زيادي رو سیستم ميزاره ، در واقع کاره اونو 2برابر يا حتي بيشتر ميکنه و احتماله کندي رو بالا ميبره
4- دليلي نداره شما رو همه جدولاتون اين روالو راه بندازين چون عملاً چندتا جدول پر کاربرد و مهم که توش تغييرات صورت بگيره بيشتر ندارين
5- به همون مقدار که برنامه و نوع کد کردن اون مهمه طراحي ديتابيس مهمتره ، منظورم از اين حرف اينه که فکر نکنيد 2 تا جدول درست کردين تموم شد ، اين جداول برايه اين که بهينه کار کنن بايد بنا کارائيشون تنظيماته مختلفي بشن
** البته تو سيستمهايه کوچيک و تک منظوره ايي که اکثراً مينويسيم تنظيمات پايه کفايت ميکنه **

saman_itc
پنج شنبه 21 شهریور 1387, 15:15 عصر
در Insert Trigger متغیر Inserted.Id مقدار Id را در رکورد اضافه شده برمیگرداند
در Update Trigger متغیر Updated.Id مقدار Id را در رکورد تغییر یافته برمیگرداند

maalimom
پنج شنبه 21 شهریور 1387, 23:13 عصر
سلام دوست عزیز
برای اینکه بتونی ثبت کلیه وقایع اتفاق افتاده در هنگام اتصال کاربر تا پایان آن می تونی از پایگاه داده استفاده کنی
برای این کار احتیاج به یه تحلیل کوچیک هست این کار رو انجام بده
اگر هم راهمنایی بیشتر خواستی
maalimom@yahoo.com

maalimom
پنج شنبه 21 شهریور 1387, 23:32 عصر
کد کاربر
کد کار انجام شده
تاریخ
ساعت
توضیحات
حداقل فیلدهایی رو که شما باید تو یه جدول در پایگاه خودتون داشته باشید

برای راحتی کار می تونید یک متد استاتیک در یک کلاس ایجاد کنید فقط زیر متدهای حذف آپدیت اینزرت
لود کاربر خروج از نرم افزار فراخانی نمایید
موفق باشی
همون طور گه گفته بودید به این فروم سر زدم
maalimom@yahoo.com

xxmohammad
چهارشنبه 27 شهریور 1387, 14:54 عصر
ميخوام بدونم چطور ميشه مدير يه سايت عملياتي که هر کاربربر روي بانک انجام ميده مثل حذف،اضافه ، ويرايش رو کنترل کنه و يه گزارش از عمليات هر کاربرداشته باشه...


یعنی فهمیدن اینکه از لحظه ای که کاربر لاگین میشه تا لحظه ای که خارج میشه چه عملیاتی و بر روی چه جداولی از بانک انجام میده و این عملیات رو باید ثبت کنم تا بعد بشه ازش گزارش گرفت... فعلا فقط اضافه و حذف و ویرایشو باید ثبت کنم.
همچنین زمان انجام عملیات هم باید ثبت شه...



دوست عزیز از طریق کد نویسی بلد نیستم ولی خود SQL یک نرم افزار همراش نصب می شه به اسم Profiler . اگه یه کم باهاش ور بری می تونی راحت ازش سر در بیاری. همه فعالیتها روی سرور رو بلادرنگ نمایش میده .
احتمالا بتونی یک Service بنویسی که اتصالات به سرور رو مانیتور کنه و اونها رو به صورت بلادرنگ مثل همین برنامه که گفتم توی DataGridView نمایش بده . یکم جستجو کنی کدهاشو میتونی پیدا کنی .
یه سری هم به آدرس زیر بزنی یه چیزایی دربارش یاد می گیری :
http://www.codeproject.com/KB/vb/DBstressUtil.aspx