Mehdi Salarkia created PHOENIX-5369:
---------------------------------------
Summary: BasePermissionsIT.testReadPermsOnTableIndexAndView test
uses an incorrect user for permission based operations
Key: PHOENIX-5369
URL: https://issues.apache.org/jira/browse/PHOENIX-5369
Project: Phoenix
Issue Type: Bug
Affects Versions: 5.0.0
Environment: {code:java}
<!-- Hadoop Versions -->
<hbase.version>2.1.1</hbase.version>
<hadoop.version>3.0.0</hadoop.version>
{code}
Reporter: Mehdi Salarkia
Assignee: Mehdi Salarkia
org.apache.phoenix.end2end.BasePermissionsIT uses a regular user for revoking
permission on another user while invoking user does not have the permission to
do that and as the result runs into the following exception.
{code:java}
2019-06-24 14:05:54,108 DEBUG [main]
org.apache.hadoop.hbase.client.RpcRetryingCallerImpl(131): Call exception,
tries=10, retries=16, started=38507 ms ago, cancelled=false,
msg=java.io.IOException:
org.apache.hadoop.hbase.security.AccessDeniedException: Insufficient
permissions (user=regularUser1_N000002, scope=hbase:acl,
family=l:regularUser2_N000003,
params=[table=hbase:acl,family=l:regularUser2_N000003],action=WRITE)
at org.apache.hadoop.hbase.security.User.runAsLoginUser(User.java:185)
at
org.apache.hadoop.hbase.security.access.AccessController.revoke(AccessController.java:2118)
at
org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos$AccessControlService$1.revoke(AccessControlProtos.java:10031)
at
org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos$AccessControlService.callMethod(AccessControlProtos.java:10192)
at org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:8203)
at
org.apache.hadoop.hbase.regionserver.RSRpcServices.execServiceOnRegion(RSRpcServices.java:2423)
at
org.apache.hadoop.hbase.regionserver.RSRpcServices.execService(RSRpcServices.java:2405)
at
org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:42010)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:413)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130)
at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324)
at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304)
Caused by: org.apache.hadoop.hbase.security.AccessDeniedException: Insufficient
permissions (user=regularUser1_N000002, scope=hbase:acl,
family=l:regularUser2_N000003,
params=[table=hbase:acl,family=l:regularUser2_N000003],action=WRITE)
at
org.apache.hadoop.hbase.security.access.AccessController.preDelete(AccessController.java:1552)
at
org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost$26.call(RegionCoprocessorHost.java:990)
at
org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost$26.call(RegionCoprocessorHost.java:987)
at
org.apache.hadoop.hbase.coprocessor.CoprocessorHost$ObserverOperationWithoutResult.callObserver(CoprocessorHost.java:540)
at
org.apache.hadoop.hbase.coprocessor.CoprocessorHost.execOperation(CoprocessorHost.java:614)
at
org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.preDelete(RegionCoprocessorHost.java:987)
at
org.apache.hadoop.hbase.regionserver.HRegion$MutationBatchOperation.callPreMutateCPHook(HRegion.java:3709)
at
org.apache.hadoop.hbase.regionserver.HRegion$MutationBatchOperation.access$800(HRegion.java:3470)
at
org.apache.hadoop.hbase.regionserver.HRegion$MutationBatchOperation$1.visit(HRegion.java:3539)
at
org.apache.hadoop.hbase.regionserver.HRegion$BatchOperation.visitBatchOperations(HRegion.java:3084)
at
org.apache.hadoop.hbase.regionserver.HRegion$MutationBatchOperation.checkAndPrepare(HRegion.java:3529)
at org.apache.hadoop.hbase.regionserver.HRegion.batchMutate(HRegion.java:3968)
at org.apache.hadoop.hbase.regionserver.HRegion.batchMutate(HRegion.java:3902)
at org.apache.hadoop.hbase.regionserver.HRegion.batchMutate(HRegion.java:3893)
at org.apache.hadoop.hbase.regionserver.HRegion.batchMutate(HRegion.java:3907)
at org.apache.hadoop.hbase.regionserver.HRegion.doBatchMutate(HRegion.java:4234)
at org.apache.hadoop.hbase.regionserver.HRegion.delete(HRegion.java:2923)
at
org.apache.hadoop.hbase.regionserver.RSRpcServices.mutate(RSRpcServices.java:2853)
at
org.apache.hadoop.hbase.client.ClientServiceCallable.doMutate(ClientServiceCallable.java:55)
at org.apache.hadoop.hbase.client.HTable$2.rpcCall(HTable.java:498)
at org.apache.hadoop.hbase.client.HTable$2.rpcCall(HTable.java:493)
at
org.apache.hadoop.hbase.client.RegionServerCallable.call(RegionServerCallable.java:127)
at
org.apache.hadoop.hbase.client.RpcRetryingCallerImpl.callWithRetries(RpcRetryingCallerImpl.java:107)
at org.apache.hadoop.hbase.client.HTable.delete(HTable.java:503)
at
org.apache.hadoop.hbase.security.access.AccessControlLists.removePermissionRecord(AccessControlLists.java:262)
at
org.apache.hadoop.hbase.security.access.AccessControlLists.removeUserPermission(AccessControlLists.java:246)
at
org.apache.hadoop.hbase.security.access.AccessController$8.run(AccessController.java:2124)
at
org.apache.hadoop.hbase.security.access.AccessController$8.run(AccessController.java:2118)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1962)
at org.apache.hadoop.security.SecurityUtil.doAsUser(SecurityUtil.java:514)
at org.apache.hadoop.security.SecurityUtil.doAsLoginUser(SecurityUtil.java:495)
at sun.reflect.GeneratedMethodAccessor112.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.hbase.util.Methods.call(Methods.java:40)
at org.apache.hadoop.hbase.security.User.runAsLoginUser(User.java:183)
... 11 more
, details=row '' on table 'hbase:acl' at
region=hbase:acl,,1561410247401.d0b5e1997224dadc6c06b2a492b99a08.,
hostname=localhost,55921,1561410236573, seqNum=2,
exception=java.io.IOException: java.io.IOException:
org.apache.hadoop.hbase.security.AccessDeniedException: Insufficient
permissions (user=regularUser1_N000002, scope=hbase:acl,
family=l:regularUser2_N000003,
params=[table=hbase:acl,family=l:regularUser2_N000003],action=WRITE)
at org.apache.hadoop.hbase.security.User.runAsLoginUser(User.java:185)
at
org.apache.hadoop.hbase.security.access.AccessController.revoke(AccessController.java:2118)
at
org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos$AccessControlService$1.revoke(AccessControlProtos.java:10031)
at
org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos$AccessControlService.callMethod(AccessControlProtos.java:10192)
at org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:8203)
at
org.apache.hadoop.hbase.regionserver.RSRpcServices.execServiceOnRegion(RSRpcServices.java:2423)
at
org.apache.hadoop.hbase.regionserver.RSRpcServices.execService(RSRpcServices.java:2405)
at
org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:42010)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:413)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130)
at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324)
at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304)
{code}
This seems to be caused by this HBase fix
https://issues.apache.org/jira/browse/HBASE-21385 which has changed the way
HBase Delete operation works.
On Hbase 2.1.0 and below this was working because the user behind the request
was null (because it was an RPC call, see
org.apache.hadoop.hbase.security.access.AccessController#getActiveUser) and
fell back to the system user which always had permission for any operations.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)