jfsii commented on code in PR #3821:
URL: https://github.com/apache/hive/pull/3821#discussion_r1037478327


##########
ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java:
##########
@@ -12550,6 +12550,21 @@ private ParseResult 
rewriteASTWithMaskAndFilter(TableMask tableMask, ASTNode ast
     }
   }
 
+  void gatherUserSuppliedFunctions(ASTNode ast) {
+    int tokenType = ast.getToken().getType();
+    if (tokenType == HiveParser.TOK_FUNCTION ||
+            tokenType == HiveParser.TOK_FUNCTIONDI ||
+            tokenType == HiveParser.TOK_FUNCTIONSTAR) {
+      if (ast.getChild(0).getType() == HiveParser.Identifier) {
+        // maybe user supplied
+        this.userSuppliedFunctions.add(ast.getChild(0).getText());

Review Comment:
   I'm not sure of Hive's stance on this - but I usually only use this when 
forced to. Like in a setter in which the in parameter is named the same as the 
object variable. Feel free to ignore if you disagree.



##########
ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java:
##########
@@ -12550,6 +12550,21 @@ private ParseResult 
rewriteASTWithMaskAndFilter(TableMask tableMask, ASTNode ast
     }
   }
 
+  void gatherUserSuppliedFunctions(ASTNode ast) {
+    int tokenType = ast.getToken().getType();
+    if (tokenType == HiveParser.TOK_FUNCTION ||
+            tokenType == HiveParser.TOK_FUNCTIONDI ||
+            tokenType == HiveParser.TOK_FUNCTIONSTAR) {
+      if (ast.getChild(0).getType() == HiveParser.Identifier) {
+        // maybe user supplied

Review Comment:
   Go ahead and remove this comment, I'm not sure why I added it.



##########
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/command/CommandAuthorizerV2.java:
##########
@@ -139,6 +139,13 @@ private static List<HivePrivilegeObject> 
getHivePrivObjects(List<? extends Entit
         continue;
       }
 
+      if (privObject.getTyp() == Type.FUNCTION && 
!HiveConf.getBoolVar(SessionState.get().getConf(),
+              HiveConf.ConfVars.HIVE_AUTHORIZATION_FUNCTIONS_IN_VIEW) && 
hiveOpType == HiveOperationType.QUERY) {
+        if 
(!sem.getUserSuppliedFunctions().contains(privObject.getFunctionName())) {
+          continue;

Review Comment:
   Is it possible to add test cases that show the behavior in a couple of cases 
(maybe similar to the authorization_view_*.q tests?). Ideally - I would like to 
see a query with a user supplied udf with a table, a view, and see how it also 
interacts with MVs. Ideally the q.out file would show which objects are being 
sent for authorization so it can catch the regression on when it sends an extra 
UDFs for auth (or doesn't send the user supplied one for auth).



##########
ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java:
##########
@@ -1438,6 +1442,10 @@ public void setUpdateColumnAccessInfo(ColumnAccessInfo 
updateColumnAccessInfo) {
     this.updateColumnAccessInfo = updateColumnAccessInfo;
   }
 
+  public Set<String> getUserSuppliedFunctions() {

Review Comment:
   Maybe add java doc with a note that it contains user supplied functions - 
and note that it doesn't contain UDFs defined in views, etc.



##########
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/command/CommandAuthorizerV2.java:
##########
@@ -98,7 +98,7 @@ private static void addPermanentFunctionEntities(SessionState 
ss, List<ReadEntit
   }
 
   private static List<HivePrivilegeObject> getHivePrivObjects(List<? extends 
Entity> privObjects,
-      Map<String, List<String>> tableName2Cols, HiveOperationType hiveOpType) 
throws HiveException {
+      Map<String, List<String>> tableName2Cols, HiveOperationType hiveOpType, 
BaseSemanticAnalyzer sem) throws HiveException {
     List<HivePrivilegeObject> hivePrivobjs = new 
ArrayList<HivePrivilegeObject>();
     if (privObjects == null){

Review Comment:
   nit: If I was editing this method - I would maybe consider making the format 
uniform within in it.
   I.E. it seems to have at least 3 different coding styles.
   if (conditional){
   if(conditional){
   if (conditional) {



##########
common/src/java/org/apache/hadoop/hive/conf/HiveConf.java:
##########
@@ -3599,6 +3599,9 @@ public static enum ConfVars {
     
HIVE_AUTHORIZATION_TABLES_ON_STORAGEHANDLERS("hive.security.authorization.tables.on.storagehandlers",
 true,
         "Enables authorization on tables with custom storage handlers as 
implemented by HIVE-24705. " +
         "Default setting is true. Useful for turning the feature off if the 
corresponding ranger patch is missing."),
+    
HIVE_AUTHORIZATION_FUNCTIONS_IN_VIEW("hive.security.authorization.functions.in.view",
 true, "" +

Review Comment:
   Is the "" + needed?



-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to