[ 
https://issues.apache.org/jira/browse/IMPALA-11281?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Quanlong Huang resolved IMPALA-11281.
-------------------------------------
    Fix Version/s: Impala 4.2.0
       Resolution: Fixed

Resolving this. There is a follow-up item tracked in IMPALA-11501. Thank 
[~fangyurao] !

> Consider loading the table metadata for a ResetMetadataStmt
> -----------------------------------------------------------
>
>                 Key: IMPALA-11281
>                 URL: https://issues.apache.org/jira/browse/IMPALA-11281
>             Project: IMPALA
>          Issue Type: Bug
>            Reporter: Fang-Yu Rao
>            Assignee: Fang-Yu Rao
>            Priority: Major
>             Fix For: Impala 4.2.0
>
>
> Currently when a {{ResetMetadataStmt}} that has a non-null '{{tableName_}}' 
> is being analyzed, we do not add its '{{{}tableName_{}}}' to the given 
> '{{{}tblRefs{}}}' in {{collectTableRefs()}} if its '{{{}partitionSpec_{}}}' 
> is null 
> ([https://github.com/apache/impala/blob/master/fe/src/main/java/org/apache/impala/analysis/ResetMetadataStmt.java#L131]).
> When the metadata of a table is not fully loaded, we won't populate the 
> column names of a table in its corresponding {{AuthorizableTable}} 
> ([https://github.com/apache/impala/blob/master/fe/src/main/java/org/apache/impala/authorization/BaseAuthorizationChecker.java#L227L229])
>  since the table is an {{{}IncompleteTable{}}}.
> If the column names are not populated in the corresponding 
> {{AuthorizableTable}} of a table in a {{{}ResetMetadataStmt{}}}, then the 
> logic in 
> [RangerAuthorizationChecker#authorizeByTableMasking()|https://github.com/apache/impala/blob/master/fe/src/main/java/org/apache/impala/authorization/ranger/RangerAuthorizationChecker.java#L669-L684]
>  that is supposed to block the metadata update when there are policies 
> defined on the columns could not take effect since in this case 
> [((AuthorizableTable) 
> authorizable).getColumns()|https://github.com/apache/impala/blob/master/fe/src/main/java/org/apache/impala/authorization/ranger/RangerAuthorizationChecker.java#L663]
>  returns an empty list. As a result, such an update would be allowed if there 
> is no other authorization error.
> To reproduce the issue, we could comment out all the test cases in 
> [RangerAuditLogTest#testAuditsForColumnMasking()|https://github.com/apache/impala/blob/master/fe/src/test/java/org/apache/impala/authorization/ranger/RangerAuditLogTest.java#L261]
>  except for the following one. The following test case would fail since the 
> query "{{{}invalidate metadata functional.alltypestiny{}}}" won't result in 
> any authorization error. This test case could succeed with its previous test 
> cases enabled because in the previous test cases, there is at least one 
> invocation to {{SelectStmt#collectTableRefs()}} that triggers the metadata 
> loading of the table '{{{}functional.alltypestiny{}}}'.
> {code:java}
>       // Updates on metadata fails by column-masking policies.
>       authzError(events -> {
>         assertEquals(1, events.size());
>         assertEquals("invalidate metadata functional.alltypestiny",
>             events.get(0).getRequestData());
>         assertEventEquals("@table", "refresh", "functional/alltypestiny", 0,
>             events.get(0));
>         // Make sure it's denied by a column masking policy.
>         
> assertTrue(columnMaskingPolicyIds.contains(events.get(0).getPolicyId()));
>       }, "invalidate metadata functional.alltypestiny", 
> onServer(TPrivilegeLevel.ALL));
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to