diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyEvaluator.java b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyEvaluator.java
index 843fabc..6664d1b 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyEvaluator.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyEvaluator.java
@@ -476,11 +476,13 @@
 			}
 		} else {
 			if (!result.getIsAllowed()) { // if access is not yet allowed by another policy
-				result.setIsAllowed(true);
-				result.setPolicyPriority(getPolicyPriority());
-				result.setPolicyId(getId());
-				result.setReason(reason);
-				result.setPolicyVersion(getPolicy().getVersion());
+				if (matchType != RangerPolicyResourceMatcher.MatchType.ANCESTOR) {
+					result.setIsAllowed(true);
+					result.setPolicyPriority(getPolicyPriority());
+					result.setPolicyId(getId());
+					result.setReason(reason);
+					result.setPolicyVersion(getPolicy().getVersion());
+				}
 			}
 		}
 		if (LOG.isDebugEnabled()) {
diff --git a/agents-common/src/test/resources/policyengine/test_policyengine_hive.json b/agents-common/src/test/resources/policyengine/test_policyengine_hive.json
index efc1dcc..ba5a53c 100644
--- a/agents-common/src/test/resources/policyengine/test_policyengine_hive.json
+++ b/agents-common/src/test/resources/policyengine/test_policyengine_hive.json
@@ -86,6 +86,20 @@
         {"accesses":[{"type":"serviceadmin","isAllowed":true}],"users":["user1"],"groups":[],"delegateAdmin":false}
       ]
     }
+    ,
+    {"id":6,"name":"db=demo1,demo2","isEnabled":true,"isAuditEnabled":true,
+      "resources":{"database":{"values":["demo1", "demo2"]}},
+      "policyItems":[
+        {"accesses":[{"type":"select","isAllowed":true}],"users":["user1","user2"],"groups":["group1","group2"],"delegateAdmin":false}
+      ]
+    }
+    ,
+    {"id":7,"name":"db=demo1; table=demo1_tbl1,demo1_tbl2; column=*","isEnabled":true,"isAuditEnabled":true,
+      "resources":{"database":{"values":["demo1"]},"table":{"values":["demo1_tbl1", "demo1_tbl2"]},"column":{"values":["*"]}},
+      "policyItems":[
+        {"accesses":[{"type":"create","isAllowed":true}],"users":["user1","user2"],"groups":["group1","group2"],"delegateAdmin":false}
+      ]
+    }
   ],
 
   "tests":[
@@ -393,6 +407,14 @@
       },
       "result":{"isAudited":true,"isAllowed":true,"policyId":5}
     }
+    ,
+    {"name":"ALLOW '_any access to demo1/demo_tbl1' for user1: show table test",
+      "request":{
+        "resource":{"elements":{"database":"demo1", "table":"demo1_tbl1"}},
+        "accessType":"","user":"user1","userGroups":["users"],"requestData":"show tables"
+      },
+      "result":{"isAudited":true,"isAllowed":true,"policyId":7}
+    }
   ]
 }
 
diff --git a/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuditHandler.java b/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuditHandler.java
index c6a9c66..5959e5f 100644
--- a/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuditHandler.java
+++ b/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuditHandler.java
@@ -40,6 +40,7 @@
 	private static final Log LOG = LogFactory.getLog(RangerDefaultAuditHandler.class);
 
 	public static final String  ACCESS_TYPE_ROWFILTER = "ROW_FILTER";
+	public static final String  ACTION_TYPE_METADATA_OPERATION = "METADATA OPERATION";
 	Collection<AuthzAuditEvent> auditEvents  = null;
 	boolean                     deniedExists = false;
 
@@ -115,6 +116,11 @@
 				RangerHiveAccessRequest hiveRequest = (RangerHiveAccessRequest) request;
 
 				accessType = hiveRequest.getHiveAccessType().toString();
+
+				String action = request.getAction();
+				if (ACTION_TYPE_METADATA_OPERATION.equals(action)) {
+					accessType = ACTION_TYPE_METADATA_OPERATION;
+				}
 			}
 
 			if (StringUtils.isEmpty(accessType)) {
@@ -174,6 +180,11 @@
 		if(! result.getIsAudited()) {
 			return;
 		}
+
+		if  (skipFilterOperationAuditing(result)) {
+			return;
+		}
+
 		AuthzAuditEvent auditEvent = createAuditEvent(result);
 
 		if(auditEvent != null) {
@@ -276,4 +287,16 @@
 		}
 		return ret;
 	}
+
+	private boolean skipFilterOperationAuditing(RangerAccessResult result) {
+		boolean ret = false;
+		RangerAccessRequest accessRequest = result.getAccessRequest();
+		if (accessRequest != null) {
+			String action = accessRequest.getAction();
+			if (ACTION_TYPE_METADATA_OPERATION.equals(action) && !result.getIsAllowed()) {
+				ret = true;
+			}
+		}
+		return ret;
+	}
 }
diff --git a/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuthorizer.java b/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuthorizer.java
index b80f1bd..5a7de43 100644
--- a/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuthorizer.java
+++ b/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuthorizer.java
@@ -837,6 +837,8 @@
 
 		RangerPerfTracer perf = null;
 
+		RangerHiveAuditHandler auditHandler = new RangerHiveAuditHandler();
+
 		if(RangerPerfTracer.isPerfTraceEnabled(PERF_HIVEAUTH_REQUEST_LOG)) {
 			perf = RangerPerfTracer.getPerfTracer(PERF_HIVEAUTH_REQUEST_LOG, "RangerHiveAuthorizer.filterListCmdObjects()");
 		}
@@ -891,7 +893,7 @@
 					LOG.error("filterListCmdObjects: RangerHiveResource returned by createHiveResource is null");
 				} else {
 					RangerHiveAccessRequest request = new RangerHiveAccessRequest(resource, user, groups, context, sessionContext);
-					RangerAccessResult result = hivePlugin.isAccessAllowed(request);
+					RangerAccessResult result = hivePlugin.isAccessAllowed(request, auditHandler);
 					if (result == null) {
 						LOG.error("filterListCmdObjects: Internal error: null RangerAccessResult object received back from isAccessAllowed()!");
 					} else if (!result.getIsAllowed()) {
@@ -910,6 +912,8 @@
 			}
 		}
 
+		auditHandler.flushAudit();
+
 		RangerPerfTracer.log(perf);
 
 		if (LOG.isDebugEnabled()) {
@@ -1155,7 +1159,7 @@
 
 		switch(objectType) {
 		case DATABASE:
-			resource = new RangerHiveResource(HiveObjectType.DATABASE, objectName);
+			resource = new RangerHiveResource(HiveObjectType.DATABASE, dbName);
 			//when fix is in place for HIVE-22128 we can un comment this.
 			//resource.setOwnerUser(privilegeObject.getOwnerName());
 			break;
