[
https://issues.apache.org/jira/browse/ACCUMULO-1024?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13587635#comment-13587635
]
Christopher Tubbs commented on ACCUMULO-1024:
---------------------------------------------
[~vines]:
I referenced the validation check above. The reason I'm not a fan of that way
of doing things is that without knowing anything about those other components,
a developer of one has to enumerate all the possible implementations of the
other components that it knows are compatible. This means that a developer
would have to re-release new versions of his component every time other,
compatible components of the other types are created/released, or make it
configurable in their code, or most likely, just always return true.
Re-releasing is not feasible, and it creates a configuration management
nightmare for system admins, and it makes them less independent, and less
modular. Configuration is a lateral move, and always returning true is
something we should probably just do anyways by eliminating this check and
deferring to system admins/configuration management people to ensure they
choose components that are compatible.
I agree the components shouldn't directly interact, and I also like the
centralized "SecurityOperation" on the server side that brings them together.
All I've suggested is that this "SecurityOperation" be configurable, instead of
the 3 components... though I'd strongly support an implementation of a
pluggable "SecurityOperation" or "UserSecurityPlugin" (as I'd probably call
it), that is comprised of 3 distinct, modular components. (Example:
"configuration.getUserSecurityPlugin().getAuthenticator();" vs.
"configuration.getAuthenticator()") In this way, if there are any interactions
necessary, they occur in a coherent way, within the configured
SecurityOperation (or equivalent).
The short answer is that one interface does not work against modularity,
especially if that one interface is a factory for the 3 modular components. You
don't necessarily need to "rewrite the whole class", either. In the typical
case, a rewrite is trivial anyway... just change the return type in a factory.
The alternative (and I think this is preferable...) is to simply assume
compatibility, and by convention, if one implements user-management features in
their Authenticator, then give the Authenticator access to call
cleanUser/dropUser as appropriate.
In any case, I just wanted to document the issue of interoperability... I'm not
necessarily suggesting we change it at this point (it's kind of too late for
1.5.0, anyway). My focus on this ticket is about dealing with the "local user"
concept above the comment which you replied to.
> Deprecate built-in user management utilities
> --------------------------------------------
>
> Key: ACCUMULO-1024
> URL: https://issues.apache.org/jira/browse/ACCUMULO-1024
> Project: Accumulo
> Issue Type: Sub-task
> Components: master, tserver
> Reporter: Christopher Tubbs
> Assignee: Christopher Tubbs
> Fix For: 1.5.0
>
>
> The built-in user management functionality should be phased out, in favor of
> the pluggable authentication model. Any user-management functions that apply
> to a particular implementation of an authentication should be handled within
> that implementation, and not within Accumulo's core.
> This should reduce the complexity of the overall user model.
> A transition plan should be established for the prior ZKAuthenticator
> implementation for usernames and passwords. The former APIs for user
> management should continue to work as is, and pass through to the former
> implementation, but any new APIs for user management should not be introduced
> to the core (like in SecurityOperations, the shell, and 'accumulo init'),
> because that introduces complexity and essentially establishes a guarantee
> that Accumulo will handle user management for arbitrary authentication
> systems... which I don't think we can do generically.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira