PDA

نسخه کامل مشاهده نسخه کامل : Log_User



shotok
29-10-2012, 10:31
بسم الله الرحمن الرحيم با عرض سلام و ادب براي log کردن يوزر در پايگاه داده معمولا چه مواردي رو لحاظ ميکنند؟ با سپاس فراوان

senaps
29-10-2012, 16:44
مواردی رو که در برنامتون لازم میدونین که لاگ کنین!!! و همچنین پوشش دادین...
البته من لاگ پایگاه داده استفاده نمی‌کنم و معمولا یه فایل میذارم.... ولی ورود و خروج ها رو توی یه فایل جدا و با ای‌پی!! گاهی ذخیره کردم....
تغییر نام کاربری و رمز عبور، تایید و رد حساب های کاربران توسط مدیران و ... رو هم همیشه لاگ گرفتم!!!
درخواست ریست کردن پسورد و ورود های اشتباه با رمز های عبور رو برای کاربرهام هم معمولا تو یه فایل جداگونه لوگ میگیرم که مدیر سیستم بتونه به کاربرای سربه هوا یاداوری کنه نکات مورد نیاز رو...

همچنین تغییراتی که در سیستم و نرم افزار انجام میدن رو هم گاهی لوگ گرفتم!!!

میگم کلا بستگی داره که چی باشه هدف برنامه و هدف لوگ گرفتن چی باشه...!!!

shotok
29-10-2012, 20:39
بسم الله الرحمن الرحيم با سلام بينهايت از پاسختون ممنون از اينکه فرموديد در يه فايل لاگ رو انجام ميديد متوجه منظورتون نشدم. اگه امکان داره با جزئيات توضيح بفرمائيد. با سپاس فراوان

senaps
29-10-2012, 22:23
بسم الله الرحمن الرحيم با سلام بينهايت از پاسختون ممنون از اينکه فرموديد در يه فايل لاگ رو انجام ميديد متوجه منظورتون نشدم. اگه امکان داره با جزئيات توضيح بفرمائيد. با سپاس فراوان





سلام....
عرض شود که ذخیره کردن لاگ در دیتابیس، باعث میشه که حجمش سریعا بره بالا!!! در برخی موارد البته لازمه ذخیره در دیتابیس! و خیلی ها اینکارو برای بخش های حساسشون انجام میدن!
ولی ذخیره در فایل، ذخیره کردن لاگ ها در یک فایل متنی هستش! که ما تاریخ(تاریخ و ساعت) انجام کار و نام کاربری که کار رو انجام میده، گاهی اوقات نیازه که ip اش، و کاری که انجام داده رو در یک خط در یک فایل مشخص لاگ ذخیره میکنیم!!! فایل لاگ هم میتونه هر جای سیستم ایجاد بشه...

مثلا، من چون تو اکثر برنامه هام قابلیت تغییر یوزر نیسم و پسورد رو به کاربرم میدم، نام های کاربری و پسوردشون رو در دو جدول جداگانه ذخیره میکنم و خوب، با یه فیلد بولین تشخیص میدم که در حال حاضر کاربر داره از کدوم پسورد و یوزرنیم استفاده میکنه! اینکار باعث میشه بتونم به کاربرم کمک کنم که پسورد های بهتری رو انتخاب بکنه..... این قسمت، یه جور! لوگ گرفتن در دیتابیسه...

ولی ورود و خروج کاربرهام، چون تعدادشون زیاده رو در داخل یک فایل LoginLog ذخیره میکنم! همچنین در صورت نیاز،فایل FaildLogin رو هم دارم که بهم کمک میکنه زیر نظر بگیرم که چه کاربری رمز عبورش رو زیاد اشتباه وارد کرده و یا اینکه چه نام های کاربریی در خطر -- شدن قرار دارن!! ک این کار رو توی یه فایل تکست معمولی ولی با فرمت tbh انجام میدم! اسم فرمت مهم نیست که چی باشه... ولی اگر از txt استفاده کنی، هرکسی میدونه فایل متنیه و ممکنه بخواد دستکاریش بکنه!

