[EMAIL PROTECTED] wrote on 10/12/2005 10:56:43 AM:

> 
> 
> 
> 
> Hello,
> 
> Is it possible for a MySQL connection to request a downgrade in 
privileges?
> What I'd like to be able to do is create one database user account for a
> database application with read and write privileges to the tables, but 
if
> an application user logs in who only has read access, then to downgrade 
the
> permission's on the SQL server for the database user to select only for
> that connection. I want to be able to give an added level of assurance 
that
> the user will not be able to write to the database even if the 
application
> controls are circumvented. As it is now, I have to create multiple 
database
> users and choose which one to connect to the database with based on the
> application users authorization level.
> 
> 

So are you saying that you would rather have each user share a direct 
database login with other users (granting them certain common rights) or 
do you want each of your users to have their own separate database login? 
I really don't think you want either.

As you describe it, your application is in charge of authenticating each 
user (not the database). That means that each user only gets the 
privileges that the application lets them have. If your application's 
security structure is not set up to deny privileges based on their login, 
then your application is poorly designed.

Your application's users should not have ANY direct access to the database 
on the backend unless you give them a database login to connect with AND 
they have the ability to connect directly to the database. The account 
your users use to connect to your application should not be a mysql user 
account. That should be something setup as a separate table in a separate 
database. Having at least two logins for each application is a wise 
precaution. One login can have read-only privileges while the other can 
have read-write privileges. Those would be mysql logins. The users should 
not have access to that information.

Your security model should look something vaguely like this:

         |||              |||
database |||  application ||| user
server   |||              |||
          ^                ^
     mysql login      application login

That way the user never "talks" directly to the database. All user 
interaction with data is filtered and controlled by the application. The 
user should only have the ability to do things in the application that the 
user has been given privileges to do. It's the application's 
responsibility to act like a firewall between the user and the database. 

Now, don't do something dumb and put mysql logins and passwords as plain 
text into an application that you install on the user's system. It is SO 
easy to read through a compiled file and get all of the plain-text strings 
and try them out. What would be better is if your user's never even had 
access to the code that talks to the database (not even as a file on their 
system). 

Please write back if any part of this is unclear.  I know the Bureau of 
Land Management has had problems in the past securing certain user-facing 
applications and I, and I am sure many others on the list, would like to 
help to keep you as safe as possible. 

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine

Reply via email to