PDA

View Full Version : ایجاد محدودیت کپی شدن روی فایل



h1and1saman
شنبه 21 آذر 1394, 23:34 عصر
درود بر اساتید
من می خوام برا پایگاه داده ام که اکسس هست یه مقداری امنیت بدم:لبخندساده:
چطور میشه فایل رو انکریپت کنم یا بهتر اینکه غیرقابل کپی کنم در محل دیگر .و یا همچین چیزی

مثلا مثل برنامه هایی که فایل رو قفل می کنند که غیرقابل کپی کردن و پاک کردن و... میشه
شدنیه آیا؟

vbhamed
یک شنبه 22 آذر 1394, 11:19 صبح
سلام
غیر قابل کپی کردن در عمل موفقیت چندانی نداره مگر برای کاربران تازه کار
اما اگر بخواین اطلاعات رو نبینن می‌تونید اونها رو کد کنید، اینطوری کسی دسترسی به اطلاعات نداره و البته امکاناتی هم از شما گرفته میشه مثلا جستجو با دستورات Sql

h1and1saman
چهارشنبه 25 آذر 1394, 10:20 صبح
نه در حد افراد مبتدی هم بشه قفل کرد کافیه

علیرضا5
پنج شنبه 26 آذر 1394, 05:47 صبح
با سلام
سورس قفل کردن فابل در تالار موچوده ولی اگه فایل رو قفل کنی که دیگه کانکشن برقرار نمیشه
می تونی برا فایل اکسس رمز بذاری

roo.row
جمعه 27 آذر 1394, 19:02 عصر
با سلام
می تونید:
1-پسورد قرار بدید اگر سورسشو خواستید بگید براتون بزارم (رمز گذاری و باز کردن فایل رمزدار)
2-پسوند فایل رو به شکل زیر عوض کنید
l = App.Path + "\" + "data.mdb"
j = X + "\" + n + ".backup"
FileCopy l, j

n نام فایل و x پوشه ایجاد فایل

3- ساختار فایل رو به هم بریزید(اونرو به صورت متنی باز کنید و قسمت های ازش رو بهم بریزید (عوض کنید)و دوباره موقع خوندن درستش کنید
با تشکر

h1and1saman
جمعه 27 آذر 1394, 23:27 عصر
ممنون درسته کانکشن ایجاد نمیشه اما موقع اجرا برنامه اولین کدی که اجرا میشه باز شدن قفل خواهد بود
یعنی وقتی برنامه بسته میشه دیتابیس قفل میشه و وقتی برنامه اجرا میشه از حالت قفل درمیاد

عوض کردن پسوند دردی رو درمان نمی کنه
رمز دار کردن اگه درست کار کنه خوبه ممنون میشم سورسشو بزارید
راه سوم رو بلد نیستم اکه بتونید نمونه ای بزارید ممنو میشم

alirezabahrami
شنبه 28 آذر 1394, 07:47 صبح
سلام
انکریپت کردن فایل و غیر قابل کپی نمودن آن در زمان اجرای برنامه شدنی است فقط مشکلی که وجود دارد این است که برای اجرای فایل باید آن را دیکریپت نمائید( از حالت رمزنگاری خارج نمائید) در این حالت اگر به یکباره برق قطع شود و یا کامپیوتر را ریست نمائید بعد از روشن نمودن مجدد کامپیوتر فایل را در حالت دیکریپت شده میتوان اجرا نمود. و این اتفاق به این خاطر می افتد که شما در حالت عادی بعد از بسته نمودن برنامه ، فایل مربوط به پایگاه داده را به حالت انکریپت در می آوری و این پروسه در پایان بسته شدن برنامه انجام میشود ولی اگر در زمانی که برنامه در حال اجراست به یکباره برق قطع شود و یا سیستم ریست شود این پروسه ( دیکریپت نمودن فایل) انجام نمیشود .
یا علی

roo.row
شنبه 28 آذر 1394, 18:55 عصر
با سلام خدمت شما

اینو بالای فرمتون بزارید:

Private Const FILE_BEGIN = 0
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const OPEN_EXISTING = 3
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000

Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Private Declare Function FlushFileBuffers Lib "kernel32" (ByVal hFile As Long) As Long


در ابتدای فایل های دیتا با پسوند MDB عبارت Standard Jet DB وجود دارد پس می توان گفت :

Private Sub Command2_Click()
Dim hFile As Long
Dim bContent(1 To 2) As Byte
Dim FileLenght As Long
Dim Result As Long

hFile = CreateFile(Text1.Text, GENERIC_WRITE Or GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)

If hFile = -1 Then
MsgBox "Cannot open file", vbOKOnly, "Error "
Else
FileLenght = GetFileSize(hFile, 0)
If FileLenght > 0 Then
SetFilePointer hFile, 0, 0, FILE_BEGIN
ReadFile hFile, bContent(1), 2, Result, ByVal 0&
If Result <> 2 Then MsgBox "Error reading file ...": GoTo 10
End If




If StrConv(bContent, vbUnicode) = " Standard Jet DB " Then
SetFilePointer hFile, 0, 0, FILE_BEGIN
WriteFile hFile, ByVal "Backup", 2, Result, 0
FlushFileBuffers hFile
If Result <> 2 Then MsgBox "Error disableing file", vbOKOnly, "Error ": GoTo 10
MsgBox "Congradulation disabled file", vbOKOnly, "OK "
End If




End If
10
CloseHandle hFile
Label2.Caption = "The New file is " + Command2.Caption
End Sub
کد به هم ریزی را در با مشاهده می کنید فکر کنم معلومه اما خوب من زیاد بهم نریختم در کد با لا عبارت Standard Jet DB به Backup تغییر می کند و ویندوز فایل را باز نمی کند
علاوه بر آن در ساختار های جابه جایی می تونید جای کاراتر هارو عوض کنید مثلا بگید تمامی کاراکتر ها عوض بشن به این صورت که GHJK به KJHG تغییر کنه واون هم با یه لقه ایجاد میشه
کد باز گردانی :
Dim hFile As Long
Dim bContent() As Byte
Dim FileLenght As Long
Dim Result As Long

hFile = CreateFile(Text1.Text, GENERIC_WRITE Or GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)

If hFile = -1 Then
MsgBox "Cannot open file", vbOKOnly, "Error "
Else
FileLenght = GetFileSize(hFile, 0)
If FileLenght > 0 Then
SetFilePointer hFile, 0, 0, FILE_BEGIN
ReDim bContent(1 To 2)
ReadFile hFile, bContent(1), 2, Result, ByVal 0&
If Result <> 2 Then MsgBox "Error reading file ...": GoTo 10
End If



If StrConv(bContent, vbUnicode) = "Backup" Then

SetFilePointer hFile, 0, 0, FILE_BEGIN
WriteFile hFile, ByVal " Standard Jet DB ", 2, Result, 0
FlushFileBuffers hFile
If Result <> 2 Then MsgBox "Error disableing file", vbOKOnly, "Error ": GoTo 10
MsgBox "Congradulation enabled file", vbOKOnly, "OK "
End If




End If
10
CloseHandle hFile
ReDim bContent(0)
Label2.Caption = "The New file is " + Command3.Caption
با تشکر کد تقریبا همون کد قبل هست حالا دیگه به خلاقیت شما بستگی داره چه بلایی سرش بیارین ;)
اگر چیزی مبهم بود درخدمتم
با تشکر فراوان موفق باشید

