PDA

View Full Version : مخفي كردن بسورد User اسكيوال در سورس برنامه دلفي 7



mahdy.asia
سه شنبه 19 بهمن 1389, 14:55 عصر
ما يك تيم برنامه نويسي هستيم كه هر يك كاربري و پسورد خود را براي اتصال به بانك اطلاعاتي دارد.روش اتصال Ado Connection در دلفي 7 مي باشد.
با توجه به اينكه اعضاء‌ تيم مي بايست جهت Standby به سورس برنامه ديگران دسترسي داشته باشند چطور مي شود كاربري و پسورد ست شده در سورس برنامه را از ديد آنها مخفي نگه داشت

حمیدرضاصادقیان
سه شنبه 19 بهمن 1389, 21:27 عصر
این رو شما نمیتونید مخفی کنید.
اصلا راه صحیح نیست که پسورد رو در سورس نگهداری کنید.
شما بهتره مشخصات ارتباط رو برای هرکاربر در رجیستری یا یک فایل ini بنویسید و در زمان اجرای برنامه اونو لود کرده و ازش استفاده کنید.
با این روش دیگه این مشکل پیش نمیاد.

mahdy.asia
سه شنبه 19 بهمن 1389, 22:26 عصر
فایل ini رو هم هر کس می تونه باز کنه و محتوای آن رو (یوزر و پسورد) ببیند
رجیستری هم همین مسئله صادق است و می توان به راحتی به اطلاعات (یوزر و پسورد) دسترسی پیدا نمود

حمیدرضاصادقیان
چهارشنبه 20 بهمن 1389, 20:01 عصر
خوب دوست عزیز به صورت یک Plain Text ذخیره نکنید.
حداقل کاری که میتونید بکنید رمز کنید بعد قرار بدید.
در داخل سورس شما نمیتوانید کنترلی انجام بدید.

m_omrani
چهارشنبه 20 بهمن 1389, 23:03 عصر
من یه راهکار بهتون پیشنهاد می دم شاید براتون مفید باشه. البته چیزی که می گم شاید تا حدی بدیهی باشه. در این صورت به چشم یادآوری بهش نگاه کنید:

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

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

حفاظت از دیتابیس رو در خود SQL Server با اعمال محدودیت های مختلفی که مطابق میل و سلیقه یا نیازتون احساس می کنید به کاربرهای SQL Server در دیتابیس مزبور اعمال کنید. چون که اساساً نیازی نیست حساب کاربری مورد استفاده در اتصال به دیتابیس از هر دسترسی ای برخوردار باشه.

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

به عنوان مثال در پروژه ای که من با اون درگیر هستم یکی از دوستان چنین پیشنهادی داد و من هم دیدم پیشنهاد خوبیه.

تنها یک یوزر در دیتابیس ایجاد کردم که فقط و فقط اجازه اجرای SP هایی رو داره که دقیقاً براش مشخص شده. تمام سیستم هم در قالب SP پیاده سازی شده. لذا با اتصال به دیتابیس، کاربر نمی تونه مستقیماً به صورت SQL Text یا Plain Text کوئری بزنه. تست سرور رو هم که همون طوری که توضیح دادم راه اندازی کردم، لذا همیشه اول بلاها سر تست سرور میاد، نه سرور نهایی.


با احترام

Mahbod Rad
پنج شنبه 21 بهمن 1389, 11:54 صبح
سلام دوست عزیز
من به طور کامل متوجه منظور شما نمیشوم. شما تلاش دارید پسوورد را از همکارانتان مخفی کنید. فکر نمیکنم همکاران شما در محیطی کار کنند که هیچکدام به هم اطمینان نداشته باشند.
دقیقاً منظورتان همین است یا تلاش دارید که کاربران نهایی سیستم نتوانند با Login های مختلف وارد SQL شوند و اطلاعات را به طور مستقیم در دیتا بیس دستکاری کنند؟
میشه بیشتر توضیح بدید
البته من این مشکل را اگر منظور شما را درست تشخیص داده باشم یک جور دیگر حل کرده ام

