Защита БД от копирования

Jhon
Дата: 21.11.2009 09:24:37
Доброе время суток! Есть БД , нужно организовать защиту от копирования и сделать что то вроде ключа на флешку.Я с подобной задачей столкнулся впервые...Подскажите, хоть какие нибудь идеи и ресурсы где можно почитать..Идея такая, что эту БД будут распростронть , и она должна работать только у владельца конкретной флешки.
ё
Дата: 21.11.2009 10:18:19
...дык, а какие идеи Вы ещё хотите услышать?
вроде, Вы всё и сформулировали...
1. пишем процедуру, проверяющую ключ (или, например - серийник флешки)
2. цепляем её в AutoExec
3. если не совпадает, или не найдена флешка - Application.Quit

...ну и с шифтом нада разобратся..
Jhon
Дата: 21.11.2009 10:21:33
А примеры этих процедур можно?
я с Microsoft Access не работал.. я с Oracle работаю..
БД не моя.. мне нужно сделать защиту....
mds_world
Дата: 21.11.2009 10:26:56
1. Сделать функцию, типа такой
Public Function FlashReady()
    Dim AllDrive 
    Dim MyDrive 
    Dim fs

    FlashReady = False    
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set AllDrive = fs.Drives
    For Each MyDrive In AllDrive
        If MyDrive.IsReady Then
            If MyDrive.SerialNumber = "-861519595" Then FlashReady = True
        End If
    Next MyDrive
    If Not FlashReady Then Application.Quit
End Function
Эта функция делает выход из БД. Обратите внимание, что прямо в ней, в коде зашит серйный номер флэшки. Он выделен в коде. Для каждой флэшки надо прописывать туда свой.

1. Создать в БД макрос Autoexec, в него поместить эту функцию.

3. Сделать MDE, чтобы никто не мог менять код
ишо варьантик
Дата: 21.11.2009 10:48:39
это правда для Экселя,
но в Аксе - аналогично
Sub A()
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk", , 48)
i = 0
For Each objItem In colItems
i = i + 1
Cells(i, 1) = objItem.Caption
Cells(i, 2) = objItem.Description
Cells(i, 3) = objItem.DeviceID
Cells(i, 4) = objItem.DriveType
Cells(i, 5) = objItem.FileSystem
Cells(i, 6) = objItem.InstallDate
Cells(i, 7) = objItem.FreeSpace
Cells(i, 8) = objItem.MediaType
Cells(i, 9) = objItem.PNPDeviceID
Cells(i, 10) = objItem.Name
Cells(i, 11) = objItem.PNPDeviceID
Cells(i, 12) = objItem.PowerManagementCapabilities
Cells(i, 13) = objItem.PowerManagementSupported
Cells(i, 14) = objItem.ProtocolSupported
Cells(i, 15) = objItem.Status
Cells(i, 16) = objItem.StatusInfo
Cells(i, 17) = objItem.SystemCreationClassName
Cells(i, 18) = objItem.SystemName
Cells(i, 19) = objItem.TimeOfLastReset
Cells(i, 20) = objItem.VolumeDirty
Cells(i, 21) = objItem.SystemName
Cells(i, 22) = objItem.VolumeName
Cells(i, 23) = objItem.VolumeSerialNumber
Next
End Sub
Jhon
Дата: 29.11.2009 11:57:12
Доброе время суток..
mds_world Воспользовался Вашим примером..
ниписал макрос, который вызывает функцию..
в ней прописал серийный номер флешки..
программка с винта не запускается.. но и с флешки тоже...
у меня вопрос: Может дело в кавычках? или может я не тот номер флешки прописал?
и как файл MDE, не переделывая проект?
зы Номер флешки узнал, при помощи программки ChipGenius_v3.0..
mds_world
Дата: 29.11.2009 13:12:25
Jhon,
Я не знаю ChipGenius_v3.0. Номер флешки узнавал так:
Public Sub SpecificationsNet()

Dim AllDrive 
Dim MyDrive
Dim fs
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set AllDrive = fs.Drives
    For Each MyDrive In AllDrive
        If MyDrive.IsReady Then
            Debug.Print MyDrive.DriveLetter & "| "; MyDrive.SerialNumber & "| "; ; MyDrive.VolumeName
        End If
    Next MyDrive
End Sub
В распечатке специально отделил серийный номер вертикалями, чтобы он не путался.
Кстати, у флешек серийный номер может быть с тире впереди него. Тире тоже элемент номера.

И все работает.
Igor Mitichev
Дата: 29.11.2009 13:58:12
mds_world
Кстати, у флешек серийный номер может быть с тире впереди него. Тире тоже элемент номера.

:) Не только у флешек:
C:\temp>cscript //nologo number.vbs
C: -1599066061 |
D: -2015005768 | TazWanted
G: 1212492044 |
X: 39584432 | root

C:\temp>type number.vbs
Dim AllDrive
Dim MyDrive
Dim fs
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set AllDrive = fs.Drives
    For Each MyDrive In AllDrive
        If MyDrive.IsReady Then
            Wscript.echo MyDrive.DriveLetter & ": " & MyDrive.SerialNumber _
                         & " | " & MyDrive.VolumeName
        End If
    Next
C:\temp>
PWW
Дата: 29.11.2009 14:23:38
Уважаемые защитники, а как быть с виртуальными машинами? Там что то можно проверить, есть там какие нибудь номерки для проверки?
Jhon
Дата: 29.11.2009 15:06:40
номер флешки я узнал так
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive",,48) 
For Each objItem in colItems 
   If objItem.InterfaceType = "USB" Then
   MsgBox "ID: " & Split(objItem.PNPDeviceID,"\")(2)
   End If
Next
цифры савподают..
а все равно не получается..