[ 
https://issues.apache.org/jira/browse/DERBY-866?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13166546#comment-13166546
 ] 

Rick Hillegas commented on DERBY-866:
-------------------------------------

Hi again Mike,

I would like to address some of your other concerns.

Let me start out by noting that no-one is forcing an application to use NATIVE 
authentication. The application has to opt into this scheme. If the application 
doesn't need authentication, then this feature will not affect it at all. If 
the application uses LDAP or a custom authenticator, then this feature has no 
effect either.

Like you, I have worked on systems which had a master database in addition to 
the application-specific databases. I share your anxiety about the complexity 
of those systems. Because of those anxieties, I resisted this approach for a 
long time. However, I have settled on this approach because it is nonetheless 
more appealing than the other alternatives which I listed above in my 
2011-11-22 comment. Option (I) is impossible to implement securely. Option 
(III) is not a solution at all, it just punts the problem back to the user. So 
I have settled on option (II).

This proposal tries not to tightly couple the databases. What is being 
discussed here is not a master database in the sense of the old systems which 
we used to work on. This is just a credentials database. In most systems which 
opt into NATIVE authentication, I suspect that there will only be one database. 
That is, for them the application database will do double duty as the 
credentials database too.

Of course, once we introduce the possibility of a separate credentials 
database, then developers may think up other uses for it and try to use it to 
perform some of the other functions of a master database. We will have to be 
vigilant about that feature-creep.

Let me address some of your other concerns.

o You observe that "a single database problem could prevent access to all 
databases". True enough. But this is just a special case of the fact that the 
authenticator, whatever it is, is a bottleneck and single-point-of-failure. 
LDAP could go down and so could a user-supplied custom authenticator.

o You observe that "now backup of a database becomes more complicated as it can 
be out of sync with the master db". Again, I do not see a new danger being 
introduced here. The linkage to the credentials database is no stronger than 
the linkage to LDAP or to a user-supplied custom authenticator.

o You ask, "are databases now not portable across systems, or only if combined 
with master db?" Again, the same response. No new danger is introduced other 
than the danger already experienced with LDAP and user-supplied custom 
authenticators. If you move your database to another system, then you must make 
sure that the authentication service is available there too. I would even go so 
far as to argue that NATIVE authentication is more portable than LDAP for the 
usual case of an application with a single database which serves as the 
credentials database. The credentials are in the database. Nothing could be 
more portable than that.

o You ask, "how does this affect replication?" I do not see any replication 
issues for a system which has only one database and which uses it as the 
credentials database. In systems which manage multiple databases in the same 
JVM, I do not think that replication failover has really been thought through. 
In those systems the slave database will be on a separate machine and will 
somehow have to be copied back to the system hosting the common JVM. After the 
slave database becomes usable by the common JVM, it will have access to the 
credentials database managed by that JVM. However, thank you for raising this 
topic. This is an area we will want to test.

o You ask, "can the master db be encrypted, and if so how do you get multiple 
keys from single connection?" Yes, it can be encrypted. As with any encrypted 
database, it will have to be booted by a super-user before anyone else can use 
it. Once the encrypted database has been booted, no-one else needs to supply 
the encryption key. For the common case of a system with one database which 
also serves as the credentials database, no additional hurdles are introduced 
by NATIVE authentication. For systems which manage multiple databases, the 
credentials database will have to be booted with an encryption key before 
anyone can do any work. But there is nothing special about this situation 
either. LDAP has to be booted and so does a user-supplied custom authenticator.

o You ask, "does collation of the 2 dbs have an effect, now do all dbs in the 
system need same collation?"  I don't see why. In Derby, user names are stored 
in SYSSCHEMAS.AUTHORIZATIONID. The string columns of Derby's catalogs are not 
governed by the collation used for user tables. Even if you enable a collation 
for user tables, Derby's catalogs continue to obey the comparison/sorting 
semantics of databases which don't use collations.

o You observe, "Having a separate db to me seems like even more administration 
for derby." I think that this is again a general comment about any 
authentication scheme. Yes, someone has to administer LDAP and the 
user-supplied custom authenticator.

o You observe, "Also for derby a database is a pretty heavy weight object in 
the system. A good Derby application is one that is embedded and uses a single 
database. This is the best case usage of Derby. Of course multiple databases 
are allowed and work but often lead to unexpected problems." Agreed. I expect 
that the usual use case will be an application with a single database which 
also serves as the credentials database.

o You continue, "Adding a 2nd db in a normal case may double the memory 
requirements of derby given the 1 cache per database model currently 
implemented, n background threads per active db, ..." Here we are talking about 
a system which has a separate credentials database. That would be a system 
which is already managing multiple Derby databases.

Hope that this helps allay your concerns.

Thanks,
-Rick

                
> Derby User Management Enhancements
> ----------------------------------
>
>                 Key: DERBY-866
>                 URL: https://issues.apache.org/jira/browse/DERBY-866
>             Project: Derby
>          Issue Type: Improvement
>          Components: Services
>    Affects Versions: 10.2.1.6
>            Reporter: Francois Orsini
>            Assignee: Rick Hillegas
>         Attachments: Derby_User_Enhancement.html, 
> Derby_User_Enhancement_v1.1.html, DummyAuthenticator.java, 
> UserManagement.html, UserManagement.html, UserManagement.html, 
> derby-866-01-aa-sysusers.diff, derby-866-01-ab-sysusers.diff, 
> dummyCredentials.properties
>
>
> Proposal to enhance Derby's Built-In DDL User Management. (See proposal spec 
> attached to the JIRA).
> Abstract:
> This feature aims at improving the way BUILT-IN users are managed in Derby by 
> providing a more intuitive and familiar DDL interface. Currently (in 
> 10.1.2.1), Built-In users can be defined at the system and/or database level. 
> Users created at the system level can be defined via JVM or/and Derby system 
> properties in the derby.properties file. Built-in users created at the 
> database level are defined via a call to a Derby system procedure 
> (SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY) which sets a database property.
> Defining a user at the system level is very convenient and practical during 
> the development phase (EOD) of an application - However, the user's password 
> is not encrypted and consequently appears in clear in the derby.properties 
> file. Hence, for an application going into production, whether it is embedded 
> or not, it is preferable to create users at the database level where the 
> password is encrypted.
> There is no real ANSI SQL standard for managing users in SQL but by providing 
> a more intuitive and known interface, it will ease Built-In User management 
> at the database level as well as Derby's adoption.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to