What does ADP offer?

jal

Registered User.
Local time
Today, 15:11
Joined
Mar 30, 2007
Messages
1,709
I haven't used ADP but in Access 2003, at least, it seems to have something very valuable to offer - namely that the user can't edit the tables, he can't change the design, nor can he alter the data.

Blocking the user from direct contact with the tables would seem to me a huge security goal in an enterprise environment.

Is there another way to achieve this security goal without ADP? If so, what is it?

I mean, I suppose you could create an MDB file with no linked tables and then use pure code to connect to SQL server. Here too the user wouldn't have direct access to the tables but, in this case, how would you create a bound form if there are no linked tables present? (Previously I myself had no zeal for bound forms but am starting to see the error of my ways).


Any insight on this "design" question would be appreciated.
 
I may be wrong but I don't think an ADP necessarily prevents a user from fiddling with the tables unless the developer locks down the front-end.

http://office.microsoft.com/en-us/access/HP052731031033.aspx

Access's security model, in my opinion, has always been complicated and clunky in comparison to something like SQL Server or Oracle. Also, as a side note, Access's file-server / client-server model is -- for better or worse -- not in vogue, especially when it comes to multi-user, multi-location applications which are often characterized by a browser front-end, a mid-tier application server that contains business logic and, at the backend, a DBMS (or two).

Access still has its appeal, though....a code-free application can be built fast and, as evidenced by this forum, there are a lot of people on the market who can quickly get up to speed to support it...

Bound forms are not an Access-only phenomenon...VB6 and .NET apps can bind controls to data sources...

I think another down-side to ADP -- I recall Pat Hartman posting about this years ago -- is that it locks you into SQL Server...and thereby locks you out of other b-e databases, like Oracle...

Regards,
Tim
 
pono1 said:
I may be wrong but I don't think an ADP necessarily prevents a user from fiddling with the tables unless the developer locks down the front-end.

How would an ADP project provide an extra opportunity for the user to fiddle with the tables? (If you're talking about a user writing code such as VB script to access the tables, he could do that even without the ADP so the point is moot).
 
Extra opportunity? Not sure it does...same opportunity is how I read it from this blurb (excerpted from page linked to below)...

"Working with an Access project is very similar to working with an Access database...Once you connect to an SQL Server database, you can view, create, modify, and delete tables, views, stored procedures, user-defined functions, and database diagrams by using the Database Designer, Table Designer, Query Designer, Query Builder, and SQL Text Editor..."

Regards,
Tim
 
Personally, I wouldn't bother with ADP.

1) It hasn't been updated and doesn't seem likely to be in any short future.

2) It's more limited in functionality than a .mdb or .accdb, and SQL Server 2005 broke several enchancement.

3) We're better off using the proper tool to manage SQL Server; SSMS and leaving only front-end development on Access.

As for security, this can be mostly fixed by distributing a MDE that requires a password to linked tables that users doesn't supply themselves, and a two-MDW approach which grant only permission to edit tables to the developer and I don't distribute MDW to users so they have no way of breaking MDW because it's not even distributed.
 
Banana; said:
As for security, this can be mostly fixed by distributing a MDE that requires a password to linked tables that users doesn't supply themselves, and a two-MDW approach which grant only permission to edit tables to the developer and I don't distribute MDW to users so they have no way of breaking MDW because it's not even distributed.

Thanks Banana. I'm not sure how to set that up as yet but I suppose I'll cross that bridge when I come to it. :)
 
I wouldn't spend a lot of time with the ULS because the .accdb format does not support it. You can use A2007 and still use ULS but ONLY if you stick with the .mdb format. So your choice is ULS or the new features of A2007.
 
Just to add to Pat's point, if I were to use .accdb where ULS is obsolete (how unfortunate, while it wasn't that great of a security mechanism, it was quite serviceable as a permission mechanism), database password (which has been strengthened in 2007, no?) could be used. Provided that you have configured so to not save the password in ODBC connection and users never know what that password is, we could get close to the same model as I proposed earlier in that it'd prevent access to tables outside the Access environment and outside the file itself (e.g. linking with another file for instance).

