با سلام،
چنانچه میدانید اطلاعات مربوط به نام کاربری و رمز عبور کاربران یک بانک اطلاعاتی اکسس در جدولی نگهداری می شود. چگونه می توان این جدول را از خطر دسترسی به اطلاعات آن از طریق Insert From Access حفظ نمود؟
با تشکر
با سلام،
چنانچه میدانید اطلاعات مربوط به نام کاربری و رمز عبور کاربران یک بانک اطلاعاتی اکسس در جدولی نگهداری می شود. چگونه می توان این جدول را از خطر دسترسی به اطلاعات آن از طریق Insert From Access حفظ نمود؟
با تشکر
سلام و روز خوشچنانچه میدانید اطلاعات مربوط به نام کاربری و رمز عبور کاربران یک بانک اطلاعاتی اکسس در جدولی نگهداری می شود
خب این نه تنها روتین نیست که کار بسیار نادرستی هست (صرفنظر از این که دیتابیس چی باشه)!
1- همیشه authentication رو بعهده windows بگذارین.
به این ترتیب که کاربرهای مختلف هر کدوم باید با اکانت خودشون login کنن و در برنامه کافی هست با current_user بهش دسترسی پیدا کنین.
با این کار دست کم 2 چیز بدست میاد:
- همه چیزهای مربوط به authentication (کدها و فرمها و جدولها) از برنامه حذف میشه و دیگه مجبور نیستین اینها رو پیاده کنین؛
فقط یک جدول که مجوزهای دسترسی رو برای هر کاربر تعریف میکنه نیاز هست (بدون پسورد)
و خود این جدول هم بیرون از دیتابیس برنامه باید باشه (الزاما یک فایل اکسس نیست!)
و دیتای اون بصورت encrypt شده هست (وگرنه اگر کسی بتونه اون رو باز کنه کافی هست فیلد دسترسی ادمین رو روی فیلد دسترسی خودش کپی/پیست کنه بدون اینکه نیاز باشه بدونه چی به چی هست)و تعریف کاربرها و دسترسی ها هم توسط یک برنامه جدا انجام میشه که فقط در اختیار admin هست.
تازه با همه این کارها وضعیت قدری بهتر میشه!
- خوبی دیگه این هست که عملا مسئولیت امنیت دیتا به گردن خود کاربر هست و نه برنامه نویس.
اینجا چند تاپیک مفصل و پربار مربوط به این موارد هست که جستجو کنین و کامل بخونین.
البته چکیده اش این هست که اگر امنیت، چه از نگاه خود دیتا (فیزیکی) چه از نگاه دسترسی مهم هست اکسس انتخاب خوبی نیست،
که البته دلیل اصلیش اینه که بر منای فایل هست و نه سرویس (مثل sql) .
----------
این insert from access مربوط به چه محیطی هست؟
باسلام و تشکر فراوان از شما دوست عزیز که زحمت کشیدید و پاسخ دادید.اما بنده فکر می کنم یه راه حل دیگه ای باید داشته باشه چون قبلاً با فایل های اکسسی که این مشکل را نداشته اند برخورد کرده ام، اما موفق به دسترسی به کدنویسی اون نشدم.
در پاسخ به سوالتون خدمت شما عرض می کنم که Insert From Access Fileمربوط به خود نرم افزار اکسس هست و در تب External Data قرار دارد.
اگر کسی از اساتید حاضر اطلاع داره لطفاً پاسخ بده ،سپاسگزارم
سلام
بدیهیست برنامه اکسس شما باید در حالت FrontEnd/BackEnd طراحی شده باشه . به عبارتی بانک اطلاعاتی برنامه از خود فایل اکسسی که سایر آبجکت های برنامه مثل کوئری ها ، فرم ها ، گزارشات ، ماژولها و ماکروها که برای اجرای برنامه از اونا استفاده می کنی باید جدا باشه. یکی از متدها و تکنولوژی های ارتباط فایل اکسس مبدا (FrontEnd) با فایل مقصد یا همون بانک اطلاعاتی (BackEnd) متد ADO هستس . در این متد ارتباط برنامه شما از طریق ی سری کدهای vba و اسکیوال با بانک اطلاعاتی برقرار میشه نه مثل متد Dao که جداول بانک اطلاعاتی در حالت لینک شده قرار دارند و اطلاعات اونا قابل دسترسیه . شما میتونید از طریق متد ADO برای فایل بانک اطلاعاتی خودتون یک رمز عبور ترکیبی از اعداد و حروف که براحتی با نرم افزارهای ریکاوری پسورد قابل بازیافت نباشه ایجاد کنی و ...
ضمناً یادم رفت بپرسم که فارغ از اینکه شما از چه متدی برای برقراری ارتباط با بانک اطلاعاتی برنامه خود استفاده می کنی مگه فایل بانک اطلاعاتی برنامه شما فاقد پسورده ؟ این سوال رو از این جهت میپرسم که وقتی بانک اطلاعاتی دارای پسورد باشه از طریق Insert From Access چگونه میتونی به اطلاعات جدول کاربران دسترسی پیدا کنی ؟
درود بر شما ، بنده دیتا بیس رو از طریق خود اکسس اسپلیت کردم به FrontEnd و BackEnd ، اما متاسفانه جداول قابل دسترسی بودند،اگر روش دیگری وجود دارد بنده اطلاعی ندارم
خیر پسورد نداره ، آخه اگه پسورد روش بزارم برای ورود به دیتابیس پسورد میخواد و کاربرها نمی توانند فرمهای خودشون رو باز کنند.اما از دیگر متد جهت جلوگیری از دستیابی کاربران به دیتابیس از قبیل غیرفعال کردن کلید شیفت ، ماکزیمایز کردن فرم و غیر فعال کردن دسترسی ها از طریق Options و تبدیل دیتابیس به accde اقدام نموده ام.
فرم اولیه وجود داره و کاربران با نام کاربری و رمز عبور خودشون وارد می شوند ، اما باز در برابر Insert From Access مشکل داره و اطلاعات کاربران قابل دستیابی است.
بنده فکر کردم منظور جنابعالی از داشتن پسورد قرار دادن پسورد از طریق Encrypt ٌWith Password است .
اجازه بده مطلب رو قدری واضحتر و ساده تر برات توضیح بدم که تا حدودی ابهامت برطرف بشه !
در حال حاضر شما برنامه ای در ارتباط با موضوع خاصی با اکسس تهیه کرده ای . کاری که انجام داده ای به این صورته که جداول برنامه رو در یک فایل جدا گونه قرار دادی و این فایل رو بدون اینکه برای اون پسورد بذاری بعنوان بانک اطلاعاتی برنامه بر روی سرور برای کاربرانت به اشتراک گذاشته ای و جداول این فایل بانک اطلاعاتی از طریق پنجره get external data access (گزینه دوم) رو به داخل برنامه اجرائی کاربران لینک کرده ای . تا اینجا درسته ؟
حالا فرمایش شما اینه که دیگران میتونن از طریق همون پنجره get external data access و گرینه Insert From Access به اطلاعات کاربران دسترسی داشته باشن.
خوب شما باید تغییراتی در برنامه ات ایجاد کنی که علاوه بر عدم دسترسی دیگران به جداول بانک اطلاعاتی (از طریق پسورد گذاشتن بر روی دیتابیس) اگه ی زمانی هم به هر دلیل نام یا محل بانک اطلاعاتی تغییر کرد در هنگام اجرای برنامه یک پیغام برای کاربر صادر بشه مبنی بر اینکه مسیر بانک اطلاعاتی اشتباه میباشه و یا نام بانک اطلاعاتی نامعتبر است. بنابراین نام صحیح و مسیر بانک اطلاعاتی باید در جائی از برنامه باید ذخیره بشه و بهترین جا هم داخل یک جدول در همون فایلیست که فرم و گزارشات در اون قرار داره و وجود این جدول که حاوی نام و مسیر برنامه است به درد بک آپ گیری هم میخوره .
حالا با این توضیحات در همون فرم اولیه برنامه ات باید ی سری کد نوشته بشه که بر اساس این کدها در همون ایتدای برنامه و قبل از اینکه فرم لاگین کاربران باز بشه بطور اتوماتیک چند مورد بررسی و چک بشه. 1- آیا نام دیتابیس و مسیر دیتابیس مطابق آنچه که در جدول مربوطه ذخیره شده درسته یا نه و دوم پسورد دیتابیس که در قسمت کد نویسی در همون فرم اولیه یا یک ماژول عمومی درج شده فراخوانی میشه و بررسی بشه که آیا رمز دیتابیس با این رمز درج شده یکی هست یا نه . اگه بر اساس این کنترل ها که بصورت اتوماتیک انجام میشه همه چی اوکی بود فرم اولیه برنامه شما برای ورود کاربران باز میشه در غیر اینصورت کاربر با پیغام خطا روبرو میشه
ببخشی ساده تر از این نتونستم مطلب رو توضیح بدم!
همانطوریکه که اساتید اعلام کردن اکسس چون بصورت فایلی هست بنابراین انتظار از این این برنامه همانند sql به همراه exe شاید منطقی نباشه . خصوصا نسخه های قدیمی که به راحتی رمز عبورشان قابل دسترسی هست . هرچند در سطح حرفه ای بشه ی کارهایی کرد. ولی از آنجائی که فایل اکسس معمولا به تار مویی بنده به نظرم این کار هم توصیه نمیشه ...
همان بهتر که از کاربرا بخواهید که کنجکاو نباشن .... (الیته این توصیه بوده و جواب سوال شما نمیتونه باشه)
با سلام و احترام فراوان
همین که وقت عزیزتون رو گذاشتید و پاسخ بنده رو دادید ، بی نهایت سپاسگزارم.
انشاا... تندرست ، سلامت و موفق باشید.
همون طور که قبلاً عرض کردم ، قبلاً دیدم از فایل های اکسسی که خیلی ساده بودند اما امکان دسترسی به جداولشون حتی با عملگر Insert From Access امکان پذیر نبوده اما در یک سایت خارجی بوده و نتوانستم به کدهایش دسترسی پیدا کنم.
اون فایل روی دیتا بیسش با Encrypt With Pasword رمز گذاشته بود اما به هنگام اجرا فرم ورودی اجرا می شد و کاربران می توانستند وارد شوند ، اما زمانیکه میحواستی از دکمه shift یا عملگر insert From Access استفاده کنی رمز دیتا بیس رو می خواست.اگر کسی از اساتید محترم در این باره اطلاعاتی داره لطفآً ارائه بفرمایند.
در حال حاضر مشکل بنده اینه که اگر بر روی دیتا بیس خود از طریق Encrypt With Password رمز عبور بگذارم ، حتی به هنگام باز شدن فرم Login هم اون پسورد رو میخواد و عملاً کاربران نمی توانند وارد نرم افزار شده و کار خود را انجام دهند.
با تشکر
منظورم اینه که فایلی رو دیدم که اسپلیت نشده بود و یک فایل اکسس با پسوند accdb بود ، اما امکان دسترسی به جداول اون از طریق عملگر Insert From Access وجود نداشت ، لطفاً اگه کسی اطلاعاتی داره راهنمایی بفرمایند ، با سپاس
با توضیحات ساده و واضحی که در پست 10 دادم فکر کردم ابهامت کاملاً برطرف شده باشه ولی باز می بینم دوباره برگشتی سر خونه اول
در هر حال من ی نمونه برات آماده کردم ان شاءالله بتونی ازش الگو برداری کنی و از کدهاش در برنامه خودت بدرستی استفاده کنی
در نمونه ضمیمه دو تا فایل اکسس وجود داره . فایل MyProgram.accdb همون فایلیست که کاربران با آن کار می کنن و Data.accdb فایل بانک اطلاعاتیست که جداول برنامه در اون قرار داره . من رمز این فایل رو عدد 125 قرار داده ام و شما در برنامه خودت برای اینکه رمز دیتابیست براحتی بدست نیاد میتونید از یک رمز طولانی تر و سخت تر که ترکیبی از حروف و عدد و علامت باشه استفاده کنی . فقط یادت باشه هر رمزی برای دیتابیست انتخاب کردی باید اون رو در قسمت کد نویسی فرم frmUpdate_Links وارد کنی
در ابتدا وقتی بر روی فایل MyProgram.accdb کلیک کنی خطای ارتباط با بانک اطلاعاتی صادر میشه ( چون آدرس کامپیوتر من در جدول مربوطه ذخیره شده ) و بعد فرم ارتباط با بانک اطلاعاتی باز میشه که از طریق کلید برقراری اتصال پنجره انتخاب فایل برای شما باز میشه که باید فایل Data.accdb رو انتخاب کنی . وقتی فایل بانک اطلاعاتی رو بدرستی انتخاب کردی پیغام موفقیت در ارتباط با بانک اطلاعاتی صادر و سپس فرم مربوط به ورود سیستم اجرا میشه.
در دفعات بعد تا مادامیکه محل و نام بانک اطلاعاتی تغییر نکرده باشه فرم ورود به سیستم مستقیم اجرا میشه .
حالا شما بقول خودت اگه دیگران بخوان از طریق Insert From Access به جداول بانک اطلاعاتی دسترسی پیدا کنن باید رمز عبور دیتابیس رو وارد کنن و گرنه دسترسی به جداول فوق امکان پذیر نمی باشه .
یا علی
آخرین ویرایش به وسیله eb_1345 : سه شنبه 13 دی 1401 در 07:48 صبح
با تشکر از توضیحات شما ، سپاسگزارم
درود بر استاد بهرامی!
نمونه ای که قرار دادی خیلی عالی و کاربردیه .
با سلام
احتراماً باز هم اطلاعات جداول Data.accdb از طریق MyProgram.accdb و عملگر Insert From Access قابل دستیابی است.با تشکر
فیلم آپلود شده در لینک زیر رو مشاهده بفرما و بررسی کن که آیا منظور شما همین گزینه ایست که در فیلم نمایش داده شده یا مورد دیگه ای مد نظر شماست .
اگه مورد دیگه ای مد نظر شماست بصورت عکس یا فیلم بفرست تا بررسی بشه مشکل از کجاست
https://s27.picofile.com/file/845796...ccess.mp4.html
آخرین ویرایش به وسیله eb_1345 : چهارشنبه 14 دی 1401 در 12:37 عصر
بله همین گزینه است.لطفاً فیلم آپلود شده را ملاحظه بفرمایید.
https://uupload.ir/view/record_2023_..._802_azka.mp4/
بله کاملاً درسته و بخاطر همین هم من در پست شماره 4 به این موضوع اشاره کردم که برای عدم دسترسی به جداول بانک اطلاعاتی باید از متد Ado استفاده کنی ، چون در متد Ado جداول بانک اطلاعاتی به داخل برنامه لینک نمیشه که کسی با کلیک بر روی جداول به اطلاعات اون دسترسی پیدا کنه . و همونطور که در پست فوق اشاره کردم در متد Ado ارتباط با جداول بانک اطلاعاتی از طریق ی سری کد vba یا اسکیول برقرار میشه
بنظرم اگه میخوای از همین متد Dao استفاده کنی که جداول بانک اطلاعاتی به داخل برنامه ات لینک باشن سعی کن جدول رو مخفی کنی و کلید شیفت رو هم غیر فعال کنی .
مطابق عکس های ضمیمه
با سلام مجدد به محضر استاد بزرگ،تمامی موارد عنوان شده بالا قبلاً در دیتابیس رعایت گردیده است و حتی ریبون ها را نیز Hide کرده ام ، اما افاقه نکرده و هنوز جداول قابل دستیابی از طریق Insert From Access می باشند ، تنها راه حلی که به نظر بنده می رسد این است که نام کاربری ها و رمز عبورها را در جدول قرار ندهیم و در خود فرم Login تعریف شوند و پس از آن فرمت دیتابیس را به accde تغییردهیم تا دیگر از طریق insert from access قابل دسترسی نباشند ، البته در این حالت دیگر خود کاربران قادر به تعویض رمز ورود خود نبوده و این کار بایستی از طریق Developer صورت پذیرد و کلی محدودیت های دیگر به همراه دارد.البته بنده از آنجایی که فقط اکسس کار هستم ، از متد بالا که فرموده اید اطلاعی ندارم و حدس می زنم مربوط به SQL یا Oracel باشد.با تشکر
سلام ، بله جناب ، این عملگر جداول مخفی شده رو هم میاره
سلام ، ابتدا ارتباط دو ذیتابیس رو برقرار کنید ، بعد با استفاده از عملگر آنها را وارد یک فایل جدید کنید.اطلاعات تمامی جداول قابل دستیابی است.
ارتباط که برقراره اما مخفیانه .ضمناً در نمونه فوق ( نمونه پست 24) کلید شیفت هم غیر فعاله
فیلم زیر رو مشاهده بفرما
https://uupload.ir/view/rec_0005_pmdl.mp4/
سلام و درود بر شما
البته برقراری ارتباط چه مخفیانه و چه آشکارا که الزام هست ، لطفاً فایل آپلود شده را ملاحظه بفرمایید.
https://uupload.ir/view/myrecord_202...1430_bkwd.mp4/
سلام
هرچند 99 درصد این راهکارها در نهایت قابل دورزدنه ولی میشه کاری کرد که دسترسی افراد غیر حرفه ای رو به اطلاعات بانک اطلاعاتی محدود کرد
لطفاً فایل MyProgram.accdb ضمیمه رو جایگزین فایل قبلی در پوشه مربوطه کنید و مجدداً اقدام به ایمپورت جداول از طریق Insert From Access نمائید
سلام بر استاد
فقط بفرمایید که چطور میشه فهمید فایل MyProgram جدید دارای جداولی هست که با فایل Data مرتبط هست؟
با تشکر
سلام
بدیهیه با اجرای برنامه یا صدور خطای ارتباط با بانک اطلاعاتی متوجه وجود جدول یا جداول مرتبط با بانک اطلاعاتی میشیم. شما وقتی فایل MyProgram رو اجرا می کنی و فرم ورود به سیستم کاربران اجرا میشه یعنی اینکه جدول کاربران از فایل بانک اطلاعاتی به داخل برنامه لینک شده و چنین جدولی وجود داره و اگه وجود نداشته باشه با اجرای برنامه با پیغام خطای عدم وجود جدول مربوطه یا خطای ارتباط با بانک اطلاعاتی مواجه میشی
ضمناً نفرمودی فایل آخری رو امتحان کردی که آیا در نمونه جدید هم اطلاعات جداول بانک اطلاعاتی قابل دسترسی و ایمپورت شدن هست یانه ؟
سلام و درود بر شما
بله امتحان کردم و امکان Insert وجود نداشت ، حالا فقط بفرمایید چطور میشه به MyProgram به عنوان یک Developer یا Admin دسترسی پیدا کرد؟
با تشکر
سلام
بنظر بنده با توجه به اینکه نسخه کامپایل شده برنامه یا همون نسخه Mde/Accde برنامه در اختیار کاربران قرار می گیره و نسخه Mdb/Accdb در اختیار ادمین هست و ادمین از این نسخه در زمان تغییرات برنامه استفاده می کنه باید در همون فرم اولیه کدی نوشته بشه و در اون این شرط بکار برده بشه که اگه نسخه برنامه Mde/Accde بود کلید شیفت و جداول و سایر موارد از جمله ریبون اکسس مخفی و غیر فعال بشه در غیر اینصورت موارد فوق فعال و آشکار باشن.
آخرین ویرایش به وسیله eb_1345 : چهارشنبه 21 دی 1401 در 11:02 صبح
استاد عزیز سلام
بنده از ابتدا این مشکل رو عنوان نمودم که عزیزان کمک کنند ، درحال حاضر فایل MyProgram ارسالی شما غیر قابل دسترسی بوده و نمی توان از کدهای اون استفاده کرد.لطفاً بفرمایید چگونه میشه از اون در پروژه های خودم استفاده کنم؟
با تشکر
تقریبا هر چه که در این تاپیک مطرح شد پیشتر هم در چند تاپیک آمده بود که خوندن اونها شاید از تکرار پرسش و پاسخ ها جلوگیری میکرد و پرسش اصلی رو کم رنگ نمیکرد.
خوندن این تاپیک ها رو به کسانی بعدها اینجا میان توصیه میکنم چون نکات ظریفی در اونها آمده.
https://barnamenevis.org/showthread....4%D8%AF%D9%87)
https://barnamenevis.org/showthread....8C%DA%AF%D8%B1
https://barnamenevis.org/showthread....A7%D8%B2-Split
https://barnamenevis.org/showthread....A9%D8%B3%D8%B3
https://barnamenevis.org/showthread....A9%D8%B3%D8%B3
بر میگردیم به همون پرسش اولیه که جدول کاربرها رو محافظت کنیم.
اشاره کردم که authentication کاربر توسط برنامه کار درستی نیست و باید به ویندوز سپرده بشه،
در واقع شناسایی کاربر در خود برنامه در برنامه های تحت dos انجام میشد و الان موضوعیتی نداره.
حالا فرض کنیم که ما اصرار به این کار داریم:
گام اول این هست که هم نام کاربری و هم پسورد رو بصورت hash شده ذخیره کنیم و پسورد به تنهایی کافی نیست.
اینکار دست کم پیدا کردن پسورد رو در صورت دسترسی به دیتا کاربرها منتفی میکنه ولی معنیش این نیست که کاربر غیرمجاز نمیتونه به دسترسی های ادمین دست پیدا کنه.
این دیتا الزامی نیست که از نوع اکسس باشه، میتونه در رجیستری ذخیره بشه و اینجوری کپی برنامه روی هیچ سیستم دیگه ای کار نمیکنه.
میتونه حتی یک فایل متنی در یک جای دور از ذهن باشه (واگذار میکنم به قوه تخیل خودتون) ولی اگر از نوع اکسس هست نباید در همراه دیگر جدول ها در backend باشه.
چرا؟
هم اینجا و هم در تاپیک های قدیمی آمده که اگر از ado connection استفاده کنین امنیت به مراتب بالاتری نسبت به linked table دارین:
چون linked table جتی در دیتابیس رمزدار هم پس از لینک به frontend با دو-سه خط کد دیتاش خونده میشه.
از طرفی این که کل برنامه رو دوباره براساس ado بنویسین هم زمانبر هست و همه آبجکتهای اکسس هم الزاما با این روش کار نمیکنن.
پس بدنه برنامه رو دست نزنین و فقط بخش authentication رو با ado پیاده کنین (اگر اصرار به نگهداری دیتا کاربران در اکسس هست).
---------
قدرت اکسس در سادگی و سریع به پاسخ رسیدن هست بخصوص در فرم های bound و گزارش سازی.
اگر قرار هست از اکسس فقط بعنوان اینترفیس استفاده بشه شاید ابزارهای دیگه انتخاب بهتری باشن.
درود بر شما به خاطر بزرگواری و صعه صدرتون ، ممنون بابت توضیحاتتون، پیروز و سر بلند باشید.