You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Yongzhi Chen (JIRA)" <ji...@apache.org> on 2016/06/10 02:44:20 UTC
[jira] [Commented] (HIVE-13991) Union All on view fail with no
valid permission on underneath table
[ https://issues.apache.org/jira/browse/HIVE-13991?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15323765#comment-15323765 ]
Yongzhi Chen commented on HIVE-13991:
-------------------------------------
There are inconsistent key values between put and get operations for map viewAliasToInput
In
private void getMetaData(QB qb, ReadEntity parentInput) method:
{noformat}
// This is the last time we'll see the Table objects for views, so add it to the inputs
// now. isInsideView will tell if this view is embedded in another view.
ReadEntity viewInput = new ReadEntity(tab, parentInput, !qb.isInsideView());
viewInput = PlanUtils.addInput(inputs, viewInput);
aliasToViewInfo.put(alias, new ObjectPair<String, ReadEntity>(fullViewName, viewInput));
viewAliasToInput.put(getAliasId(alias, qb), viewInput);
{noformat}
The key is getAliasId(alias, qb), the key is non-processed alias ID, for the union all case, it looks like
null-subquery1:_u1-subquery1:viewsrc
But in method getParentViewInfo, alias ID is processed before get from the map. The alias ID replace subquery1 to empty, the key
looks like following:
null:_u1:viewsrc
{noformat}
public static ReadEntity getParentViewInfo(String alias_id,
Map<String, ReadEntity> viewAliasToInput) {
String[] aliases = alias_id.split(":");
String currentAlias = null;
ReadEntity currentInput = null;
// Find the immediate parent possible.
// For eg: for a query like 'select * from V3', where V3 -> V2, V2 -> V1, V1 -> T
// -> implies depends on.
// T's parent would be V1
for (int pos = 0; pos < aliases.length; pos++) {
currentAlias = currentAlias == null ? aliases[pos] : currentAlias + ":" + aliases[pos];
currentAlias = currentAlias.replace(SemanticAnalyzer.SUBQUERY_TAG_1, "")
.replace(SemanticAnalyzer.SUBQUERY_TAG_2, "");
ReadEntity input = viewAliasToInput.get(currentAlias);
{noformat}
This inconsistence causes getParentViewInfo return null.
Attach the patch to fix the issue.
> Union All on view fail with no valid permission on underneath table
> -------------------------------------------------------------------
>
> Key: HIVE-13991
> URL: https://issues.apache.org/jira/browse/HIVE-13991
> Project: Hive
> Issue Type: Bug
> Components: Query Planning
> Reporter: Yongzhi Chen
> Assignee: Yongzhi Chen
>
> When sentry is enabled.
> create view V as select * from T;
> When the user has read permission on view V, but does not have read permission on table T,
> select * from V union all select * from V
> failed with:
> {noformat}
> 0: jdbc:hive2://********> select * from s07view union all select * from s07view limit 1;
> Error: Error while compiling statement: FAILED: SemanticException No valid privileges
> Required privileges for this query: Server=server1->Db=default->Table=sample_07->action=select; (state=42000,code=40000)
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)