Bryan Pendleton wrote:

I applied your patch to the current trunk successfully, and spot-checked
a few of the various possibilities, and all seemed to be as you
described, so I am able to confirm that your patch works for me.

Thanks Bryan for reviewing this patch.

I had two follow-on questions, though:

1) On the client side, I was slightly surprised that this didn't
give me an error or a warning:

ij> connect 'jdbc:derby://localhost:1527/testdb;create=true;securityMechanism=4;user=bryan;password=bryan';

Is it actually passing the password to the server? Or simply ignoring
it on the client side?

So what is happening here is the client is doing the automatic upgrade of the security mechanism. Even though you explicitly specified that the securityMechanism=4, the client goes ahead and changes it to securitymechanism 3 and then flows across the userid and password to the server. The server sees a secmec value of 3 (which is clear text userid and password).

Personally I dont like the override of the securityMechanism here. I think if the user sets a particular securitymechanism we should be using that or maybe at the very least give a warning that the security mechanism was upgraded to so and so. Please share your thoughts. I asked this question as part of DERBY-962.

Here is the client upgrade logic for security mechanisms ( this is also in the html file in jira entry)

<>1)      Default secmec value is 4.
2)      If no user name is specified, default user is APP
3) If username and password specified, and secmec value specified is 4(user_only_security), then upgrade security mechanism to 3(clear_text_password_security) Code in ClientBaseDataSource# getUpgradedSecurityMechanism () 4) In other cases, that don't satisfy case 1-3 and for security mechanisms that the client thinks it supports, then the security mechanism is just passed to the server.

(Just a note- the client accepts security mechanism for SECMEC_EUSRIDDTA and SECMEC_EUSRPWDDTA that are not supported by server, but these will still flow to the server and the server will reject them)


2) I was slightly surprised by the behavior of the 'not-set' column
of your table. It seems like, if the property is not set on the server,
then the server accepts any valid connection, regardless of security
mechanism. That is, if I don't set the property, then the following
script establishes 2 connections to the database:

ij> connect 'jdbc:derby://localhost:1527/testdb;create=true;securityMechanism=4;user=bryan';

ij> connect 'jdbc:derby://localhost:1527/testdb;create=true;securityMechanism=3;user=bryan;password=bryan';

In both these urls, since the property is not set, the server will behave as it is today.. will accept the valid supported security mechanisms. In the first case, Client will send a secmec value of 4 to the server and server supports this mechanism so it will accept the connection In the second case, Client will send a secmec value of 3 to the server, and server supports this mechanism so it will accept the connection.

(Note security mechanisms of userid/password here are only for passing the userid and password across the wire, they dont really do any authentication checking at this point. Per the spec, it is assumed that local services are available at the application server to accept the userid/password and authenticate the user based on this information. )

But if I set the derby.drda.securityMechanism property to a valid value,
then the script establishes only the connection where the security
mechanism matches, and the other(s) fail.

So it seems like the behavior of the server with your patch is:

 - if derby.drda.securityMechanism is set to a valid mechanism, then
   the Network Server accepts *only* connections which use that
   security mechanism. No other types of connections are accepted
 - the derby.drda.securityMechanism is not set at all, then the
   Network Server accepts any connection which uses a valid
   security mechanism.

Is that in fact the behavior that you expected and intended?

Thats right. That is the intended behavior of this patch. If this property is not set, then the behavior of the server is the same as it is today, accept valid connections for security mechanisms that it supports.
In my patch, I had this comment in Property.java
+ * Use this property to set the security mechanism accepted by the server.
+ * If this property is set, then client connections with the security
+ * mechanism equal to this property value will only be able to connect to the server.
....
+ * Default value for this property is as though it is not set - in which case + * the server will allow clients with supported security mechanisms to connect

But you put it so well, I think I will update my comments to reflect this.

Thanks.
Sunitha.

Reply via email to