Just to add my 2 cents on the whole Access Security debate...
I don't believe that any of the examples listed above are sufficiently secure on their own. That's why I suggest using a hybrid of the systems to secure your databases. I know this maybe overkill and it would be easier to use something like SQL server, but for those of us that do not have this option, this will help keep you data secure. Unfortunately I do not have a copy of this that I can forward to anyone but I can try to explain the concept.
I first created a MDE file that has no security placed on it (we will call this the LoginDB). The LoginDB is simply a program and form to allow access to the MainDB (the reason I don't have a copy of this to send out is that I since converted the LoginDB into a VB app to speed up the login process, but this can all be done from Access DB's). Security to the LoginDB file is handled by only installing it on the PC's of the user's who require access to the database. The LoginDB opens with a login form requesting the user's User Name and Password (I actually pull the user's User Name from their login to our Novel system as an added level of security. You must be logged into the network as a valid user prior to accessing the database). I then have the program wright a temporary text file to the users PC containing some type of changing code (I'll explain this shortly). I use a combination of the user's User Name and the date from the PC for the code. Now set up a second secure database (we will call this the PasswordDB) that contains a log of all users, their current passwords, the date the last time they changed their password, a list of the passwords used in the last six months, and weather or not this user has been locked out (i.e. due to exceeding the maximum number of failed logins). Then have the LoginDB use the PasswordDB to log any user who exceeds the maximum number of failed logins and check if the user is locked out. The LoginDB should then use the user's User Name and password to open the MainDB through Access's built in security. I then have the start-up of the MainDB open a hidden form (I have the PasswordDB do this process as well). This form should first check for the presents of the file the LoginDB wrote to your user's PC. If the file is not present or does not contain the properly encoded information have the code exit Access. This will keep anyone from entering your DBs from anything other than the LoginDB. If the MainDB (or PasswordDB) find the proper file, delete it, close the LoginDB and continue to the main menu. Of course you must have the MainDB and the PasswordDB encrypted, have the shortcut keys turned off, have the database windows hidden, use custom menu's to keep the user from the built in Access tools that will help them gain access to the code, and have the Access security properly set up with groups that have varying access levels. Then create a form from within the MainDB that allows an administrator to add new users, clear passwords, add or remove groups from users, and lock out or restore users rights. All of these functions log the information into the PasswordDB to properly track user writes that the built in security cannot (i.e. password aging, locking out of users after failed login attempts, and keeping the user from repeating passwords). I would also suggest making the MainDB a combination MDB and MDE. This will help speed up the application and help protect your code.
I have founds that this combination of a separate login MDE (or VB app) with Access's built in security gives me all of the values of each approach listed above with few of their draw backs.
I hope this at least gives some of you some ideas about other ways of approaching Access security.
BAKEMAN
![[pimp] [pimp] [pimp]](/data/assets/smilies/pimp.gif)