PDA

View Full Version : گفتگو: کاربرد execute as



d_rabiee
یک شنبه 26 آبان 1387, 12:25 عصر
با سلام خدمت همه دوستان، ایده ای به ذهنم رسیده که نتوانستم آن را اجرا کنم. می خواهم ببینم که آیا این ایده عملی هست و اگر هست چگونه:
پس از هر اتصال به اسکیوال از طریق یک username با حقوق دسترسی کم ، یک sp اجرا کنم - username یاد شده فقط حق اجرای این sp را دارد و بس - که در آن ، username بررسی شده و با دستور execute as مرا به یک یوزر با دسترسی بیشتر تبدیل نماید. و من در ادامه، پس از اجرای این sp ، با استفاده از همین connection ، کوئری های خود را به اسکیو ال ارسال کنم. اشکالی که وجود دارد این است که دسترسی های بدست آمده پس از اجرای execute as فقط در محدوده sp معتبر است نه در سطح connection.
(قاعدتاً)

AminSobati
دوشنبه 27 آبان 1387, 23:19 عصر
سلام دوست عزیزم،
همه این راهها ختم میشه به اینجا که شما باید یک چیز Secret رو در برنامه خودتون داشته باشید و اگر کاربر به اون پی ببره یعنی کار تمومه! در مثال شما، اگر کاربر اسم SP رو بدونه پس خودش مستقیم میتونه به SQL Server وصل بشه و SP رو فراخوانی کنه درسته؟ اگر جوابتون "خیر" هستش پس توجیهش کنید. اگر "بله" پس حالا که قراره یک چیزی در برنامه ما ذخیره و حفظ بشه، به جای درگیر شدن با SP و Exec As همون Password کاربر اصلی باشه که همه باهاش به SQL Server وصل میشن (بدون اینکه اطلاع داشته باشند)

d_rabiee
سه شنبه 28 آبان 1387, 08:37 صبح
سلام دوست عزیزم،
همه این راهها ختم میشه به اینجا که شما باید یک چیز Secret رو در برنامه خودتون داشته باشید و اگر کاربر به اون پی ببره یعنی کار تمومه! در مثال شما، اگر کاربر اسم SP رو بدونه پس خودش مستقیم میتونه به SQL Server وصل بشه و SP رو فراخوانی کنه درسته؟ اگر جوابتون "خیر" هستش پس توجیهش کنید. اگر "بله" پس حالا که قراره یک چیزی در برنامه ما ذخیره و حفظ بشه، به جای درگیر شدن با SP و Exec As همون Password کاربر اصلی باشه که همه باهاش به SQL Server وصل میشن (بدون اینکه اطلاع داشته باشند)


ببخشید، موضوع را خوب عنوان نکردم. در sp مورد نظر پارامترهایی برای نام کاربری و رمز وجود دارد. یعنی sp نام کاربری و رمز عبوری را از کاربر در یافت کرده و در صورتی که این نام کاربری و رمز در جدول مربوط وجود داشته باشد دستور execute as را اجر می کند. اگر نام کاربری و رمز ارائه شده در پارامترها صحیح نبود دستور execute as اجرا نمی شود.

AminSobati
سه شنبه 28 آبان 1387, 23:09 عصر
قبلش با کدوم نام کاربری به دیتابیس Connect میشین که SP رو فراخوانی کنین؟

d_rabiee
پنج شنبه 30 آبان 1387, 22:03 عصر
قبلش با کدوم نام کاربری به دیتابیس Connect میشین که SP رو فراخوانی کنین؟