اگر ابهامی بود، در خدمتتون هستم....
----------------
هر چی سیستم بزرگ تر میشه، نیاز به لاگ گرفتن ها برای حرفه‌ای تر شدن کار هم بیشتر احساس میشه.... ای‌کاش دوستان دیگه هم تو بحث شرکت بکنن و تجاربشون رو در میون بذارن با ما تا بهتر کار کنیم...
همچنین اگر کسی کلاس مشخصی داره برای این کار، و میتونه به اشتراک بذاره!(من دارم ولی نمیشه به اشتراک گذاشت!!) بذاره یا اینکه با هم یه کلاس بنویسیم که بتونیم ازش استفاده بکنیم برای لاگ گرفتن....

shotok
30-10-2012, 14:34
بسم الله الرحمن الرحيم با سلام بينهايت از پاسختون سپاسگزارم اگه براتون امکان داشت لطفا قدم به قدم مثالي رو پيش ببريد تا همه چي شفاف تر شه. با سپاس

senaps
30-10-2012, 17:46
سلام....
رفیق راستش نگرفتم که کدوم قسمت رو مثال بزنم؟ کد نویسی رو یا جاهایی که لوگ می‌گیریم با مثال برنامه یا چی؟!

shotok
30-10-2012, 19:55
با سلام بينهايت از پيگيريتون ممنون. هر چي که فکر ميکنيد به کار مياد از طرح مسئله که در لاگ گرفتن چه چيزهايي نيازه و به چه جدول ها و فيلدهايي نياز است و اصلا در پايگاه داده لازم است ذخيره شود يا به قول فرمايش شما در فايلي جداگانه. تا روش هاي پياده سازي و غيره. صفرکيلومترم. از لطفتون خيلي ممنون

senaps
31-10-2012, 00:11
سلام....

عرض شود که خوب، چیزایی که نیازه اینه که بدونی کی(who)، کی(when) چه کاری رو انجام داد! بنابراین گرفتن نام کاربری(در برنامه های چند کاربره! و اگر برنامه نام کاربری نداره که لازم نیست!! این قسمت...) زمان و کاری که انجام داده اصل کار ما هستش و معمولا کافیه....
یه خط تو فایل لاگ ها به این صورت در میاد نهایتا:

senaps Added a book in favorites in 10/29/2012 11:59pm
اینجوری میشه فهمید که چکار کردیم.... بنابراین من میتونم حذف از فیوریت ها رو هم ذخیره کنم!
گاهی برنامه‌ی ما تحت شبکه هم هستش.... بنابراین ممکنه یه کارمند با اکانت یکی دیگه بیاد و یه کاری رو بکنه!!! مثلا توی یه بانک یا هرجای دیگه.... میشه ip رو گرفت و ذخیره کرد در کنار متن بالا.... یا فک کنم بشه حتی مک ادرس رو هم ذخیره کرد که اگر بشه هردو رو گرفت بهتره!! من شخصا فقط ip رو ذخیره میکنم که میشه این:
senaps Added a book in favorites in 10/29/2012 11:59pm 192.168.0.5
اینجوری اگر کاری انجام گرفت و خواستیم پی‌گیری بکینم و مثلا کاربر senaps گفت من نبودم، چک می‌کنیم ببینیم چه ip ای اون کار رو انجام داده... که معمولا میتونه کمک کننده و قابل استناد هم باشه!!!
یا مثلا، برای لاگین کردن های اشتباه:
senaps used wrong password in 10/29/2012 11:55pm 192.168.0.5
senaps used wrong password in 10/29/2012 11:56pm 192.168.0.5
senaps used wrong password in 10/29/2012 11:56pm 192.168.0.5
senaps used wrong password in 10/29/2012 11:57pm 192.168.0.5
senaps used wrong password in 10/29/2012 11:57pm 192.168.0.5

