ctubbsii commented on code in PR #5480:
URL: https://github.com/apache/accumulo/pull/5480#discussion_r2045687287


##########
server/tserver/src/main/java/org/apache/accumulo/tserver/ThriftScanClientHandler.java:
##########
@@ -401,14 +401,9 @@ public InitialMultiScan startMultiScan(TInfo tinfo, 
TCredentials credentials,
       }
     }
 
-    try {
-      if (!security.authenticatedUserHasAuthorizations(credentials, 
authorizations)) {
-        throw new ThriftSecurityException(credentials.getPrincipal(),
-            SecurityErrorCode.BAD_AUTHORIZATIONS);
-      }
-    } catch (ThriftSecurityException tse) {
-      log.error("{} is not authorized", credentials.getPrincipal(), tse);
-      throw tse;
+    if (!security.authenticatedUserHasAuthorizations(credentials, 
authorizations)) {
+      throw new ThriftSecurityException(credentials.getPrincipal(),
+          SecurityErrorCode.BAD_AUTHORIZATIONS);
     }

Review Comment:
   This code appears to do nothing but intercept the exception that it threw 
itself, in order to log it. Even if we kept the log message, this try-catch 
isn't needed.
   
   In some places in the code this pattern can be seen because the ability to 
request information from the security module itself can throw a 
ThriftSecurityException. (See `SecurityOperation.canAskAboutOtherUsers` when 
`authenticate` fails, for example). This is a bit convoluted and these need 
reworked to be more clear, but that's out of scope here.
   
   For this case, there's no reason to have this wrapping and the extra log 
message, so this part is fine to remove.
   
   In fact, there's another case where this happens that can also be removed: 
in `ThriftScanClientHandler.getActiveScans` when calling 
`TabletClientHandler.checkPermission`, the same thing is done.
   
   Both logging and throwing are not necessary. In this case, we are throwing 
the exception back to the client side, where it should be handled. So, there's 
no reason to log extra things here, beyond what is logged in the 
AuditedSecurityOperation already (and any internal errors that aren't the 
user's fault).



##########
server/base/src/main/java/org/apache/accumulo/server/security/handler/ZKAuthorizor.java:
##########
@@ -152,6 +152,9 @@ public boolean isValidAuthorizations(String user, 
List<ByteBuffer> auths) {
 
     for (ByteBuffer auth : auths) {
       if (!userauths.contains(ByteBufferUtil.toBytes(auth))) {
+        log.info(
+            "User {} attempted to use Authorization {} which they do not have 
assigned to them.",
+            user, new String(auth.array(), UTF_8));

Review Comment:
   We're already throwing the exception back to the user, so there's no need to 
also log it. Also, this is redundant, since the user should already have a copy 
of their authorizations for the request via existing mechanisms (either from 
their own knowledge of the client side application/configuration, or available 
from the server-side audit logs), and can double-check them against the public 
API to list the current user's authorizations.
   
   Additionally, this extra log message adds risk that routine client requests 
can fill the server-side logs by merely submitting an invalid request.
   
   Given that the appropriate place to log this would be in the audit logs, and 
the authorizations are in fact logged there already, I'm going to revert this 
new log message. I think we can consider improving the audit logging with a 
redesign of the security module internals, but we should not do that in a 2.1 
bugfix release.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@accumulo.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to