In the model I described, I simply made the ODBC password for each user a hash derivative of their password to log in to the Access file, so they were unwittingly supplying the password without actually knowing what it, and being a quite long string of random alphanumeric, it was quite better for security. With the database password, it would mean everyone would have to share the same password if we don't want to save the password (bad, bad idea. Basically hiding your key under the doormat. No thanks.) as I'm not aware of any algorithms that gives us X strings that would result in same string.
 
Currently the IT dept at my job only uses Visual Studio (VB6 and VB.Net). They don't use Access. I was trying to figure out whether Access is compatible with their arrangement.

You mention a "password" but I suppose they don't use a sql server password as they seem to rely on Windows Authentication. A lot of their "security" is probably the assumption that most users wouldn't be savvy enough to find our sql server and log into it, combined with a very thorough data-backup system. At least there is no blatant display of the tables as seen in an unsecured MDE file. I think they would be relucatant to use Access for fear of such exposure, and I was therefore hoping to be able to reassure them that an Access front end can easily be made secure.

However, as all this security stuff is so confusing to me, I feel like I'm getting in over my head...
 
Hopefully some information will help clear up the confusion.

First, we must realize there more than one security mechanism at play here. At most, there can be three;
  • Windows Authentication
  • RDBMS Security Model
  • Access Security

There are several ways to implement security for specific needs, and that can involve one, two or all mechanisms.

The thing is that each mechanism, at least out of the box, is ignorant of other mechanism, and will not in general interact with other mechanisms. It only cares that its own set of credentials is satisfied, regardless if the other mechanism' sets of credential were. That is a important point here.

Here's a common implementation: Some may not even bother with Access security at all, deigning to put the Access file in a folder managed by Windows permissions so workers who do not need to use that database can't open it, and workers who need it can use it. This implementation is sufficient for where we trust the workers to be honest with their data processing and there is no need for giving different permission upon same table to different groups of worker.

This should hint that the more complex interaction we have with a database, so will be the security.

Going to SQL Server; it's special because it does integrate Windows Authentication with its own security mechanism, so for that context, 1 and 2 in the list can be combined. But merely logging in Windows does not give you the golden ticket to the tables in SQL Server. You still have to connect to the source, and it *will* check your credentials at time of connecting.

In case of Access connecting to RDBMS back-end, Access can allow us to save the password in the connection string. This can be a good or bad thing, depending on our specific security needs. If we never ever want a dialog from the RDMBS to pop up asking user for the password, saving password is certainly one way. This still applies even if we use Windows authentication. In such cases, the password is stored as part of Connection string, which is stored in Connect Property of any TableDef or in Connect column of hidden system object MSysObject.

In cases where we do not want the password for connecting to RDBMS to be saved, we can do so in two ways (or combine both for redundancy):
  • Writing the DSN, omitting the password and asking the user to fill it in
  • Implement your own login windows and pass it to the connection string

In SQL Server's case of using Windows authentication, you don't actually need to log in but this should still prevent the information about Windows login being stored inside Access.

Where does Access security comes in the picture? Nothing. It's not even relevant because at this point, we're still talking about logging to the RDBMS and accessing the data and thus still in context of RDBMS security mechanism.

Does it mean that there's no point of using Access's security? Hardly. ULS still can be usable as a permissions manager to specific Access object; you could deny all permissions to the tables itself and give users permission to the forms only thus ensuring that they don't edit the table directly. This is something that Windows and RDBMS security cannot stop because once you've already logged in and connected, you are now past their gate. To put this bluntly- they don't know and don't care about the manner of how data is modified as long their *own* credential is satisfied. Thus, Access (and as well as any front-end clients) must manage their own object and ensure that users only go through the proper channels without getting cute and using shift bypass or linking to the table or whatever they come up with circumventing the security.

But that's not the only approach we can take, as this require us implement all (or at least just RDMBS's and Access's) security mechanism and can be labor intensive for little gain (and if company can't trust their employees, then they probably have bigger problems). One lazy implementation could be to require a timestamp and userstamp for any and all data modification, allowing us to stay within RDBMS's security mechanism, and if one user goes rogue, it's on the trail and we can rollback the changes and fire the bastard.