و بعد من مدیر سیستم میام چک میکنم می‌بینم که ip کاربر senaps اصلا این نیست.... پس می‌فهمم که یه کارمند دیگه سعی داره وارد اکانت این کاربر بشه... یا ip سیستم خود سیناپسه و من می‌فهمم که این ادم پسوردش رو معمولا فراموش میکنه!! در هر دو حالت، میشه به طرف هشدار داد و بهش راهنمایی داد برای انتخاب و به خاطر سپردن رمز های عبور درست که -- هم نشه!!!


برای پیاده سازی هم من به این شکل کار کردم که:
1- یک کلاس دارم...
2- برای هر کدوم از فایل های لاگی که میخوام درست بکنم، یک یا چند تابع مختلف محاسباتی دارم...
3- موقع گرفتن لاگ، در اخرین مرحله‌ی try (در قسمتی که try catch میذارم برا کدم که خطاها رو بگیره!!) تابع مربوط به اون لاگ رو فرامیخونم که پارامتر ورودیش یه استرینگ با متن دلخواه منه...
4- تابع شامل format ی از استرینگ هستش....string.format که قبلا نام کاربری و تاریخ و ... رو میگیره و در نهایت هم پارامتر ورودی رو و داخل فایل ذخیره میکنه که استریم رایتر میباشه!!

همین کار رو برای لاگ گرفتن دیتابیسی هم میشه انجام داد به این صورت که به جای ذخیره در فایل، هر کدوم از قسمت های مختلف نام کاربری و تاریخ و فعل انجام شده رو به فیلد های متناظرشون در پایگاه داده می‌فرستیم!!(من با لینک شما با هایبرنیت یا هر تکنولوژیی که استفاده میکنین برای ارتباط با دیتابیس حتی Ado.net که معمول ترین در ایرانه!)...

shotok
31-10-2012, 14:28
بسم الله الرحمن الرحيم با سلام از توضيحاتتون بسيار سپاسگزارم ان شاالله در اين زمينه بيشتر تحقيق ميکنم. ممنون

szh_1367
31-10-2012, 16:56
سلام....

عرض شود که خوب، چیزایی که نیازه اینه که بدونی کی(who)، کی(when) چه کاری رو انجام داد! بنابراین گرفتن نام کاربری(در برنامه های چند کاربره! و اگر برنامه نام کاربری نداره که لازم نیست!! این قسمت...) زمان و کاری که انجام داده اصل کار ما هستش و معمولا کافیه....
یه خط تو فایل لاگ ها به این صورت در میاد نهایتا:

senaps Added a book in favorites in 10/29/2012 11:59pm
اینجوری میشه فهمید که چکار کردیم.... بنابراین من میتونم حذف از فیوریت ها رو هم ذخیره کنم!
گاهی برنامه‌ی ما تحت شبکه هم هستش.... بنابراین ممکنه یه کارمند با اکانت یکی دیگه بیاد و یه کاری رو بکنه!!! مثلا توی یه بانک یا هرجای دیگه.... میشه ip رو گرفت و ذخیره کرد در کنار متن بالا.... یا فک کنم بشه حتی مک ادرس رو هم ذخیره کرد که اگر بشه هردو رو گرفت بهتره!! من شخصا فقط ip رو ذخیره میکنم که میشه این:
senaps Added a book in favorites in 10/29/2012 11:59pm 192.168.0.5
اینجوری اگر کاری انجام گرفت و خواستیم پی‌گیری بکینم و مثلا کاربر senaps گفت من نبودم، چک می‌کنیم ببینیم چه ip ای اون کار رو انجام داده... که معمولا میتونه کمک کننده و قابل استناد هم باشه!!!
یا مثلا، برای لاگین کردن های اشتباه:
senaps used wrong password in 10/29/2012 11:55pm 192.168.0.5
senaps used wrong password in 10/29/2012 11:56pm 192.168.0.5
senaps used wrong password in 10/29/2012 11:56pm 192.168.0.5
senaps used wrong password in 10/29/2012 11:57pm 192.168.0.5
senaps used wrong password in 10/29/2012 11:57pm 192.168.0.5

