PDA

View Full Version : user با دسترسی محدود به دیتابیس



dorparasti
پنج شنبه 10 شهریور 1390, 21:41 عصر
در مطال مختلفی که در وب خوندم درباره امنیت وب سایت ، یکی از مطالب که مورد تاکید بوده استفاده از یک اتصال به دیتابیس با دسترسی محدود است مثلاً تنها به جداول و پروسیجورهای تعیین شده دسترسی داشته باشد و در آن جداول هم فقط اجازه select ,delete , update و insert را داشته باشد نه create table و این چیزها .

در فروم گشتم ولی مطلب مناسبی پیدا نکردم .

حالا من :
- اول یک Login ساختم
- بعد در دیتابیس یک user ساختم که default schema اون dbo هستش و تنها Role آن public هستش
- رفتم به صفحه securable و جداول و procedure های مرتبط به dbo رو لود کردم .
- به پروسیجورها به اونهایی که خودم ساخته بودم از بین 5 گزینه موجود همه رو deny زدم بجز execute و برای اونایی که اولشون sys داشت و من نساخته بودم همه گزینه ها رو deny کردم .
- برای جداول هم اونایی که خودم ساخته بودم همه گزینه ها رو deny کردم به جز select و Delete و update و insert که grant کردم و جداولی که ساخت خود دیتابیس بود همه رو deny کردم .

آخرش هم ok رو زدم و از طریق سایت سعی کردم اون رو امتحان کنم . اما پیغام زیر رو داد :
The SELECT permission was denied on the object 'tablename', database 'db', schema 'dbo'.


دوباره رفتم به دیتابیس و قسمت securables و به جدولی که ایراد گرفته بود علاوه بر چهار عمل قبلی ، گزینه Control هم از حالت deny خارج کردم و grant رو تیک زدم و بعد اون error رو نداد و رفت به error روی جدول بعدی یعنی درست شد .

حالا این گزینه Control چیه ؟ من کجا اشتباه کردم و روش درست برای یک اتصال محدود و امن چیه ...

بازم بگم که هم اینجا و هم در فروم sql server گشتم اما چیزی پیدا نکردم . اگر کسی مطلبی میشناسه معرفی کنه ...

ممنون

dorparasti
جمعه 11 شهریور 1390, 20:57 عصر
نظری نداشتین ؟

Saman Hashemi
شنبه 12 شهریور 1390, 09:41 صبح
فقط اجازه select ,delete , update و insert را داشته باشد نه create table و این چیزها .بعضي قسمت ها خيلي گنگه مگه توي سايت اين امكان هست كه كاربر جدول بسازه؟

dorparasti
شنبه 12 شهریور 1390, 11:29 صبح
نه ، من به عنوان طراح سایت این امکان رو مطمئناً به کسی نمی دم .
ولی منظورم اینه که در صورت وقوع حملاتی از نوع Sql injection اگر که تمهیدات طراح و برنامه نویس سایت در مقابله با این نوع حملات کارساز نبود و کد مخرب از تمام فیلترهای سایت گذشت و به دیتابیس رسید در اونجا به دلیل اینکه اتصال استفاده شده در سایت یک اتصال محدود هستش لااقل مطمئن هستم که قادر به حذف جداول یا نمی دونم تغییر در دیتابیس نیست . هرچند که می تونه اطلاعات رو ببینه یا پاک کنه و تغییر بده . و برای این یکی هنوز راه حلی پیدا نکردم .

Saman Hashemi
شنبه 12 شهریور 1390, 11:45 صبح
شما سعي كن با كد نويسي جلوي دسترسي به بانك و حملات SQL Injection بگيري وقتي بتونه به بانك دسترسي پيدا كنه و ديتا خراب كنه يا قسمتي از اونارو پاك كن كرده حالا شما بيا دسترسي به اجراي يكي از SP بهش نده...!

dorparasti
شنبه 12 شهریور 1390, 13:56 عصر
ممنون اما نظر شما رو نمی تونم قبول کنم .
چون به عنوان یک برنامه نویس خودم رو موظف به ایجاد حداکثر امنیت برای محصول تولید شده می دونم .
این واضحه که امنیت یک مسئله نسبی است و همیشه راهی برای عبور از تمهیدات اندیشه شده وجود داره .
پس سایت و نرم افزار باید تا جایی که ممکنه سعی بشه حداقل آسیب پذیری رو داشته باشه . و هزینه بازگشت به وضعیت اولیه اش کمتر باشه .

در هر حال نظری درباره اون سوال اولیه دارین ؟

Saman Hashemi
شنبه 12 شهریور 1390, 15:06 عصر
چون به عنوان یک برنامه نویس خودم رو موظف به ایجاد حداکثر امنیت برای محصول تولید شده می دونم .
دوست عزيز منم براي همين ميگم برو يه كار اساسي كن و برنامه اي حرفه اي بنويس كه جلوي اين حملاتو بگيري كاري كه شما ميكني صورت مسئله پاك كردن و اين كار امنيت نمياره مثلا دستور DropTable خيلي بهتر از Delete چون حداقل متوجه ميشي يكي بانكتو دستكاري كرده و يه BackUp رستور ميكني اما وقتي از 1000000 ركورد 1000 تا پاك كرد ميخوايي چه كني؟احتمال متوجه شدن واقعا كمه...!
يه هكر نمياد بانك پاك كنه يا جدول پاك كنه سو استفاده ميكنه كه بازم در راه حل شما دستش بازه...!
ظاهرا كه درسته( ميتونيد از آقاي ثباتي (http://barnamenevis.org/member.php?1100-%D8%A7%D9%85%DB%8C%D9%86-%D8%AB%D8%A8%D8%A7%D8%AA%DB%8C) كمك بگيريد ايشون بهتر ميتونن كمكتون كنن...!)