PDA

View Full Version : سوال: مخفی کردن انتخابی Tabel در بانک اطلاعاتی



behzad5952
جمعه 13 اردیبهشت 1392, 15:03 عصر
با سلام :
کسی از دوستان میتونه کدی پیشنهاد کنه که بشه Tabel ها رو بصورت انتخابی مخفی کرد و بلعکس...!
من جستجو کردم ولی کد کاربردی نتونستم پیدا کنم.

behzad5952
سه شنبه 17 اردیبهشت 1392, 15:57 عصر
کسی نیست بتونه راهنمایی ارائه بده...!

alirezabahrami
سه شنبه 17 اردیبهشت 1392, 22:34 عصر
با سلام :
کسی از دوستان میتونه کدی پیشنهاد کنه که بشه Tabel ها رو بصورت انتخابی مخفی کرد و بلعکس...!
من جستجو کردم ولی کد کاربردی نتونستم پیدا کنم.
سلام
برای مخفی کردن از کد زیر:


Application.SetHiddenAttribute acTable, "TableName", False

و برای ظاهر کردن آن از کد زیر:


Application.SetHiddenAttribute acTable, "TableName", True

تذکر:گزینهhidden objectsازمنوی tools/options باید از حالت انتخاب خارج شود.
موفق باشید

Abbas Amiri
سه شنبه 17 اردیبهشت 1392, 23:13 عصر
سلام

البته روش به اصطلاح سوپر مخفی رو هم میتوانید با جستجو پیداکنید که به غیر از کد نویسی نمتوان آنرا تغییر داد.