و بعد من مدیر سیستم میام چک میکنم می‌بینم که ip کاربر senaps اصلا این نیست.... پس می‌فهمم که یه کارمند دیگه سعی داره وارد اکانت این کاربر بشه... یا ip سیستم خود سیناپسه و من می‌فهمم که این ادم پسوردش رو معمولا فراموش میکنه!! در هر دو حالت، میشه به طرف هشدار داد و بهش راهنمایی داد برای انتخاب و به خاطر سپردن رمز های عبور درست که -- هم نشه!!!


برای پیاده سازی هم من به این شکل کار کردم که:
1- یک کلاس دارم...
2- برای هر کدوم از فایل های لاگی که میخوام درست بکنم، یک یا چند تابع مختلف محاسباتی دارم...
3- موقع گرفتن لاگ، در اخرین مرحله‌ی try (در قسمتی که try catch میذارم برا کدم که خطاها رو بگیره!!) تابع مربوط به اون لاگ رو فرامیخونم که پارامتر ورودیش یه استرینگ با متن دلخواه منه...
4- تابع شامل format ی از استرینگ هستش....string.format که قبلا نام کاربری و تاریخ و ... رو میگیره و در نهایت هم پارامتر ورودی رو و داخل فایل ذخیره میکنه که استریم رایتر میباشه!!

همین کار رو برای لاگ گرفتن دیتابیسی هم میشه انجام داد به این صورت که به جای ذخیره در فایل، هر کدوم از قسمت های مختلف نام کاربری و تاریخ و فعل انجام شده رو به فیلد های متناظرشون در پایگاه داده می‌فرستیم!!(من با لینک شما با هایبرنیت یا هر تکنولوژیی که استفاده میکنین برای ارتباط با دیتابیس حتی Ado.net که معمول ترین در ایرانه!)...

سلام

هر کسی به طریقی اطلاعات مربوط به سیستمش رو چک و ذخیره می کند و من به نحوه چک کردن ان کار ندارم و بحثم روی ذخیره سازی

اولین موردی در بحث ذخیره سازی با ان روبه رو هستیم حجم فایل نگه دارند اطلاعات است که معمولا داده ها به صورت string ذخیره میشود و نوع داده ای string بیشترین حجم روبه خود اختصاص می دهد

برای اینکه حجم فایل اصلی رو کم کنند از اختصاص دادن یک شماره به خطا استفاده میشود به صورت که مثلا به جای اینکه بنویسند senaps شماره کاربری اون رو ذخره می کنند یا در مثالی دیگر به جای used wrong password in شماره این خطا ذخیره میشود و . . . .

اگر فایل نگه دارنده اطلاعات شما به دست هــکرها بیفتد انها فقط یکسری اعداد و رقم خواهند دید که دارای مفهوم خاصی برای انها نیست

و از دیگر مزیت های کم بودن حجم فایل ذخیره سازی تعداد بیشتری از حالت های رخ داده در سیستم میتوان اشاره کرد

senaps
31-10-2012, 22:10
اگر فایل نگه دارنده اطلاعات شما به دست هــکرها بیفتد انها فقط یکسری اعداد و رقم خواهند دید که دارای مفهوم خاصی برای انها نیست

و از دیگر مزیت های کم بودن حجم فایل ذخیره سازی تعداد بیشتری از حالت های رخ داده در سیستم میتوان اشاره کرد

تا به امروز از این جهت بهش نگاه نکرده بودم!!!
فک کنم باید برم سر وقت کلاس ها و همشون رو ویرایش کنم...!!!

ممنون از یاداوری دوست عزیز خیلی خوب بودش...