PDA

View Full Version : طراحي جداول سطح دسترسي براي كاربران و جداول با تعداد بالا



kahroba77
دوشنبه 06 تیر 1390, 12:09 عصر
با سلام
اول بگم بعد جستجو اين تاپيكو زدم.
آقا من يه سري جداول دارم حدود400 تا و حدود 300 تا كاربر هم دارم .
ميخوام واسه اين تعداد جداول سطح دسترسي تعيين كنم كه كاربران وقتي وارد برنامه شدن فقط كارهايي كه مجازن انجام بدن و قابليت هاي زير رو هم داشته باشه :

1-هر كاربر مجاز باشه به جداولي كه مجازه دسترسي داشته باشه.
2- هر كاربر فقط بتونه كارهايي كه مجاز تو هر جدول انجام بده = Insert , delete و update
3-هر كاربر فقط بتونه فيلد هايي رو كه مجازه تغيير بده

واسه اين كار :
يه جدول كاربران دارم ( كد كابر ، نام كاربر ، رمز عبور ، كد پرسنلي )
يه جدول امكانات موجود در برنامه دارم ( كد امكان ، نام جدول به فارسي ، نام جدول به انگليسي )
يه جدول دارم مجوز ها ( كد كاربر ، كد امكان ، مجوزهاي ويرايشي)
( مجوز هاي ويرايشي ميتونه اين مقدارو داشته باشه=101= يعني اضافه بتونه كنه و نتونه حذف كنه و بتونه ويرايش كنه )

حالا اولا اين كاري كه كردم روش خوبيه ؟
دوماً واسه فيلد هام چه كار كنم ؟
سومآ تعداد ركورد هاي جدول مجوزهام حدود 50,000 تا ركورد ميشه ! حالا موقع Login هر دفعه اين جدول بايد واكشي بشه سرعتو نمياره پايين ؟ و راه كاري واسه كم شدن ركورد ها به نظرتون ميرسه ؟

Galawij
دوشنبه 06 تیر 1390, 13:49 عصر
سلام
حتماً باید سطح دسترسی را تا حد فیلد جلو ببری؟

kahroba77
دوشنبه 06 تیر 1390, 18:28 عصر
حالا اگه تا حد فيلد هم نشه ميتونم تو طراحي اعمالش كنم اما اگه بشه بهتره.
ميخوام بدونم روش بهتري هم هست ؟ و چه راهكارهايي وجود داره ؟
آقاي صادقيان شما نظري نداريد ؟

حمیدرضاصادقیان
سه شنبه 07 تیر 1390, 10:14 صبح
سلام.
ببینید برای پیاده سازی این نوع سطح دسترسی دوکار میتوانید انجام دهید.
یکی اینکه بیاید در داخل خود SQL Server از Security اون استفاده کنید که دیگه نیازی به این جداول نیست.
یکی اینکه به همین روش برید جلو.
فقط در روش شما برای پیاده سازی فیلدها به نظرم باید این طوری جداولتون اصلاح بشه.

جدول کاربر( کد کاربر- نام کاربر - رمزو...)
جداول( کد جدول - نام جدول و...)
جدول فیلدها( کد جدول - کد فیلد و نام فیلد)
جدول دسترسی ها( کد جدول - کد فیلد - کد کاربر - اصلاح - اضافه - حذف)

حالا هرکاربری که میخواد وارد بشه نیاز نیست تمام اطلاعات جداول دسترسی ها واکشی بشه. در هر فرمی که وارد بشه فقط اطلاعات مربوط به اون فرم یا جدول رو واکشی میکنید و دسترسی ها رو مشخص میکنید. پس تاثیری روی سرعت کار شما نخواهد داشت.

kahroba77
سه شنبه 07 تیر 1390, 10:52 صبح
به ازاء هر فيلد توي جدول دسترسي بايد ركورد ثبت كرد ديگه ، درسته ؟ حالا اگه تعداد ركورد هام زياد بشه ( خيلي زياد ) تو SQL سرعت پايين نمياد ؟

يه امكان ديگه هم ميخوام داخل برنامم بزارم مثلا من 50 تا جدول دارم كه بايد روي ركورد هاي اين جداول هم دسترسي بذارم ، بعنوان مثال يكسري از كاربران در جدول1 روي ركوردي خاص دسترسي داشته باشن يا نداشته باشن . چجوري اين مسئله رو بنظر شما پياده سازي كنم ؟

Galawij
سه شنبه 07 تیر 1390, 11:06 صبح
جدول کاربر( کد کاربر- نام کاربر - رمزو...)
جداول( کد جدول - نام جدول و...)
جدول فیلدها( کد جدول - کد فیلد و نام فیلد)
جدول دسترسی ها( کد جدول - کد فیلد - کد کاربر - اصلاح - اضافه - حذف)

البته تو جدول دسترسی دیگه کد جدول نمی خوایم چون از طریق جدول فیلد ها نام جدول به دست میاد.

Galawij
سه شنبه 07 تیر 1390, 11:37 صبح
فکر می کنم تحلیل سوال اولتون به این صورت است:

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

