PDA

View Full Version : سوال: چه طوری فعالیت های کابران یک نرم افزار تحت شبکه رو Log کنیم ؟



NasimBamdad
سه شنبه 06 فروردین 1392, 15:36 عصر
سلام و خسته نباشید .

من یک نرم افزار تحت شبکه طراحی کردم و یوزر ها با User , Password های مختلفی به نرم افزار لاگین می شوند . یک Form لاگین دارم که User , Password زده میشه .

حالا سوالم این هست که چه طوری تشخیص بدم کدام یوزر در نرم افزار وارد شده که من کارایی که می کنه رو ثبت کنم . مثلا وقتی یک گزارش یا یک Insert در DB انجام میده رو ثبت کنم در DataBase .


نرم افزار من تحت شبکه است و بیش از 20 یوزر داره و همزمان کار می کنند . به نظر شما راه عملی و علمی و استانداردش چی هست ؟

ممنونم

aghayex
سه شنبه 06 فروردین 1392, 19:43 عصر
دوست عزیز فکر کنم شما با من در حال ساخت دو نرم افزار تحت شبکه هستیم , من در حال باز نویسی یه برنامه هستم که هم نسخه لوکال هست و هم نسخه تحت شبکه , وقتی که برنامه رو ریسورس کردم و اون رو آنالیز کردم اومده بود برا لوگ کاربران یه تیبل قرار داده و اگه کاربر مثلا عمل اینسرت رو انجام داده بود چند پارامتر رو در اون جدول درج می کرد مثلا کد کاربر , تاریخ , زمان , کد رکورد , کد عملی که انجام داده بود
اما اینجا من یه سوء استفاده بکنم و چند سوال برام پیش اومده :
1 ) برای اینکه ما بتونیم از sql نصب شده در سرور استفاده کنیم آیا باید یه یوزر در sql تعریف کنیم و یا به تعداد کاربران خودمون باید یوزر تعریف کنیم ؟
2 ) در این سورس اومده یه کلاس تعریف کرده و نوع اون از soaphttpclientprotocol هست این کلاس قراره چکار کنه مگه برای اینکه ما اطلاعات رو از اس کیو ال سرور واکشی کنیم باید از یه سرویس استفاده کنیم ؟

NasimBamdad
سه شنبه 06 فروردین 1392, 20:11 عصر
دوست عزیز فکر کنم شما با من در حال ساخت دو نرم افزار تحت شبکه هستیم , من در حال باز نویسی یه برنامه هستم که هم نسخه لوکال هست و هم نسخه تحت شبکه , وقتی که برنامه رو ریسورس کردم و اون رو آنالیز کردم اومده بود برا لوگ کاربران یه تیبل قرار داده و اگه کاربر مثلا عمل اینسرت رو انجام داده بود چند پارامتر رو در اون جدول درج می کرد مثلا کد کاربر , تاریخ , زمان , کد رکورد , کد عملی که انجام داده بود
اما اینجا من یه سوء استفاده بکنم و چند سوال برام پیش اومده :
1 ) برای اینکه ما بتونیم از sql نصب شده در سرور استفاده کنیم آیا باید یه یوزر در sql تعریف کنیم و یا به تعداد کاربران خودمون باید یوزر تعریف کنیم ؟
2 ) در این سورس اومده یه کلاس تعریف کرده و نوع اون از soaphttpclientprotocol هست این کلاس قراره چکار کنه مگه برای اینکه ما اطلاعات رو از اس کیو ال سرور واکشی کنیم باید از یه سرویس استفاده کنیم ؟

همین که با ConnectionString موجود بشه به SQL وصل شد کافی هست ، بله باید یک جدول قرار داد و یکسری اطلاعات نظیر ساعت و تاریخ لاگ و یوزری که اون عملیات مذکور رو انجام داده رو درج کنیم .

مشکل من اینه یوزر لاگین شده رو چه طوری تشخیص بدیم ؟

alias136790
سه شنبه 06 فروردین 1392, 23:55 عصر
کاربر dev-dev-dev
تو دیتابیس ، تو جدول مربوط به کاربر یه قسمت بذار برای زمان ورود و یه قسمت برای زمان خروج، با یکم تنظیمات دیگه میتونی بفهمی چه کاربرانی آنلاین هستن
اما این ربطی به چیزی که میخواین نداره

نقل قول(حالا سوالم این هست که چه طوری تشخیص بدم کدام یوزر در نرم افزار وارد شده که من کارایی که می کنه رو ثبت کنم . مثلا وقتی یک گزارش یا یک Insert در DB انجام میده رو ثبت کنم در DataBase ). برای این حالت موقعی که کاربر به برنامه وارد میشه، اطلاعات کاربر( مثلا آیدی کاربر) رو تو برنامه دارین( یا اگه ندارین حتما تو یه متغیر سراسری یا کلاسی چیزی ذخیره کنین) حالا وقتی اطلاعاتشو داشته باشین، خیلی راحت هنگامی که میخواد یه گزارش بگیره، تو دیتابیس ، ثبت میکنین که فلان کاربر با آیدی فلان ، گزارشی انجام داده.