mahdy.asia
شنبه 23 بهمن 1389, 18:43 عصر
خواسته های ما:
1- اگر کاربری برنامه نویس در اختیار خارج از سازمان قرار گرفت کسی باشد که بتوان او را باز خواست نمود (اگر همه یک کاربری را استفاده نمایند در اینصورت مشخص نمی باشد مسئولیت نگهداری کاربری بر عهده چه کسی است)
2-اگر تراکنشی باعث اختلال در شبکه شود مشخص گردد با چه کاربری وارد شده است و اختلال بوجود آورده ( پیگیری خطای TimeOut
3-بتوانیم بعضی از برنامه نویسان را به بعضی از اشیاء محدود نماییم و دسترسی full را از آنها بگیریم
4-هر کامپوننتی که با کاربری خاصی بوجود می آید برای دسترسی به آن نیاز نباشد از کلمه کلیدی db_owner قبل از شی استفاده نماییم

Mahbod Rad
شنبه 23 بهمن 1389, 20:07 عصر
سلام
شرمنده ام لغات خیلی سختی نوشته اید و زیاد متوجه نشدم.
منظور من از کاربر نهایی مشتری است که نرم افزار را خریده است و دارد استفاده میکند. بالطبع این مشتری میتواند هیچ سررشته ای از SQL نداشته باشد. اگر تراکنشی موجب خرابی اطلاعات شود از داخل برنامه انجام شده است. اما همیشه برای کنترل اینکه این خرابی توسط چه کسی ایجاد شده است نیاز به لاگین اتصال به سرور نیست. در وصل شدن برنامه های به سرور اطلاعات دیگر نیز مانند کامپیوتر و حتی ID نرم افزاری که این کار را کرده است هم مشخص میشود. یعنی از طریق یک کامپیوتر یک برنامه خاص را چند بار باز میکنید و بایکی از اینها عملیات حذف و بادیگری عملیات اضافه را انجام میدهید. خوب در Log Sql دقیقآض مشخص میشود که کدام برنامه چکار کرده است.
من تا بحال حساسیتی روی تیم برنامه نویسی و کارشان نداشته ام که بخواهم برای آنها هم در سورس برنامه پسوورد بذارم. اما برای اتصال برنامه به سرور یک لاگین تعریف میکنم با یک پسوورد خاص که آن را حتی به مدیر شبکه شرکت مشتری هم نمیدهم. اگر شرکت مشتری نگران اطلاعاتش باشد خودش پسوورد SA را از همکارانشان حفظ میکند. و من فقط این تضمین را میدهم که توسط برنامه من خرابکاری صورت نمیگیرد در غیر اینصورت برنامه ام باگ دارد که باید رفع عیب شود.
در مورد کاربران شرکت مشتری هم یک جدول کاربران تعریف میکنم که بعد از وصل شدن برنامه به سرور با مقایسه نام کاربری و پسوورد کاربر در آن جدول اجازه ورود کاربر را به سیستم میدهد.
بازهم میگم این در مورد کنترل کاربران شرکت مشتری است نه برنامه نویسان خودمان. تمام برنامه را هم فقط با یک AdoConnection به سرور وصل میکنم.
موفق باشید

mahdy.asia
یک شنبه 24 بهمن 1389, 08:46 صبح
خوب در Log Sql دقیقآض مشخص میشود که کدام برنامه چکار کرده است
در صورت تفكيك كاربران SQL گزارشات دقيق تري مي توان گرفت

اگر شرکت مشتری نگران اطلاعاتش باشد خودش پسوورد SA را از همکارانشان حفظ میکند
من در تيم برنامه نويسي يك شركت توليدي كار مي كنم كه كارمان توليد نرم افزار براي همين شركت است (مشتريان ما كارمندان داخل شركت هستند)