View Full Version : گفتگو: اتصال مستقيم كنترل ها به ديتا بيس حماقت است!!؟
ali_ahr7
چهارشنبه 14 بهمن 1388, 02:16 صبح
سلام.
من هيچ مطلبي در اين زمينه نديدم پس ترجيح دادم اين مطلبو براي مبتدي ها بذارم تا اشتباه منو تكرار نكنن.
حتما شده كه كنترل هاتونو از طريق ديتاست VB بصورت مستقيم به ديتابيس وصل كرده باشين.و حتما هم ديدين كه با انجام اين كار چقدر كارتون توي كد نويسي كمتر ميشه ولي غافل از اينكه اگز اسم سرور عوض بشه چكار بايد بكنيد؟
فكر كنيد تمام كنترل هاتونو به ديتابيس وصل كردين و حالا اسم سرورتون عوض شد.البته خود مايكروسافت يه راه حل براي اين موضوع گذاشته و اون هم APP.CONFIG هست كه ميتونيد خودتون سرچ كنيد و اطلاعاتي رو دربارش پيدا كنيد.
ضعف بعدي اين روش اينه كه امنيت برنامتون به شدت پايين مياد.و هر برنامه نويس حرفه ايي ميتونه به ساختون برنامه و ديتابيستون دسترسي پيدا كنه.
ممنون ار توجهتون.دوستان اگه مطلبي درباره اين موضوع دارن بذارن تا بقيه هم استفاده كنن.اگر هم سوالي بود در صورتي كه بتونم جواب بدم در خدمتتون خواهم بود.يا علي
Reza Safa
چهارشنبه 14 بهمن 1388, 07:59 صبح
دوست عزیز ممنونم از لطفی که داری و تجربتو در اختیار دیگران میزاری
می خواستم اگر امکانش هست ضعف ها رو به صورت کامل توضیح دهی و یا اگر زیاده لینکی در رابطه با ضعف این موضوع بذاری تا مام موضوع رو پیگیری کنیم
DoDoklak
چهارشنبه 14 بهمن 1388, 08:47 صبح
ولی غافل از اینکه اگز اسم سرور عوض بشه چکار باید بکنید؟
فکر کنید تمام کنترل هاتونو به دیتابیس وصل کردین و حالا اسم سرورتون عوض شد
این اصلا ضعف اتصال مستقیم به دیتا بیس نیست بلکه ضعف برنامه نویسه که کانکشن استرینکشو به صورت ثابت قرار داده
من تو یک نمونه برنامه شبکه در چند قسمت از روش ارتباط مستقیم استفاده کردم خیلی هم خوب جواب داد.تا حالا هم چند بار آدرس سرور تغییر کرد و هیچ مشکلی هم به وجود نیامد چون من کانکشن استرینک جهت اتصال رو به صورت داینامیک ساختم و میتونه در حین اجرای برنامه تغییر کنه
ضعف بعدی این روش اینه که امنیت برنامتون به شدت پایین میاد.و هر برنامه نویس حرفه ایی میتونه به ساختون برنامه و دیتابیستون دسترسی پیدا کنه.
یکم بیشتر توضیح بدید . چرا امنیت پایین میاد!شما که سورس به کاربر نمیدید تا از روی اتصالش بفهمه ساختار بانک چیه.
نکته:در کل در برنامه های تحت شبکه هر کسی که به سرور دسترسی داشته باشه میتونه ساختار بانک و جدولهای شما رو ببینه و شما نمیتونید جلوی اینکار رو بگیرید.
البته دیدن جدولها زیاد سودی به حال کسی نداره مهم اینه که سورس برنامه در امنیت کامل باشه
ali_ahr7
چهارشنبه 14 بهمن 1388, 08:55 صبح
ببينيد مسئله اينجاست كه شايد تعداد ضعف ها كم باشه ولي خود اين ضعف ها ضعف هاي بزرگي هستن.
مثلا شما با اين روش براي يه شركت برنامه نويسي ميكنين و حالا نام سرورش عوض شده.
اولا كه مجبورين تمام ديتاست ها و ديتا آدايپتور هاتون رو از نو بسازين.
بعد از اون بايد رابطه كنترل هارو با ديتاست و ديتا آداپتور هاي جديد تنظيم كنيد.
بعد هم كه بايد براي هر كلاينت برنامه رو از نو نصب كنين.كه اين امر خودش فاجعه است.
ali_ahr7
چهارشنبه 14 بهمن 1388, 09:09 صبح
اولا ممنون از پاسختون دوما:
این اصلا ضعف اتصال مستقیم به دیتا بیس نیست بلکه ضعف برنامه نویسه که کانکشن استرینکشو به صورت ثابت قرار داده
دوست عزيز توي اتصال مستقيم كانكشن رو خود vb تنظيم ميكنه.بله درسته كانكشن بايد سازگار باشه تا در صورت تعويض نام سرور،خودش رو وفق بده.و در مورد امنيت،يكي از دلايلش همون وجود فايل xml كنار برنامه هست.(app.config( كل كانكشن استرينگ برنامه + يوزر و پسورد ديتابيس توي اين فايل بدون رمز گذاري نوشته شده.
ali_ahr7
چهارشنبه 14 بهمن 1388, 09:14 صبح
ترجیح دادم این مطلبو برای مبتدی ها بذارم تا اشتباه منو تکرار نکنن.
راستي يه نكته اينكه من خودم هم مبتدي هستم و فكر نكنين چون گفتم براي مبتدي ها هستم يعني خودم حرفه اي هستم.و ديگه اينكه از اساتيد اگه اشكالي تو مطالب بالا ديدن لطفا تذكر بدن.متشكرم
f.nabavi
چهارشنبه 14 بهمن 1388, 09:42 صبح
سلام. همون طور که دوستان عزیزمون گفتن این ضعف از برنامه نویس هست نه از نحوه اتصال کنترل ها به دیتابیس
برای اتصال کنترل ها به دیتابیس از دیتا ست استفاده میکنیم، دیتا ست با کمک یک دیتا آداپتر پر میشه. اگر connectionstring رو از خارج برنامه بخونید هر بار که آدرس سرور عوض بشه فقط کافیه یک connection string جدید بسازید و کنار برنامه قرار بدید. دیگه لازم نمیشه که هر بار دیتا آداپتر ها رو تنظیم کنید و برنامه جدید برای کلاینت ها نصب کنید.
البته در connection string که بیرون برنامه قرار میدین نباید پسورد دیتابیس رو بذارید . پسورد دیتابیس رو برنامه نویس تعیین میکنه و با جابه جایی server عوض نمیشه. بهتره یه نمونه پسورد رو یه جایی داخل برنامه بذارید و هر بار که connenction string رو از بیرون برنامه میخونید پسورد رو به انتهای اون اضافه کنید. حتی اگر تصمیم گرفتید پسورد رو عوض کنید فقط کافیه همون یه نمونه داخل برنامه رو تغییر بدین.
لو رفتن connection string دلیلی بر لو رفتن سورس برنامه نیست. اگر همون طور که گفتم فقط از پسورد دیتابیس محافظت کنین کسی نمیتونه حتی به دیتابیس دسترسی پیدا کنه
ali_ahr7
چهارشنبه 14 بهمن 1388, 10:17 صبح
بله درسته ولي يك سوال اينجا مطرح ميشه:
1-چطور وقتي كنترل هارو مستقيم توي صفحه ميزاريم ميتونيم براشون كانكشن استرينگ بنويسيم؟
چرا كه خود vb بصورت خودكار اين كار رو انجام ميده.
نكته بعدي اينكه منظور من لو رفتن سورس برنامه نيست.منظور من لو رفتن اطلاعات وارد شده در ديتابيس هستش.
DoDoklak
چهارشنبه 14 بهمن 1388, 11:37 صبح
دوست عزیز توی اتصال مستقیم کانکشن رو خود vb تنظیم میکنه
اگر از ویزارد استفاده کرده باشی این مشکل هست.درکل استفاده از ویزارد فقط بیشتر جهت آموزش بکار میره نه ساخت برنامه های تجاری.اگر خودتون ارتباط رو برقرار کنید کانکشن توسط شما تنظیم میشه
در مورد امنیت،یکی از دلایلش همون وجود فایل xml کنار برنامه هست.(app.config( کل کانکشن استرینگ برنامه + یوزر و پسورد دیتابیس توی این فایل بدون رمز گذاری نوشته شده.
باز هم این ضعف از برنامه نویسه استفاده از app.config اجباری نیست من خودم به شخصه از این قسمت استفاده نمیکنم و اگر کسی هم این فایل رو از برنامه منو بخونه هیچی توش نیست.
چطور وقتی کنترل هارو مستقیم توی صفحه میزاریم میتونیم براشون کانکشن استرینگ بنویسیم؟
سعی میکنم یه نمونه سورس با ارتباط مستقیم با کانکشن تنظیم شده توسط برنامه نویس براتون بزارم.تا مباحث مبهم براتون روشن بشه
سلام. همون طور که دوستان عزیزمون گفتن این ضعف از برنامه نویس هست نه از نحوه اتصال کنترل ها به دیتابیس
برای اتصال کنترل ها به دیتابیس از دیتا ست استفاده میکنیم، دیتا ست با کمک یک دیتا آداپتر پر میشه. اگر connectionstring رو از خارج برنامه بخونید هر بار که آدرس سرور عوض بشه فقط کافیه یک connection string جدید بسازید و کنار برنامه قرار بدید. دیگه لازم نمیشه که هر بار دیتا آداپتر ها رو تنظیم کنید و برنامه جدید برای کلاینت ها نصب کنید.
البته در connection string که بیرون برنامه قرار میدین نباید پسورد دیتابیس رو بذارید . پسورد دیتابیس رو برنامه نویس تعیین میکنه و با جابه جایی server عوض نمیشه. بهتره یه نمونه پسورد رو یه جایی داخل برنامه بذارید و هر بار که connenction string رو از بیرون برنامه میخونید پسورد رو به انتهای اون اضافه کنید. حتی اگر تصمیم گرفتید پسورد رو عوض کنید فقط کافیه همون یه نمونه داخل برنامه رو تغییر بدین.
لو رفتن connection string دلیلی بر لو رفتن سورس برنامه نیست. اگر همون طور که گفتم فقط از پسورد دیتابیس محافظت کنین کسی نمیتونه حتی به دیتابیس دسترسی پیدا کنه
تایید میشه
milad.biroonvand
چهارشنبه 14 بهمن 1388, 12:52 عصر
اگر از ویزارد استفاده کرده باشی این مشکل هست.درکل استفاده از ویزارد فقط بیشتر جهت آموزش بکار میره نه ساخت برنامه های تجاری.اگر خودتون ارتباط رو برقرار کنید کانکشن توسط شما تنظیم میشه
باز هم این ضعف از برنامه نویسه استفاده از app.config اجباری نیست من خودم به شخصه از این قسمت استفاده نمیکنم و اگر کسی هم این فایل رو از برنامه منو بخونه هیچی توش نیست.
سعی میکنم یه نمونه سورس با ارتباط مستقیم با کانکشن تنظیم شده توسط برنامه نویس براتون بزارم.تا مباحث مبهم براتون روشن بشه
تایید میشه
منهم با اين نظر كاملا موافقم.
b.mahsa
چهارشنبه 14 بهمن 1388, 13:00 عصر
منم از همین روش استفاده می کن ولی odbc می سازم این طوری احتیاج به عوض کردن constring هم نیست.
ali_ahr7
چهارشنبه 14 بهمن 1388, 13:08 عصر
سعی میکنم یه نمونه سورس با ارتباط مستقیم با کانکشن تنظیم شده توسط برنامه نویس براتون بزارم
سلام.پس لطفا سورس رو بذاريد.من منتظرم.بازم متشكرم
ali_ahr7
چهارشنبه 14 بهمن 1388, 23:54 عصر
دوست عزيز من هنوز منتظرم.اگه راهي هست بگيد.
اصلا اگر نمونه كد هم بگذاريد كافيه.ممنون
DoDoklak
پنج شنبه 15 بهمن 1388, 09:13 صبح
دانلود نمونه سورس
http://f.imagehost.org/download/0346/WindowsApplication2
در این برنامه تو رویداد Load فرم کانکشن تنظیم میشه و بعد اتصال اتوماتیک انجام میگیره
DataSource = "Data Source=.\SQLEXPRESS;AttachDbFilename=" & My.Application.Info.DirectoryPath + "\DB_BANK.mdf" & ";Integrated Security=True;Connect Timeout=30;User Instance=True"
البته این برنامه تک کاربره است .
در برنامه های تحت شبکه شما باید از یک فرم login استفاده کنید تا کاربر بتونه به شبکه وصل بشه
دو تا نمونه
http://i.imagehost.org/0615/Login1.jpg
http://f.imagehost.org/0582/Login2.jpg
ali_ahr7
چهارشنبه 28 بهمن 1388, 11:32 صبح
دوست عزيز ممنون از پاسختون ولي برنامه به سرور متصل نشد.يعني چون اسم سرور عوض شده برنامتون جواب نداد.
در ضمن منظور من از طرح اين مسئله اين بود كه استفاده از wizard خود وي بي حماقته وگرنه راه درست قرار دادن كديه كه شما بالا گذاشتين.
Alghoochi
چهارشنبه 28 بهمن 1388, 14:27 عصر
اگه نمونه کدهای Vb رو ببینید می فهمید که برنامه نویس های حرفه ای از Wizard استفاده نمی کنن. نه تو اتصال به بانک اطلاعاتی تو اکثر موارد از کد نویسی استفاده می کنند
DoDoklak
چهارشنبه 28 بهمن 1388, 15:45 عصر
دوست عزيز ممنون از پاسختون ولي برنامه به سرور متصل نشد.يعني چون اسم سرور عوض شده برنامتون جواب نداد.
نمونه برنامه ای که من گذاشتم برای فایلهای SQL بدون Attach است و وقتی تو بخش dataSource
از .\SQLEXPRESS استفاده میکنیم یعنی سیستم جاری رو مد نظر داشته باش.
برای برای شبکه باشه باید مثلا اینطوری بنویسی
DatatSource=MTPROG;
DatatSource=168.162.0.1;
اونوقت به جای سیستم جاری به دنبال سیستم مورد نظر مگرده.
موفق باشید
ali_ahr7
چهارشنبه 28 بهمن 1388, 17:02 عصر
برنامه نویس های حرفه ای از Wizard استفاده نمی کنن
منم اين موضوع رو دقيقا براي همين مطرح كردم كه دوستان اين قضيه رو متوجه بشن و اين كار رو انجام ندن.ممنون از توجهتون
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.