preventing piracy of a db

goodhead

Registered User.
Local time
Today, 16:14
Joined
Feb 18, 2013
Messages
37
If you are to sell a db. What have people done to stop one person copying it to their mates.

I have a way in which they send me their name,lastname and email. I then have a separate db that genertates a code based on a maths calculation. The users db does same calc. Then a comparison is done. if they match the code they entered goes green. if codes not right it goes red.

I also have macro that swap tables round when run. so by default its limted to 10 records. When swapped its unlimted.

I just cant link the 2 functions. Ideally some way it will see the green code and then run the macro to swap tables to a full db.

Then the customer has a full db and is also tied to their name etc,


can any one help me link this.

Dan
 
Not really possible.

You can take steps to make it more difficult, but it really doesn't prevent the db from being transferred.

To protect your code and objects at a minimum you'd need to compile the database (ie. mde/accde). Hide/disable all built-in tables, menus, functional keys, navigation controls, etc.

Are the databases - server(you) and client(them) constantly connected? - ie. each time a client is opened - does it run a check against the server name/lastname/email to generate a new unlock code?

If it's a one time unlock code, what prevents client from unlocking the db, then copying the db in unlocked format?

If your question is how to link your two functions that swap tables (locked/unlocked) - please repost in the VBA question section -- and you'll probably want to provide additional details.

Good luck!
 
its just a one off unlock to a full database.
With there name in the forms, its less likely to be copied.

theres no online checking. Purely done locally with maths calcs.

i'll post in the vba posts




Not really possible.

You can take steps to make it more difficult, but it really doesn't prevent the db from being transferred.

To protect your code and objects at a minimum you'd need to compile the database (ie. mde/accde). Hide/disable all built-in tables, menus, functional keys, navigation controls, etc.

Are the databases - server(you) and client(them) constantly connected? - ie. each time a client is opened - does it run a check against the server name/lastname/email to generate a new unlock code?

If it's a one time unlock code, what prevents client from unlocking the db, then copying the db in unlocked format?

If your question is how to link your two functions that swap tables (locked/unlocked) - please repost in the VBA question section -- and you'll probably want to provide additional details.

Good luck!
 
Your idea is very good. You also can add a string based on the HD of the users computer. When they run the demo version you can capture the HD address and have them give it to you prior to unlocking the full version.

Code:
Function getDiskSN()
        Dim fso As Object, d As Object
10       On Error GoTo Err_getDiskSN

20      Set fso = CreateObject("Scripting.FileSystemObject")
30      Set d = fso.GetDrive(Environ("SystemDrive"))
40      getDiskSN = Hex(d.SerialNumber \ &H10000) & "-" & Hex(d.SerialNumber Mod &H10000)
50      Set d = Nothing: Set fso = Nothing

Exit_getDiskSN:
60        Exit Function

Err_getDiskSN:

90        Resume Exit_getDiskSN

End Function
 
Thanks for that. That sounds interesting. I struggle with code. Is it easy to implement?



Your idea is very good. You also can add a string based on the HD of the users computer. When they run the demo version you can capture the HD address and have them give it to you prior to unlocking the full version.

Code:
Function getDiskSN()
        Dim fso As Object, d As Object
10       On Error GoTo Err_getDiskSN
 
20      Set fso = CreateObject("Scripting.FileSystemObject")
30      Set d = fso.GetDrive(Environ("SystemDrive"))
40      getDiskSN = Hex(d.SerialNumber \ &H10000) & "-" & Hex(d.SerialNumber Mod &H10000)
50      Set d = Nothing: Set fso = Nothing
 
Exit_getDiskSN:
60        Exit Function
 
Err_getDiskSN:
 
90        Resume Exit_getDiskSN
 
End Function
 
Place the code in a Module and save the Module (within VBA editor choose Save from File menu or hit the floppy icon). To use it, you can either place = getDiskSN() in an unbound control on a form; using VBA you access it by setting a variable to it ctl = getDiskSN(); you could use it in a query expr1:=getDiskSN(); you can use it to concatenate to your already existing name,lastname and email text.
 
You are battling obscurity, not theft. Don't bother with security, you want everybody using your product and this is what I tell my customers, "please steal my code. Please get your friends using it, and get the friends of your friends using it."

Then when they want tweaks, they'll call you, and then you can bill them more with your awesome reputation.

You are battling obscurity, not theft.
 
I like what lagbolt said.

Another annoyance to the client is for you to enter some information in the Database that they have no access to.

Company Name and address is one. You could then place that info in a quite place of each Form and Report. Small Font and for colour a very light grey. Nothing that overly stands out but enough to show up and inform people who owns the data base.
 
I have a table called tbl-owner
this is where I store the registered owners details.
Would your code store the serial number here also?

I think would be nice to have a run once form if that's possible, asking for name surname and also in background record serial number to same table.

What happens when a user uses on another pc then? do they get message or just doesn't run?


Your idea is very good. You also can add a string based on the HD of the users computer. When they run the demo version you can capture the HD address and have them give it to you prior to unlocking the full version.

Code:
Function getDiskSN()
        Dim fso As Object, d As Object
10       On Error GoTo Err_getDiskSN
 
20      Set fso = CreateObject("Scripting.FileSystemObject")
30      Set d = fso.GetDrive(Environ("SystemDrive"))
40      getDiskSN = Hex(d.SerialNumber \ &H10000) & "-" & Hex(d.SerialNumber Mod &H10000)
50      Set d = Nothing: Set fso = Nothing
 
Exit_getDiskSN:
60        Exit Function
 
Err_getDiskSN:
 
90        Resume Exit_getDiskSN
 
End Function
 
You could store the serial number in a table. What you might consider is having some VBA code that takes the serial number, using some formula you create, converts it to something else. You also run the same formula on your end and give the user this new code for them to enter into your table tbl-owner. Then, every time the DB is opened, just compare the derived VBA of the current HD serial number to the number in your table and as long as they are equal, start the DB, otherwise give a message and follow that with closing the DB or defaulting into trial mode.
 
Thats pretty much what i been trying to do. minus the hard drive bits.
This is prooving to be one of the hardest parts to do in the entire database :(

I will try this out this week some time.

You could store the serial number in a table. What you might consider is having some VBA code that takes the serial number, using some formula you create, converts it to something else. You also run the same formula on your end and give the user this new code for them to enter into your table tbl-owner. Then, every time the DB is opened, just compare the derived VBA of the current HD serial number to the number in your table and as long as they are equal, start the DB, otherwise give a message and follow that with closing the DB or defaulting into trial mode.
 

Users who are viewing this thread

Back
Top Bottom