h1and1saman
سه شنبه 01 دی 1394, 15:05 عصر
بسیار بسیار ممنونم از دوستان عزبر بسیار لطف کردید
من این کدها رو اضافه کنم به اول فرم .کجا بهش گفته میشه که کدوم فایل(دیتابیس) رو دستکاری کنه
یعنی من دیتابیسی با نام db.mdb در پوشه برنامه دارم چطوری به این کد معرفی بشه
ممنون

roo.row
شنبه 05 دی 1394, 22:10 عصر
با سلام
آدرس فایل در تکس 1قرار دارد
به ساختار hfile توجه کنید

1-
App.path + db.mdb
را به جای تکس یک بگزارید در کد

2-
آدرس را در تکس اول بریزید

با تشکر

h1and1saman
شنبه 12 دی 1394, 07:36 صبح
به جای text1.text قرار دادم کد گفته شدهApp.path + db.mdb رو اما فایل رو پیدا نمی کنه
درون تکس باکس هم همین متن رو میریزم بازم همونطوره
میشه راهنمایی بفرمایید دقیقا چی باید بنویسم .دستور مسیر دهی

h1and1saman
شنبه 12 دی 1394, 21:44 عصر
به جای text1.text قرار دادم کد گفته شدهApp.path + db.mdb رو اما فایل رو پیدا نمی کنه
درون تکس باکس هم همین متن رو میریزم بازم همونطوره
میشه راهنمایی بفرمایید دقیقا چی باید بنویسم .دستور مسیر دهی

roo.row
شنبه 12 دی 1394, 23:18 عصر
با سلام
دقیقا کجای کد مشکل دارید ؟
با تشکر

vbhamed
یک شنبه 13 دی 1394, 12:29 عصر
سلام
انکریپت کردن فایل و غیر قابل کپی نمودن آن در زمان اجرای برنامه شدنی است فقط مشکلی که وجود دارد این است که برای اجرای فایل باید آن را دیکریپت نمائید( از حالت رمزنگاری خارج نمائید) در این حالت اگر به یکباره برق قطع شود و یا کامپیوتر را ریست نمائید بعد از روشن نمودن مجدد کامپیوتر فایل را در حالت دیکریپت شده میتوان اجرا نمود. و این اتفاق به این خاطر می افتد که شما در حالت عادی بعد از بسته نمودن برنامه ، فایل مربوط به پایگاه داده را به حالت انکریپت در می آوری و این پروسه در پایان بسته شدن برنامه انجام میشود ولی اگر در زمانی که برنامه در حال اجراست به یکباره برق قطع شود و یا سیستم ریست شود این پروسه ( دیکریپت نمودن فایل) انجام نمیشود .
یا علی

