-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/70952/
-----------------------------------------------------------

Review request for ranger, Ankita Sinha, bhavik patel, Gautam Borad, Abhay 
Kulkarni, Madhan Neethiraj, Mehul Parikh, Nikhil P, Nitin Galave, Ramesh Mani, 
Sailaja Polavarapu, and Velmurugan Periasamy.


Bugs: RANGER-2484
    https://issues.apache.org/jira/browse/RANGER-2484


Repository: ranger


Description
-------

**Problem Statement:** Observing failure while importing permissions into 
ranger using ranger import API( 
/service/plugins/policies/importPoliciesFromFile?updateIfExists=true).

Create a ranger policy for resource "db1/table1/column1" with policy name 
policy-1 in service hivedev.

Import permissions for resource "db1/table1/column1" which has policy name 
policy-2 into hivedev service using import API mentioned above.
This results in below failure

 Validation failure: error code[3010], reason[Another policy already exists for 
matching resource: policy-name=[policy-1], service=[hivedev]], 
field[resources], subfield[null], type[semantically incorrect] 
This issue will be seen only when there is a policy that already exists for the 
resource with different policy name from the one that is being imported. If the 
policy names match, the policy is updated properly.

** Proposed Solution: **
Import API can accept an additional parameter 'ignorePolicyName' along with 
'updateIfExists'. 'ignorePolicyName' parameter shall be helpful to decide 
whether policies should be merged or not irrespective of policy name.


**Updated Behaviour shall be:** (please add or ask to add if anything is 
missing below)
1 ) if 'override' flag is true then import api shall delete existing policy 
from the given service and create the policies received from json file. 
2) if 'updateIfExists' flag is true then import api shall update the old policy 
object with new policy json if policy guid or policy name is matching ; if 
policy does not exist with given name and guid then it will create the policy 
but policy creation may fail if a policy exist with the same resource having 
different name. 
3) if 'updateIfExists' flag is true and 'ignorePolicyName' flag is true and if 
the new policy does not have policy conditions ; then ranger will try to find 
existing policy for the exactly matching resource ; if exactly matching 
resource policy is found then the new policy will be merged to existing policy 
and existing policy name will remain same. if same resource policies are not 
found then it will try to act as 'updateIfExists' true (mentioned in step-2)


Diffs
-----

  security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java 
1d9391f20 
  security-admin/src/main/java/org/apache/ranger/rest/ServiceRESTUtil.java 
c49c42698 


Diff: https://reviews.apache.org/r/70952/diff/1/


Testing
-------

1) Build Ranger with the attached patch, untar the ranger, updated 
install.properties and installed and started Ranger-admin.
2) Created testuser1 and testuser2.
3) Created a hive service : hivedev
4) Created a policy 'policy2' for resource : db1/table1/column1 , added a 
policy item for user 'testuser1' with 'select' permissions.
5) Exported the policy json from UI.
6) Updated the exported policy json and updated policy name to 'policy3' , 
updated policy item by replacing 'testuser1' with 'testuser2' and added 
'create' and 'update' permissions. 
7) Now tried to import policies with param '' : 
curl -i -X POST --header "Accept:*/*" -H "Content-Type: multipart/form-data" -F 
'file=@/Users/pradeep/Downloads/Ranger_Policies_20190625_104505.json' -u 
admin:ranger1234 
'http://172.22.111.117:6080/service/plugins/policies/importPoliciesFromFile?updateIfExists=true&serviceType=hive'

**Expected Behaviour :** policy2 should be updated with additional policy item 
having testuser2 permissions of 'create' and 'update'.
**Actual Behaviour :** policy2 updated with additional policy item having 
testuser2 permissions of 'create' and 'update'.


Thanks,

Pradeep Agrawal

Reply via email to