PDA

View Full Version : چگونه کاری کنم که نشه اطلاعات دیتا بیس رو تعییر داد



4EBRAHIM4
پنج شنبه 14 اسفند 1393, 07:05 صبح
سلام داریم برنامه ای می نویسیم که قرار ادمین یه سری اطلاعات توی دیتا بیس ذخیره کنه و اگه لازم بود اونها رو ویرایش کنه و بعدش یه نسخه دیگه از برنامه رو که قابلیت ویرایش و ثبت رو نداره رو بین کاربران عادی پخش کنیم تا فقط اطلاعات رو مشاهده کنن و حتی بااستفاده از sql server هم نتونن اطلاعات رو ویرایش کنن اولش فکر کردم که اطلاعات رو به صورت رمزی ذخیره کنیم به نظر شما چه راهی بهتره؟

Mofid.m
پنج شنبه 14 اسفند 1393, 07:37 صبح
خوب همنطوری که گفتین شما میتونین برای برنامتون سطح دسترسی تعیین کنین.
موقع نصب اس کیو ال هم میتونین از Username,Password استفاده کنین تا کاربر نتونه Login کنه.
در ضمن من نمیدونم برنامتون چیه و چه کارهایی قراره انجام بده، اما فکر نمیکنم نیاز باشه دو نسخه از یه نرم افزار طراحی بشه، کافی همینطوری که گفتم براش سطح دسترسی تعیین کنین.(تو خود برنامه)
مگر اینکه برنامه ایی که دارین برای User ها طراحی میکنین ساختاری کاملا متفاوت با برنامه admin داشته باشه.
در ضمن تو خود Sql هم فکر کنم بتونین کاربر براش تعیین کنین، بچه هایی که بیشتر تو این زمینه تخصص دارن حتما بهت پیشنهاد میدن

امیر مهرشاد
پنج شنبه 14 اسفند 1393, 13:28 عصر
تریگر مخصوص همینجور کاراست چرا براحتی از امکانات خود sql استفاده نمیکنید ؟

4EBRAHIM4
جمعه 15 اسفند 1393, 17:20 عصر
با sql express میشه یا باید از sql server استفاده کنم؟

SabaSabouhi
جمعه 15 اسفند 1393, 18:08 عصر
با sql express میشه یا باید از sql server استفاده کنم؟

سلام
تو هر دو می‌شه. کافیه برای کلیه‌ی جدول‌ها Trigger بگذاری که اگه با شناسه‌ی خاص و قابل قبول connect نشده باشه همه تغییرات رو Rollback کنی.
اما چرا باید جلوی این کار رو بگیری؟ به دردسرش نمی‌ارزه. اگه کسی دست تو دیتابیس ببره، برای خودش مشکل درست می‌کنه.
پیشنهاد می‌کنم کمی آزادتر برخورد کنی، برای این که جلوی دستکاری کاربر رو بگیری باید کارهایی بکنی که نتیجه‌اش کندی برنامه، مشکلات و باگ‌های
جدید و هم‌چنین پشتیبانی سخت‌تر و پر هزینه‌تر خواهد بود. هزینه‌ای که کاربر نخواهد پرداخت و از جیب شما می‌ره.

صبا صبوحی

golbafan
جمعه 15 اسفند 1393, 19:39 عصر
سلام
میتونید در خود sqlserver یوزرها تون رو ایجاد کنید و براشون پرمیژن تعریف کنید
مثلا یوزری باشه که فقط بتونه دستور select رو انجام بده


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

تعریف یوزر در خود دیتابیس برای دیتای زیاد هم بهینه است چون پروسه هایی مثل تریگرها نیز دیگر انجام نمیشوند
همچنین خوبیش اینه که اگر مستقیما با یوزرش خود دیتابیس رو هم خارج از برنامه شما باز کنه ، بازهم نمیتونه کاری جز select انجام بده

https://msdn.microsoft.com/en-us/library/bb669084(v=vs.110).aspx

4EBRAHIM4
شنبه 16 اسفند 1393, 06:27 صبح
ممنون از دوستان بابت راهنمایی تون
این پروژه در واقع سفرش یه گروهیه که می خوان اطلاعاتی رو تو کامپیوتر ذخیره کنن و بعدش این اطلاعات رو بین بازدید کننده های موزه پخش کنن ولی موعتقدند که بعضی از افراد سعی خواهد داشت که اطلاعات این نرم افزار رو تغییر بدن و بعد تو همون قالب معتبر موزه (که همه بهش اعتماد دارن) بین مردم پخش کنن اولش از من خواستن که براشون یه نرم افزار بنویسم که اطلاعات رو برای خود موزه ذخیره کنن ولی بعد اتمام کار کفتن که می خوان یه همچین کاری هم بکنن
حالا شما اگه جای من بودین چی کار می کردین؟

SabaSabouhi
شنبه 16 اسفند 1393, 09:09 صبح
ممنون از دوستان بابت راهنمایی تون
این پروژه در واقع سفرش یه گروهیه که می خوان اطلاعاتی رو تو کامپیوتر ذخیره کنن و بعدش این اطلاعات رو بین بازدید کننده های موزه پخش کنن ولی موعتقدند که بعضی از افراد سعی خواهد داشت که اطلاعات این نرم افزار رو تغییر بدن و بعد تو همون قالب معتبر موزه (که همه بهش اعتماد دارن) بین مردم پخش کنن اولش از من خواستن که براشون یه نرم افزار بنویسم که اطلاعات رو برای خود موزه ذخیره کنن ولی بعد اتمام کار کفتن که می خوان یه همچین کاری هم بکنن
حالا شما اگه جای من بودین چی کار می کردین؟

سلام
1. مگه اطلاعات موزه ارزش مالی داره که مثلاً من بخوام با عوض کردن اون‌ها رودخانه‌ای از ثروت رو به حساب بانکی خودم واریز کنم؟
2. اگه قراره بابت این کار پول بگیری، اشکالی نداره، ارزشش رو داره که از Trigger استفاده کنی. ( چون پول زحمت خودت رو می‌گیری )

اگر قرار شد از Trigger استفاده کنی، با یه روشی، تنها شناسه‌ی قابل قبول رو Register کن. یعنی باید بدونی که فقط یک UserId
به اسم مثلاً MySqlUserForMyApplicaion حق به روز رسانی تو دیتابیس رو داره.
برای کلیه‌ی جدول‌ها یک Trigger بساز برای Insert, Update, Delete و نام کاربری مربوط به Connection رو بررسی کن. اگه همون MySqlUserForMyApplicaion
بود که هیچ، در غیر این صورت RollBack کن.
به همین راحتی. هیچ خطایی به کاربر نمی‌ده و هیچ چیزی رو هم ثبت نمی‌کنه.
ضمن این که Triggerها رو هم رمز کن که نتونه سر در بیاره داری چیکار می‌کنی. ( با کلید With encryption )

صبا صبوحی