[
https://issues.apache.org/jira/browse/DERBY-5522?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13232700#comment-13232700
]
Rick Hillegas commented on DERBY-5522:
--------------------------------------
Thanks for this first tranche of changes, Kim. I can see that this is a big
effort indeed. On the whole, these changes look great to me.
I now understand why you asked so many questions about the sample programs. I
see that the programs originated in the docs examples. Now that I see that the
programs are going to be exposed, I think that we should overhaul them. They
don't showcase how easy Derby is to use--and how much easier authentication has
become with the new NATIVE mechanism. If you like, I would be happy to rewrite
these examples to try to showcase how simple Derby security is becoming. We
just need to agree on what points the examples should punch up.
cdevcsecure36127:
I stumbled over the first paragraph. I would be tempted to reword it slightly:
"If you use NATIVE authentication, then you do not need to set the
derby.connection.requireAuthentication property. When creating a database with
NATIVE authentication, simply specify a username and password--that user
becomes the database owner."
cdevcsecure36595:
I would recommend some changes to the pre-existing wording. In general, I don't
think that the term "user authorizations" conveys any more meaning than the
simpler term "authorizations". On the contrary, I think it is easy to be
confused by the term "user authorizations" and to suppose that it is yet
another kind of authorization scheme in addition to "connection authorizations"
and "SQL authorizations". There are only 2 kinds of authorizations and I find
that the qualifiers "coarse-grained" and "fine-grained" help me tease them
apart.
o Paragraph 2 under "User authorizations":
"Connection authorization specifies the access" -> "Connection authorization
specifies the coarse-grained access"
"SQL authorization controls the permissions" -> "SQL authorization controls
the fine-grained permissions"
o Paragraph 4 under "User authorizations": Coarse-grained connection
authorization and fine-grained SQL authorization are independent of one
another. You can enable both of them if you want to. NATIVE authentication does
not affect this independence. If you turn on NATIVE authentication, then you
can also turn on coarse-grained connection authorization. I have verified this.
Here is an attempt to reword this paragraph:
"Attention: If you use NATIVE authentication, then fine-grained SQL
authorization is automatically enabled, and by default, all users enjoy full
coarse-grained access to the database. In this situation, fine-grained SQL
authorization can't be turned off. However, you can still adjust coarse-grained
access to the database."
o Paragraph 3 under "User authorization properties": The html output is missing
the blank line which I think should introduce the new paragraph that begins
with the sentence "The following properties affect authorization:"
o Paragraph 4 under "User authorization properties": This paragraph really
confuses me. I think that it is supposed to be talking about coarse-grained
connection authorizations, but it uses the ambiguous term "user
authorizations". I recommend rewording it:
"If you do not specify the coarse-grained connection authorizations for a
specific user ID, then that user ID inherits the database's default
coarse-grained connection authorization."
o Bullet 3 under "How user authorization properties work together": The two
authorization mechanisms do not override one another. They supplement or refine
one another. A user's authorizations end up being the intersection of her
coarse-grained and fine-grained permissions. I would reword the first sentence
of this bullet as follows:
"The coarse-grained access mode specified by the
derby.database.defaultConnectionMode property supplements the permissions that
re granted by the owner of a database object."
cdevcsecure42374:
One specific comment, then a general comment about the pre-existing wording.
o Bullet 1: I would drop the sentence about robustness. I don't think we want
to imply that LDAP or user-written mechanisms are less safe.
The pre-existing wording seems a bit confused to me. It creates the impression
that authentication controls access to the Derby engine and authorization
controls access to individual databases. That's not how it works. Here's how I
see it:
1) Authentication determines whether you are a legal user. It establishes your
identity.
2) Authorization determines what operations can be performed by you, that is,
by your Derby identity.
So far, so good. Those are just generic definitions of authentication and
authorization which hold true for lots of software, not just Derby. Now for the
tricky bit, which is specific to Derby:
Derby understands two kinds of identity:
A) System-wide identity. Currently, any legal system-wide identity enjoys
authorization to perform the following operations:
i) Create databases.
ii) Restore databases.
iii) Shutdown the Derby engine.
B) Database-specific identity. If you are a legal identity in a
specific-database, then you may enjoy the following rights:
i) You can connect to that database--provided that coarse-grained
connection authorization has not been set to noAccess.
ii) You can shutdown that database, encrypt it, and upgrade it--provided that
you are the database owner.
iii) You can create your own SQL objects and write data to your own
tables--provided that your coarse-grained connection authorization has not be
set to readOnlyAccess.
iv) You can access other SQL objects--provided that the owners have granted
you fine-grained SQL access to those objects and provided you have not been
limited by coarse-grained readOnlyAccess.
cdevcsecure51876:
o Bullet 2: I was confused by multiple references to authorization in this
sentence. I would reword it to something like this:
"These examples show how to use fine-grained SQL authorization in conjunction
with Derby's NATIVE user authentication."
cdevcsecurenativeauth:
o Paragraph 1 under "Using NATIVE authentication": Again, I would drop the
claim that NATIVE authentication is safer than LDAP. Maybe something like this:
"Derby's simplest authentication mechanism is NATIVE authentication."
o Last paragraph under "Using NATIVE authentication": I would clarify when
passwords are hashed. I would reword the first sentence of this paragraph:
"Use the derby.authentication.builtin.algorithm property to change how
passwords are encrypted when they are stored in SYS.SYSUSERS."
o Last bullet under "Managing users and passwords": I would punch up the
purpose of this procedure:
"To change a password" -> "To change her own password"
rdevcsecuresqlauthclientex:
o Paragraph 3 under "User authentication and SQL authorization client example":
I was confused by the last sentence of this paragraph. I couldn't figure out
what "format" referred to.
See my introductory comment about these examples: I see that these programs are
pre-existing code, which you have reworked to use NATIVE authentication. I
think it would be great if the examples could be simplified to highlight how
easy it is to set up NATIVE authentication. In particular, because BUILTIN
isn't being used anymore, there is no need to call
syscs_set_database_property() at all. If the following property is set on the
server...
-Dderby.authentication.provider=NATIVE:nativeAuthClientDB:LOCAL
...then the following work will happen automagically:
1) derby.authentication.provider=NATIVE::LOCAL will be set in the database.
2) The SYSADM credentials will be loaded automatically.
3) And there is no need to set databaseOnlyProperties. The database has been
secured by NATIVE::LOCAL authentication so there is no way to subvert
authentication now.
I also think that we should remove the code which sets coarse-grained
connection authorizations. I believe that this material should have been
removed when we introduced fine-grained SQL authorizations in 10.2.
Please be patient as we improve these examples. I think that this may take a
couple iterations. As I said earlier, if you like, I can create a simpler
example from scratch once we agree on what the example should show.
rdevcsecuresqlauthembeddedex:
Similar comments.
rdevcsecuresqlauthsyspropex:
I'm tempted to get rid of this page and just roll its material into the
previous examples. Can you think of a reason why we need this extra page?
tdevcsecure81850:
o Item 4: Again, I think that we only need to recommend SQL authorization. I
would reword the first sentence as follows:
"To prevent unauthorized users from accessing databases once they are booted,
turn on user authentication and SQL authorization for the database."
o Item 5: I think that this page is about how to configure security in a
production environment. I don't think that we should mention BUILTIN
authentication at all since it is not secure. I would just reduce this item to
the following. If we remove the bit about BUILTIN authentcation, then there's
nothing left to this item except the advice to turn on SSL/TLS. But that
doesn't make sense for an embedded scenario. So I would reduce this item to the
following and move it to the next page (which deals with configuring network
security):
"It is also strongly recommended that production systems protect network
connections with SSL/TLS."
tdevcsecure82556:
o Item 3: Again, let's not mention BUILTIN authentication. Strike the last two
sentences of this item.
o Item 4: This text assumes that you are using coarse-grained connection
authorization rather than fine-grained SQL authorization. Again, I think that
we should stop recommending the old-style, Derby-specific coarse-grained
mechanism. Instead, we should recommend that people use portable SQL Standard
features wherever possible. I would simplify this item as follows:
"Configure SQL authorization for your databases."
> Document the NATIVE authentication scheme.
> ------------------------------------------
>
> Key: DERBY-5522
> URL: https://issues.apache.org/jira/browse/DERBY-5522
> Project: Derby
> Issue Type: Improvement
> Components: Documentation
> Affects Versions: 10.9.0.0
> Reporter: Rick Hillegas
> Assignee: Kim Haase
> Attachments: CreateNativeUsers.java, CreateNativeUsers.java,
> DERBY-5522-devguide.diff, DERBY-5522-devguide.stat, DERBY-5522-devguide.zip,
> NativeAuthExampleClient1.java, NativeAuthExampleClient2.java,
> NativeAuthExampleEmbedded.java, NativeAuthExampleEmbedded.java,
> NativeAuthExampleEmbedded.java, NativeAuthExampleEmbedded.java,
> NativeAuthExampleEmbedded.java, NativeAuthExampleEmbedded.java,
> UseNativeUsers.java, UseNativeUsers.java
>
>
> We should document NATIVE authentication after we have implemented the
> changes described on DERBY-866. The documentation changes are described by
> the functional spec UserManagement.html attached to that issue.
--
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