emperor_vb6
چهارشنبه 07 فروردین 1392, 00:55 صبح
کاربر dev-dev-dev
تو دیتابیس ، تو جدول مربوط به کاربر یه قسمت بذار برای زمان ورود و یه قسمت برای زمان خروج، با یکم تنظیمات دیگه میتونی بفهمی چه کاربرانی آنلاین هستن
اما این ربطی به چیزی که میخواین نداره

نقل قول(حالا سوالم این هست که چه طوری تشخیص بدم کدام یوزر در نرم افزار وارد شده که من کارایی که می کنه رو ثبت کنم . مثلا وقتی یک گزارش یا یک Insert در DB انجام میده رو ثبت کنم در DataBase ). برای این حالت موقعی که کاربر به برنامه وارد میشه، اطلاعات کاربر( مثلا آیدی کاربر) رو تو برنامه دارین( یا اگه ندارین حتما تو یه متغیر سراسری یا کلاسی چیزی ذخیره کنین) حالا وقتی اطلاعاتشو داشته باشین، خیلی راحت هنگامی که میخواد یه گزارش بگیره، تو دیتابیس ، ثبت میکنین که فلان کاربر با آیدی فلان ، گزارشی انجام داده.
ايني كه ميگين كاري نداره. مهم اينكه sql بدونه چه كاربري وصل شده ، چون قراره يك تريگر نوشته بشه واسه جداول و تغييرات رو نگه داره . راهي كه شما ميگيد اصولي نيست.

NasimBamdad
چهارشنبه 07 فروردین 1392, 11:46 صبح
من با این تفاسیر می خوام متغییر سراسری تعریف کنم که وقتی کاربری وارد میشه یوزرش رو داشته باشم ، بعدش هر جا می خوام کاربر رو کنترل کنم یک کد INSERT قرار می دم و در قسمت کاربر اون متغییر رو قرار میدم . مثلا وقتی گزارش می گیرند یا هر کار دیگه ای

به نظر شما این کار درست است ؟

NasimBamdad
چهارشنبه 07 فروردین 1392, 12:06 عصر
یک نکته کوچولو که در همین سایت به دست آوردم


اصلا در این زبان متغیر Global مثل سایر زبانها مثلا C++‎,C نداریم و همه چیز داخل کلاس تعریف میشود .
بنظرم بهتر است ابتدا مروری بر مفاهیم اولیه داشته باشید .
فقط یک نکته : اونم اینکه ما متغیرهای Static داریم که وقتی در هر فرمی بشکل public تعریف شود ، میتوان بدون ساختن
آبجکتی از فرم و تنها با نام فرم و عملگر دسترسی (.) (دات) به متغیر مورد نظر دسترسی پیدا کرد .

موفق باشید ./

morteza271
چهارشنبه 07 فروردین 1392, 12:14 عصر
من با این تفاسیر می خوام متغییر سراسری تعریف کنم که وقتی کاربری وارد میشه یوزرش رو داشته باشم ، بعدش هر جا می خوام کاربر رو کنترل کنم یک کد INSERT قرار می دم و در قسمت کاربر اون متغییر رو قرار میدم . مثلا وقتی گزارش می گیرند یا هر کار دیگه ای

به نظر شما این کار درست است ؟