behzad5952
چهارشنبه 18 اردیبهشت 1392, 01:04 صبح
جناب alirezabahram (http://barnamenevis.org/member.php?90573-alirezabahrami) عزیز من از آفیس 2007 استفاده میکنم ولی این کد کار نکرد.
از مسیر زیر هم گزینه ای که گفتید رو بایستی فعال می کردم نه غیر فعال. (درست بوده ؟)
office button / access option / current database / navigation option / show hidden objects




روش سوپر مخفی هم که جناب آقای Abbas Amiri (http://barnamenevis.org/member.php?189381-Abbas-Amiri) فرمودند اشکالی که داشت این بود که پس از مخفی کردن و نمایش مجدد , فرم مربوط به تنظیمات نرم افزار من که داخلش چند تا فیلد Attachment داشتم غیر فعال میگردند و تنها راهی که من تونستم اونها رو دوباره Active کنم این بود که در Tabel مربوطه یه فیلد جدید با ماهییت Attachment ایجاد کنم جدول رو ذخیره و اجرا کنم و بعد سایر فیلدهای Attachment فعال میگردید و محتویاتشون نمایش داده می شد
(من فکر میکردم که شاید مشکل از فرم باشه ولی Tabel مرتبط رو هم که بصورت مستقل کنترول کردم فیلدهای Attachment مقدارشون صفر بود و غیر قابل اصلاح)

لطفا راهنمایی کنید.
با تشکر

alirezabahrami
چهارشنبه 18 اردیبهشت 1392, 20:09 عصر
[QUOTE=behzad5952;1763044]جناب alirezabahram (http://barnamenevis.org/member.php?90573-alirezabahrami) عزیز من از آفیس 2007 استفاده میکنم ولی این کد کار نکرد.
از مسیر زیر هم گزینه ای که گفتید رو بایستی فعال می کردم نه غیر فعال. (درست بوده ؟)
office button / access option / current database / navigation option / show hidden objects
سلام
در اكسس 2007 هم تست شد ، مشكلي ندارد.
موفق باشيد

Abbas Amiri
چهارشنبه 18 اردیبهشت 1392, 23:15 عصر
سلام آقای بهرامی

تصویر رو تعویض بفرمایید , شات اشتباه هستش

سلام جناب آقای امیری



توضیح بیشتری میفرمایید

ممنون - موفق باشید

با سلام

منظورم همان دستور tdf.Attributes = dbHiddenObject هست که در پست زیر هم آمده :
http://barnamenevis.org/showthread.php?309017-%D8%B9%D8%AF%D9%85-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D8%A8%D9%87-%D9%81%DB%8C%D9%84%D8%AF-%D9%87%D8%A7%DB%8C-table&p=1374530&viewfull=1#post1374530

Abbas Amiri
پنج شنبه 19 اردیبهشت 1392, 01:46 صبح
یعنی حتما باید طرف از همین روش استفاده کنه و نمیشه به طریقی دیگه این کار رو انجام داد .

قاعدتا اگر شما محیط کدنویسی رو ببندید , چون شما عنوان فرمودید به غیر از کد نویسی نمیشه اون رو تغییر داد , پس حتماً روش نفوذ به اون فوق العاده سخت میشه ؟!


سلام جناب آقای پیروزمهر
گویا درگیر بگومگو هستید و متوجه عرض بنده نشدید .
همانطور که ملاحظه می کنید جداول فقط در پنجره دیتابیس همان فایل و همچنین Import فایلهای دیگر غیرقابل رویت میشود ولی از طریق فایلهای دیگر با دستور OpenDatabase میتوان به لیست جداول و دیتای آنها دسترسی پیدا کرد

Abbas Amiri
پنج شنبه 19 اردیبهشت 1392, 02:03 صبح
سلام آقای امیری

نه نه , نگران نباشید درگیری وجود نداره , بنده کاملا حواسم به عرائض شما هستش



پس کد وجود داره . دقیقا همین کد رو میخوام اینجا قرار بدید ( البته اگر براتون مقدوره )

ممنون

نمونه کد خدمت شما تقدیم میشود


Sub OpenExternalTable(strExternalPath As String, TableName As String)
Dim db As DAO.Database ', tdf As TableDef
Dim rs As Recordset
Set db = DBEngine.OpenDatabase(strExternalPath)
'Set tdf = db.TableDefs(TableName)
Set rs = db.OpenRecordset(TableName)
Do Until rs.EOF
For Each fld In rs.Fields
Debug.Print fld,
Next
rs.MoveNext
Debug.Print
Loop
Set db = Nothing
End Sub

alirezabahrami
پنج شنبه 19 اردیبهشت 1392, 15:05 عصر
سلام

خوب TableName رو از کجا میگیرید ؟ فراموش نکنیم جدول مخفیه و شما نامش رو نمیدونید پس فرمول فوق بدین شکل منتفیه و ....

الی ایحال ادامه بحث رو قطع میکنم تا زمان شما هم تلف نشه

در مجموع ضریب امنیتیش خصوصا در نسخه های 2003 خیلی پایینه , و در نسخه های بالاتر , بهبود یافته تر

ممنونم از همراهیتون
سلام
اینکار ازطریق ایجاد حلقه For Each .....Next برای تمام جداول و ایجاد شرط در این حلقه برای جداولی که مخفی هستند شدنیه.
نمونه ضمیمه در خصوص مخفی نمودن و آشکار نمودن جداول یک دیتابیس است که از نام آنها بی اطلاع هستیم.
البته باید عرض کنم این فایل را از زوایای مختلف بررسی نکردم و صرفاً در خصوص اینکه اگر نام جداول مخفی شده را ندانیم چگونه باید آنها را آشکار کنیم تهیه نمودم.
یاعلی

Abbas Amiri
پنج شنبه 19 اردیبهشت 1392, 19:16 عصر
سلام

خوب TableName رو از کجا میگیرید ؟ فراموش نکنیم جدول مخفیه و شما نامش رو نمیدونید پس فرمول فوق بدین شکل منتفیه و ....

الی ایحال ادامه بحث رو قطع میکنم تا زمان شما هم تلف نشه

در مجموع ضریب امنیتیش خصوصا در نسخه های 2003 خیلی پایینه , و در نسخه های بالاتر , بهبود یافته تر

ممنونم از همراهیتون

با سلام مجدد

متاسفانه تنها یک پسورد باحداکثر تعداد وتنوع کاراکتر می تواند تاحدودی دیتابیس اکسس رو از نفوذ به به آن محافظت کند . هنوز امتحان نکرده ام که آیا با شیء VBE میتوان در یک محیط رمزگذاری شده VBA به ماژولها و توابع دسترسی پیداکرد یانه؟ که البته احتمالا ممکن نخواهد بود . البته دراینجا روی سخنم با اکثریت مبتدی کاربران تالار است . که همه خوب می دانیم در بحث امنیت اکسس چه کسی حرف اول را دراینجا میزند.

روال زیر هر دیتابیس اکسس اعم از mdb, mde, accdb, accde را فقط بشرط پسورد نداشتن بروی دیتابیس باز میکند و هرآنچه با currentDb در دیتابیس خودتان انجام میدهید ، بکار خواد بست .
در اینجا فقط لیست جداول و اسامی فیلدها و تمام رکوردهای یک دیتابیس اکسس را نمایش خواهد داد .
چنانچه یک نمونه از دیتابیس را با(" CreateObject("Access.Application ایجاد کنید و همراه با OpenDatabase تمام توانائیها وابزار را دراختیار خواهید داشت.
لازم بذکر است چنانچه پسورد را داشته باشید هم میتوانید با اندکی تغییر در دستور OpenDatabase فایل را بازکنید .



Sub OpenExternalDbTables(strExternalPath As String)
Dim db As DAO.Database, tdf As TableDef
Dim rs As Recordset, fld As DAO.Field
Set db = DBEngine.OpenDatabase(strExternalPath)
For Each tdf In db.TableDefs
If tdf.Attributes = 0 And Left(tdf.Name, 1) <> "~" Then
Debug.Print "************************************************** *****************"
Debug.Print "********* Table Name: " & tdf.Name & " **********"
Set rs = db.OpenRecordset(tdf.Name)
Debug.Print "////// Field List //////"
For Each fld In rs.Fields
Debug.Print fld.Name,
Next
Debug.Print
Debug.Print " Records :"
Do Until rs.EOF
For Each fld In rs.Fields
Debug.Print fld,
Next
rs.MoveNext
Debug.Print
Loop
End If
Next
Set db = Nothing
End Sub

حمیدرضاصادقیان
جمعه 20 اردیبهشت 1392, 19:53 عصر
سلام.
این صحبتهاییی که من حذف کردم هیچ ارتباطی به موضوع گفتگو نداشت و به جدل تبدیل شده.
خواهشا از بیان این جور مطالب در پستها بپرهیزید تا مجبور به برخورد نشیم.
دوستان هم نیازی نیست بخوان به پست من جواب بدن.
اگر اینجور موارد هست میتونید در پیام خصوصی مطرح کنید.
اگر بازهم ادامه پیدا کنه مجبورم تاپیک رو قفل کنم.