On 8/20/12 1:07 PM, Thomas Hill wrote:
Hi,
I am trying create a database from scratch using the new native
authentication provider introduced with version 10.9.1.0.
What I tried after reading the docs was:
1st attempt) started the network server supplying
-Dderby.authentication.provider=NATIVE:myCredDB as property
passed on JVM command line.
The server started up, but when trying to connect
I am getting SQLState 4251I "Authentication cannot be performed
because the credentials database '<databaseName>' does not exist."
so my assumption the credentials database would be automatically
created doesn't seem to be correct.
2nd attemtpt: started the network server without specifying an
authentication provider and used ij to connect to server and
created a database myCredDB manually.
Shutdown the server and started it up again pointing at this
manually created credentials database and tried to create an
application database myAppDB.
Trying to do this I am getting authentication not possible /
invalid user. In both connection strings have I used the
same user (dbo) and password (derby).
Can someone please support and point me into the right direction
or potentially share a sample script that shows how to create an
application database which makes use of native authentication?
Thanks a lot in advance
Thomas
Hi Thomas,
I hope that Dag's response got you unstuck A little more context may help:
When you specify
-Dderby.authentication.provider=NATIVE:myCredDB
you are telling Derby that all connection requests should be
authenticated using credentials stored in myCredDB. This includes
requests to create new databases and requests to connect to existing
databases. Normally myCredDB has to exist before you can connect to any
database.
There is one exception, however, and this may be what was confusing you.
If the very first connection request is a request to create the
credentials database itself (myCredDB), then Derby behaves as follows:
o Derby creates myCredDB
o Derby stores the supplied credentials in myCredDB as the credentials
of the god-like system administrator.
What you did was slightly different, but the difference is important.
You tried to create an ordinary database, not the credentials database,
and it seems as though you were hoping that the supplied credentials
would be used to automatically create a new user. I can see that that
behavior would be useful. However, it would defeat the purpose of using
myCredDB to decide who is allowed to create databases in the first
place. Once the credentials database exists, only its users have the
power to create databases.
Keep asking questions if this feature is still confusing. Your feedback
will help us improve our documentation for this new feature. It would be
very helpful to us if you could tell us, in your own words, what extra
advice would help bridge the gap between what the docs say and what you
understood. That will help us fix the docs so that other users won't
have this frustrating experience.
Thanks,
-Rick