همونطور که دوستمون emperor_vb6 (http://barnamenevis.org/member.php?60374-emperor_vb6) اصلا راه اصولی نیست!!!
چون در این روش شما باید با هر کوئری که به سمت sql میفرستین بعدش هم یه کوئری واسه ثبت log بفرستین که این بهینه نیست و کارایی رو پایین میاره!!!
من خودم هم دنبال همچین چیزی هستم ولی هنوز به جایی نرسیدم...
ولی تا جاییکه میدونم باید همه چی رو به خود sql واگذار کنیم اما چطوری؟؟ خدا میدونه!!!!

NasimBamdad
چهارشنبه 07 فروردین 1392, 12:38 عصر
همونطور که دوستمون emperor_vb6 (http://barnamenevis.org/member.php?60374-emperor_vb6) اصلا راه اصولی نیست!!!
چون در این روش شما باید با هر کوئری که به سمت sql میفرستین بعدش هم یه کوئری واسه ثبت log بفرستین که این بهینه نیست و کارایی رو پایین میاره!!!
من خودم هم دنبال همچین چیزی هستم ولی هنوز به جایی نرسیدم...
ولی تا جاییکه میدونم باید همه چی رو به خود sql واگذار کنیم اما چطوری؟؟ خدا میدونه!!!!

یعنی ما یک چیزی داشته باشیم که SQL بفهمه چه یوزری لاگین شده و هر کاری و تغییری در DB انجام داد رو تشخیص بده و به اون یوزر نسبت بده ؟

خیلی سخته . حالا این روشی که دوستان گفتن با صرف نظر کردن از مبخث بهینه سازی ، چه مشکلات دیگه ای می تونه داشته باشه ؟

NasimBamdad
چهارشنبه 07 فروردین 1392, 12:43 عصر
یک کلاس تعریف کردم به اسم LoggedInUser


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NoorAutomation
{
class LoggedInUser
{
public string LOGUSR;
}
}



حالا در فرم لاگینم در قسمت public partial class یک نمونه سازی از این کلاس به شکل زیر کردم


LoggedInUser LIU = new LoggedInUser();


حالا در باتنی که کد های مربوط به لاگین به برنامه من می باشه کد زیر رو قرار دادم


LIU.LOGUSR = uname.Text;


uname.Text هم تکست باکسی هست که یوزر رو توش می نویسیم .

اما ماسفانه متغییر LOGUSR خالی هست و چیزی درونش نوشته نشده .

چه طوری این مشکل رو حلش کنم که مقدار TextBox ( uname.Text ) که در فرم لاگینم هست رو در این متغییر ذخیره کنم که بعدا ازش استفاده کنم ؟

ممنونم

لطفا مشکلات احتمالی این روش رو بفرمایید که اقدام به حل کردنش کنیم ، حداقل الان مشکل رو بررسی کنیم و کار رو راه بندازیم

morteza271
چهارشنبه 07 فروردین 1392, 14:02 عصر
بهتره که متغیر رو در کلاستون به این صورت تعریف کنید :
public static string LOGUSR;
اینطوری نیازی نیست که ازش نمونه سازی کنید. و راحت تر میتونید ازش استفاده کنید.

این روش مهمترین روشش همون عدم بهینه بودنش هست وگرنه به نظر مشکل دیگه ای نداره.
ولی من بازم توصیه میکنم از این روش استفاده نکنین...
موفق باشید

parsiansoft
چهارشنبه 07 فروردین 1392, 14:10 عصر
سلام و خسته نباشید .

من یک نرم افزار تحت شبکه طراحی کردم و یوزر ها با User , Password های مختلفی به نرم افزار لاگین می شوند . یک Form لاگین دارم که User , Password زده میشه .

حالا سوالم این هست که چه طوری تشخیص بدم کدام یوزر در نرم افزار وارد شده که من کارایی که می کنه رو ثبت کنم . مثلا وقتی یک گزارش یا یک Insert در DB انجام میده رو ثبت کنم در DataBase .


نرم افزار من تحت شبکه است و بیش از 20 یوزر داره و همزمان کار می کنند . به نظر شما راه عملی و علمی و استانداردش چی هست ؟

ممنونم

از خاصيت هاي Log خود Sql Server استفاده كنيد .
يه جستجوي كوچيكي در اين مورد كنيد ،‌

NasimBamdad
چهارشنبه 07 فروردین 1392, 15:22 عصر
ممنونم مرتضی جان ، راستی منم همین کار رو انجام دادم.

البته در Program.CS و الان برای دستیابی بهش از Program.LOGUSR استفده می کنم . مشکلی که نداره ؟

NasimBamdad
چهارشنبه 07 فروردین 1392, 15:24 عصر
از خاصيت هاي Log خود Sql Server استفاده كنيد .
يه جستجوي كوچيكي در اين مورد كنيد ،‌

دوست عزیز میشه یک رفرنسی به ما بدید؟

a.ameri
چهارشنبه 07 فروردین 1392, 15:56 عصر
تشخیص هویت رو به اکتیو بسپارید
و با تریگر عملیاتی که کاربر انجام داده را ثبت کنید

NasimBamdad
چهارشنبه 07 فروردین 1392, 23:44 عصر
تشخیص هویت رو به اکتیو بسپارید
و با تریگر عملیاتی که کاربر انجام داده را ثبت کنید

سر رشته ای در این موارد ندارم . میشه بیشتر راهنمایی کنید یا رفرنسی در اختیار بگذارید ؟ ممنونم !
اکتیو که گفتید منظور ActivX هست ؟ یا چیز خاصی ؟

parsiansoft
پنج شنبه 15 فروردین 1392, 17:34 عصر
دوست عزیز میشه یک رفرنسی به ما بدید؟

بفرمائید :
https://www.google.com/search?q=user+activity+log+in+sql&aq=f&oq=user+activity+log+in+sql&aqs=chrome.0.64j57.23684j0&sourceid=chrome&ie=UTF-8

aloneman2005
پنج شنبه 15 فروردین 1392, 18:20 عصر
از Audit Log استفاده کن .
یه تریگر هم نوشته بودم که وقتی کسی روی جدول کاری انجام می داد آی پی نام کامپیوتر و .. رو توی یه جدول ذخیره می کرد البته فقط برای یک جدول بود برای همه جدول ها باید روی هم آون ها تریگر رو نصب می کردی ولی بهترین راه اینه که از Audit استفاده کنی