Hi Damian,
You may be able to get what you want by doing the following:
1) Create a table which stores credentials and roles, as you've described
2) Write a user-defined authenticator, which uses that table in order to
perform database-side authentication
Plugging in a user-defined authenticator should be easy. You need to
write a class which implements
org.apache.derby.authentication.UserAuthenticator. This is described in
the Developer's Guide:
http://db.apache.org/derby/docs/10.5/devguide/devguide-single.html#cdevcsecure42374
Just scroll down to the section which shows an "Example of setting a
user-defined class".
Hope this helps,
-Rick
Damian Hofmann wrote:
Hi
I'm new to derby an have a question about extending user authentication.
I'm developing a multiuser rich client application that connects
directly to a derby server. The clients should authenticate themselves
via user name and password. Business logic requires, that each user is
given a user role. The user role tells the client, what features the
user may use and what features aren't permitted. My current idea is,
to create a user table with user name, password-hash and user-role.
This should work fine for users, that only use the client application.
But I think there is a problem with this. The whole
authentication-logic only exists in the clients. The server still
isn't protected. Anyone with some knowledge about SQL can connect the
database server and do anything, ignoring the user permissions
completely. From the developers guide I've learned, that derby offers
an authentication mechanism to authenticate users to the database
system. This should prevent this scenario.
I don't know how to best combine derby's user authentication with my
user roles table. Is there a way to extend the user authentication in
a way, not only user name and password are stored, but also additional
data? Or do you see another (better) way to satisfy both requirements?
Do I realy have to manage two sets of user data?
Thanks for your advise
Damian