I hope this help illustrate few possible scenarios, and how each security mechanism can be used to provide control over the access, and understanding how they interact (or don't).
 
PS Regarding the statement about IT using VB6 or VB.Net and figuring if Access fits in the arrangement: It's worth pointing out that even VB6 and VB.Net has to use the same or at least similar protocols Access uses to access the RDBMS. While VB6 or VB.Net may be able to use Native client library instead of ODBC connection, they are still subject to same RDBMS's security mechanism.

And about the concern of seeing the table in an unsecured MDE:

That's the point of not saving password. This may only at best give us names of table but we can't open it because it'd then ask us for a password. One possible concern, however, is that the dialog may tell too much (e.g. where the server is located, what username is used, etc). In such cases, a workaround is to link table only after a successful login at expense of a slightly longer startup time and deleting all tables when we're done.

In case of MySQL as backend, I can use DNS-less connection and truncate the information saved to only three things: server, database name and the ODBC driver. The server was named '127.0.0.1' which is the loopback address, so this does not actually tell users where the server is actually located because I managed the connection separately. Furthermore as indicated earlier, even if the user was able to figure out where the server was located, and fill in the database name, username, they don't know the password because when they log in to Access, I take their password and hash it into a different string and use that as a password for logging to MySQL, and of course failed login will be logged.

Obviously, this isn't really relevant when we're talking about SQL Server using Windows authentication, but I'll leave it up to you to figure out what will work for your specific security needs.
 
Thanks again, Banana !!! It will take me a little while to digest everything you said.
 
Banana has given good insight into the Access/SQL Server security issues.

I would like to share what I have been using for ADP project. I have been using ADP since about a year now and I have implemented 4 projects. For managing security, I use a separate database called login-control which stores connection information for other SQL Server 2005 databases in the coded form. Besides connection information, I also store application (ADP) configuration information in the login-control database. Each ADP project first connects to the login-control database and retrieves the connection information for the application database. The coded information is transformed at this stage and is used to connect to the application database after closing the connection to the login-control database.

On start-up of a ADP project, I clear all connections, create connection strings afresh and then open the connection to the login-control database. Before, quitting the ADP project, connection information is again cleared.

I have also disabled the shift-key start-up, placed a password on project code and disabled all menus including the main menu. Access main menu is enabled just before quitting the ADP project.

.adp file is stored on a shared folder. Users do not run the adp file directly. It is done through a CMD file which each time copies the adp file into a MS Windows temp folder under "local settings" folder and then executes it. This mechanism helps in distributing changes and to some extent keeping the adp file hidden. Before exiting the CMD, the .adp file is deleted from the temp folder.

I have also created an ADMIN CENTRE form to adminster the adp application. ADMIN CENTRE is accessible only to selected users such as developer or application administrator.

I admit that the method I am using is not full proof and may require further refinements.

Ashok
 
  • Like
Reactions: jal
Banana has given good insight into the Access/SQL Server security issues.

I would like to share what I have been using for ADP project. I have been using ADP since about a year now and I have implemented 4 projects. For managing security, I use a separate database called login-control which stores connection information for other SQL Server 2005 databases in the coded form. Besides connection information, I also store application (ADP) configuration information in the login-control database. Each ADP project first connects to the login-control database and retrieves the connection information for the application database. The coded information is transformed at this stage and is used to connect to the application database after closing the connection to the login-control database.

On start-up of a ADP project, I clear all connections, create connection strings afresh and then open the connection to the login-control database. Before, quitting the ADP project, connection information is again cleared.

I have also disabled the shift-key start-up, placed a password on project code and disabled all menus including the main menu. Access main menu is enabled just before quitting the ADP project.

.adp file is stored on a shared folder. Users do not run the adp file directly. It is done through a CMD file which each time copies the adp file into a MS Windows temp folder under "local settings" folder and then executes it. This mechanism helps in distributing changes and to some extent keeping the adp file hidden. Before exiting the CMD, the .adp file is deleted from the temp folder.

I have also created an ADMIN CENTRE form to adminster the adp application. ADMIN CENTRE is accessible only to selected users such as developer or application administrator.

I admit that the method I am using is not full proof and may require further refinements.

Ashok
That's very useful information. I'll play around with some of these ideas to find out what works for me.
 
Just to point out all what ak_ls suggested, which are good ones, can also be done in a .mdb/.accdb as well. :)
 

Users who are viewing this thread

Back
Top Bottom