سلام
به همین دلیلی که گفتید و دلایل دیگه انکریپت کردن کل فایل درست نیست، باید خود رکوردها رو انکریپت کنید و برای همین بود که گفتم امکان استفاده معمول از دستورات Sql از بین میره، البته بستگی به نوع انکریپت کردن هم داره و میشه با روشهای خاصی امکان استفاده از Sql رو هم تا حدی خوبی داشت

h1and1saman
دوشنبه 14 دی 1394, 08:09 صبح
مشکل من،اینه که وقتی تکس باکس رو مساوی =App.path + db.md وقتی می خوام کریپت کنه میگه فایل رو پیدا نمیکنم در صورتی که دیتابیس اکسس موجوده،در همون پوشه

vbhamed
سه شنبه 15 دی 1394, 10:00 صبح
سلام
بعد از app.path یک \ هم باید بزارید

roo.row
چهارشنبه 16 دی 1394, 12:18 عصر
با سلام
با تشکر از آقای vbhamed بله صحیح هست و شما باید اونجا از یه جداساز استفاده کنید
استفاده از کاراکتر "\" به صورت قرار دادی برای ساخت آدرس استفاده میشه پس ادرس دیتابیس شما میشه :
app.path + "\" + "db.mdb"]
با تشکر

alirezabahrami
چهارشنبه 16 دی 1394, 16:03 عصر
سلام
انکریپت کردن فایل و غیر قابل کپی نمودن آن در زمان اجرای برنامه شدنی است فقط مشکلی که وجود دارد این است که برای اجرای فایل باید آن را دیکریپت نمائید( از حالت رمزنگاری خارج نمائید) در این حالت اگر به یکباره برق قطع شود و یا کامپیوتر را ریست نمائید بعد از روشن نمودن مجدد کامپیوتر فایل را در حالت دیکریپت شده میتوان اجرا نمود. و این اتفاق به این خاطر می افتد که شما در حالت عادی بعد از بسته نمودن برنامه ، فایل مربوط به پایگاه داده را به حالت انکریپت در می آوری و این پروسه در پایان بسته شدن برنامه انجام میشود ولی اگر در زمانی که برنامه در حال اجراست به یکباره برق قطع شود و یا سیستم ریست شود این پروسه ( دیکریپت نمودن فایل) انجام نمیشود .
یا علی



سلام
به همین دلیلی که گفتید و دلایل دیگه انکریپت کردن کل فایل درست نیست، باید خود رکوردها رو انکریپت کنید و برای همین بود که گفتم امکان استفاده معمول از دستورات Sql از بین میره، البته بستگی به نوع انکریپت کردن هم داره و میشه با روشهای خاصی امکان استفاده از Sql رو هم تا حدی خوبی داشت

سلام
متعجم ، با توجه به توضیحی که در پست 7 داد شد و به نوعی در پست 14 ، استاد فرجام فر بر آن صحه گذاشتند باز همچنان اصرار بر روش انکریپت دارید .
دوست بزرگوار ! برای امنیت دیتابیس برنامه ات دو را پیشنهاد میشود :
1- راه اول همان کد نمودن اطلاعات است که استاد فرجام فر در پست 2 به درستی به آن اشاره نموده اند .
راه دوم ، ورژن 2007 و بالاتر را برای دیتابیس اکسس انتخاب کن و برای آن یک پسورد با استفاده ار ترکیب عدد ، حروف و علائم مجاز قرار بده .
بدست آوردن پسورد در ورژن های 2007 و بالاتر بشرطی که پسورد آن یک مقداری پیچیده باشد عملاً غیر ممکن است .
یا علی

h1and1saman
سه شنبه 22 دی 1394, 16:25 عصر
با تشکر از دوستان و اساتید عزیز
اگه در اکسس جدید مشکل امنیت حل شده که خیلیم خوب اما مشکل اینه که پسوندی که میده accdb هست و قابل استفاده در وی بی نیست یا اینکه من نتونستم استفاده کنم .اگه امکان پذیره ممنون میشم راهنمایی بفرمایید
عذر خواهی می کنم خیلی اذیت کردم

علیرضا5
سه شنبه 22 دی 1394, 23:38 عصر
کد ارتباط وی بی بی اکسس accdb


Adodc1.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & App.Path & "\Db\DBase.accdb;Jet OLEDB:Database Password=77153151607688"
Adodc1.RecordSource = "Select * From table1"
Adodc1.Refresh

alirezabahrami
چهارشنبه 23 دی 1394, 07:43 صبح
کد ارتباط وی بی بی اکسس accdb


Adodc1.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & App.Path & "\Db\DBase.accdb;Jet OLEDB:Database Password=77153151607688"
Adodc1.RecordSource = "Select * From table1"
Adodc1.Refresh


سلام
و از کد زیر هم بدون استفاده از Adodc :


Dim strpath As String
strpath = App.Path & "\" & "Database1.accdb"
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
Dim Rs As New ADODB.Recordset
conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" & strpath & ";Jet OLEDB:Database Password=MyDbPassword;"
conn.Open CS
Rs.Open "table1", conn, adOpenDynamic, _
adLockOptimistic, adCmdTableDirect
Rs.Close


یاعلی