حمیدرضاصادقیان
سه شنبه 07 تیر 1390, 11:45 صبح
من به این خاطر در جدول دسترسی کد جدول رو گذاشتم چون ممکنه برای هر جدول ما کد فیلد رو از یک شروع کنیم. در این موقع در جدول دسترسی ها به مشکل میخوریم.
میتوانیم در جدول فیلدها ترکیب فیلد کد جدول و کد فیلد رو یک فیلد یونیک بگیریم و اونو در جدول دسترسی استفاده کنیم.


يه امكان ديگه هم ميخوام داخل برنامم بزارم مثلا من 50 تا جدول دارم كه بايد روي ركورد هاي اين جداول هم دسترسي بذارم ، بعنوان مثال يكسري از كاربران در جدول1 روي ركوردي خاص دسترسي داشته باشن يا نداشته باشن . چجوري اين مسئله رو بنظر شما پياده سازي كنم ؟

برای اینکار در نسخه 2008 شما میتوانید به هر ردیف دسترسی بدید.
این لینک (http://technet.microsoft.com/en-us/library/cc966395.aspx) به شما کمک خواهد کرد.

Galawij
سه شنبه 07 تیر 1390, 13:35 عصر
البته اگر بتونید کاربران(بعنوان مثال مدیر، کاربر عادی ) و نوع فیلدها ( به عنوان مثال کلیدهای اصلی، کلیدهای خارجی ، فیلدهای توضیحات ) را هم گروه بندی کنید توی کاهش تعداد رکوردها در جدول سطوح دسترسی می تونه خیلی مأثر باشه.

kahroba77
سه شنبه 07 تیر 1390, 13:54 عصر
جناب galavez و چه لزومي داره جدول انواع سطوح دسترسي داشته باشيم ؟ توي خود جدول سطوح دسترسی اگه پياده سازي بشه چه مشكلي وجود داره ؟

من سرعت واسم مهمه ، اين روش تو اين برنامه با اين حجم جواب ميده ؟

جناب صادقيان من فعلا نميخوام درگير امكانات SQL بشم. فعلاً ميخوام توي خود بانك پيادش كنم. روشي كه بشه تو خود بانك پيادش كرد وجود داره ؟

خودم نظرم اينه : جدول1 ( شماره ركورد - فيلد1 - فيلد2 - فيلد3 )
جدول دسترسي ركورد : ( كد جدول - شماره ركورد - كد كاربر غير مجاز )

Galawij
چهارشنبه 08 تیر 1390, 08:13 صبح
جناب galavez و چه لزومي داره جدول انواع سطوح دسترسي داشته باشيم ؟ توي خود جدول سطوح دسترسی اگه پياده سازي بشه چه مشكلي وجود داره ؟

من سرعت واسم مهمه ، اين روش تو اين برنامه با اين حجم جواب ميده ؟

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

kahroba77
چهارشنبه 08 تیر 1390, 10:39 صبح
این جدول از افزونگی زیادی که در جدول سطوح دسترسی به وجود می یاد جلوگیری می کنه. شما اگه این جدول را در نظر نگیرید باید سه فیلد اضافه را(حذف، اضافه و به روز رسانی ) در جدول سطوح هر بار تکرار کنید.ولی از طریق این جدول فقط یک کلید خارجی دارید.
موفق باشید%

ممنون از توجه تون

باز افزونگي نميبينم ما در هر صورت فيلد ( کد نوع سطح دسترسی ) رو داخل جدولمون درج ميكنيم فقط يه Join اينجا اضافه ميشه

هنوز سؤالاي من باقيه ...1- اين روش از لحاظ سرعت چطوره با وجود 600,000 تا ركورد در جدول دسترسي ؟ 2- واسه ركوردهام چكار كنم ؟

Galawij
چهارشنبه 08 تیر 1390, 10:53 صبح
باز افزونگي نميبينم ما در هر صورت فيلد ( کد نوع سطح دسترسی ) رو داخل جدولمون درج ميكنيم فقط يه Join اينجا اضافه ميشه
شما یک فیلد را با سه فیلد یکی می دونید؟

kahroba77
چهارشنبه 08 تیر 1390, 15:11 عصر
شما یک فیلد را با سه فیلد یکی می دونید؟
من كه قرار بود 101 توي بانكم ذخيره كنم اينجوري يك جدول اضافه هم نميخواد ديگه. در هر صورت ممنون

linux
جمعه 10 تیر 1390, 18:13 عصر
دیتابیس که خود میکروسافت طراحی کرده در 99 درصد مواقع نیازهای شما را برآورده می کند

kahroba77
یک شنبه 12 تیر 1390, 17:12 عصر
دیتابیس که خود میکروسافت طراحی کرده در 99 درصد مواقع نیازهای شما را برآورده می کند

میشه بیشتر توضیح بدین؟ آیا آموزشی در این رابطه دارین؟ یا یک نمونه عملی ؟

linux
جمعه 17 تیر 1390, 19:27 عصر
این مطلب را ببینید
http://msdn.microsoft.com/en-us/library/ms998314.aspx