برای اتصال به بانک اطلاعات از یک نام کاربری عمومی استفاده می کنیم که مشخصات آن در کد نرم افزار وجود دارد و نیازی به مخفی کردن این نام کاربری و رمز آن نیست زیرا:
1- تنها دسترسی این کاربر به بانک اطلاعات فقط و فقط اجرای sp یاد شده است و بس.
2- هرکاربر مشخصات خود را به عنوان پارامتر، از داخل sp به دیتابیس ارسال می کند.
3- نام کاربری و رمز عبور تمام کاربران و نیز مجوزهای هرکدام، در جداولی ذخیره شده. در داخل sp ، نام و رمز عبور کاربر با اطلاعات این جداول انطباق داده شده و با استفاده از execute as دسترسی واقعی و اصلی به کاربر داده می شود.
بنابراین حتی اگر کسی کد نرم افزار را باز کرده و بتواند به دیتابیس متصل شود فقط می تواند این sp را اجرا کند. این sp هم به هیچ دردی نمی خورد جز بررسی مشخصات کاربر و اعطای مجوز ورود منطبق با حقوق دسترسی او.

d_rabiee
سه شنبه 05 آذر 1387, 22:05 عصر
کسی بحث رو ادامه نمیده؟

AminSobati
سه شنبه 05 آذر 1387, 23:36 عصر
اگر این نام کاربری عمومی طبق فرمایش شما نیازی به مخفی کردنش نیست، یک کاربر میتونه با دانستن این نام کاربری، خودش با Management Studio به سرور وصل بشه و در بین SPها اون رو پیدا و اجرا کنه. حالا اختیاراتی که Execute As بهش میده بدست آورده!

d_rabiee
جمعه 08 آذر 1387, 09:58 صبح
اگر این نام کاربری عمومی طبق فرمایش شما نیازی به مخفی کردنش نیست، یک کاربر میتونه با دانستن این نام کاربری، خودش با Management Studio به سرور وصل بشه و در بین SPها اون رو پیدا و اجرا کنه. حالا اختیاراتی که Execute As بهش میده بدست آورده!
نه نمی تونه چون اجرای دستور execute as داخل یک sp انجام می شه و همونطور که گفتم برای اجرای این spباید یک نام کاربری و رمز عبور معتبر و تعریف شده داشته باشیم(که البته و صد البته با نام کاربری عمومی لاگین شدن به sql server و اجراي این sp متفاوت است). sp قبل از اینکه execute as را اجرا کنه رمز عبور و نام کاربری را بررسی می کنه و اگر کاربر و رمز عبور صحیح بود اونوقت با execute as کاربر رو به یک کاربر با مجوزهای بیشتر تبدیل می کنه. البته برای هرکاربر دسترسی های خاص او و در نتیجه execute as مخصوص او را تعریف می کنیم. همه اینها داخل sp هست ولی فقط زمانی اجرا میشه که نام کاربری و رمز عبور پاس داده شده به sp معتبر باشه.

AminSobati
جمعه 08 آذر 1387, 18:34 عصر
در پست شماره 5 اشاره کردین به اینکه Login و Passwordی که خود برنامه ازش استفاده میکنه در سورس برنامه Hard Code شده. سوال بنده اینه: اگر قراره چیزی در سورس برنامه مخفی بشه، چرا sa و پسووردش نباشه؟

d_rabiee
سه شنبه 12 آذر 1387, 18:20 عصر
در پست شماره 5 اشاره کردین به اینکه Login و Passwordی که خود برنامه ازش استفاده میکنه در سورس برنامه Hard Code شده. سوال بنده اینه: اگر قراره چیزی در سورس برنامه مخفی بشه، چرا sa و پسووردش نباشه؟
چون اگرکسی بتونه فایل exe رو باز بازکنه و به رمز sa پی ببره اونوقت دیتابیس رو در اختیار می گیره اما اگر login/password یاد شده را به دست بیاره کاری نمی تونه انجام بده بجز اجرای sp موردنظر، واگر نام کاربری و رمز عبور معتبری در اختیار نداشته باشه اجرای sp به دردی نمی خوره.

AminSobati
چهارشنبه 13 آذر 1387, 21:57 عصر
نکته همینجاست! کسی که بتونه exe رو باز کنه، میتونه نحوه کانکت شدن رو عینا بدون Application در پیش بگیره. وقتی براش execute as انجام میدین، خودش میتونه مستقیم به SQL Server وصل بشه و این کار رو انجام بده.