You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ra...@apache.org on 2026/08/27 13:36:37 UTC

(ranger) branch RANGER-5720-patch updated (d6b1e8b07 -> 50e3b11b7)

This is an automated email from the ASF dual-hosted git repository.

ramackri pushed a change to branch RANGER-5720-patch
in repository https://gitbox.apache.org/repos/asf/ranger.git


    from d6b1e8b07 RANGER-5720: Fix Oracle and SQL Server fresh-install schema for patch 078.
     add a03fc5c9c RANGER-4897: Extended the test coverage for XUserRest & RoleRest apis endpoints (#1140)
     add da67636b8 RANGER-5673: Update Apache Ranger website with 2.9.0 (#1136)
     add 2a79372c9 RANGER-5678: Concurrent policy-engine rebuild on shared serviceDef causes CME/NPE for delegated-admin User (#1141)
     add 8ce349aef RANGER-5708 : Correct early publication of KnoxRangerPlugin in RangerPDPKnoxFilter (#1121)
     add 421db18c0 RANGER-5729: Unable to import exported GDS policies via Service Manager due to 403 Error (#1125)
     add efe3fa615 Bump com.fasterxml.jackson.core:jackson-databind from 2.17.2 to 2.18.9 (#1033)
     add 49ee3ff2b RANGER-5738: Upgrade tomcat to 9.0.120 (#1148)
     add 237a6cbc8 RANGER-5728: Update stress_kms script to run against Keberos enabled . (#1143)
     add 30252c32e RANGER-5421: Align authorization and service detail handling for repository search APIs (#1145)
     add 06c44cbeb RANGER-5736: Fix MariaDB grant failure during Ranger Admin DB setup (#1144)
     add 2f1cb6a44 RANGER-5744: Harden plugins-docker-build against Ozone KDC startup race (#1155)
     add 8dba0414a RANGER-5730: Restrict role import createNonExist flag to roles only (#1142)
     add 5a30ede14 RANGER-5347: Test Cases for agents-common Module: Packages (plugin.conditionevaluator, plugin.contextenricher, plugin.contextenricher.externalretrievers, plugin.geo) (#760)
     add 8cf92131c RANGER-5349: Test Cases for agents-common Module: Packages (plugin.service, plugin.store) (#762)
     add c872380a6 RANGER-5350: Test Cases for agents-common Module: Packages (plugin.util, services.gds, services.tag) (#763)
     add ece62f616 RANGER-5348: Test Cases for agents-common Module: Package (plugin.model) (#761)
     add 82fcc7827 RANGER-5717: Disable SSO in docker, ensure readiness health check registers user in DB (#1158)
     add 05145cd0f RANGER-5747: Migrate NiFiClient and NiFiRegistryClient to use RangerDefaultHostnameVerifier (#1161)
     add 4e68f6e67 RANGER-5374:Unit tests for agents-audit module:submodules [dest-cloudwatch, dest-kafka, dest-log4j, dest-solr] (#706)
     add 130c7e928 RANGER-5375: Unit tests for agents-audit module:submodules [dest-hdfc, orc-util] (#707)
     add 4c601d6c3 RANGER-5378:Unit tests for agents-audit module:package [org.apache.ranger.audit.queue] (#709)
     add c3dec8bdc RANGER-5379: Unit tests for agents-audit module:package [org.apache.ranger.audit.provider] (#710)
     add fe4227409 RANGER-5380: Unit tests for agents-audit module:core submodules [destination, model, test, utils] (#711)
     add 2a3c370f3 RANGER-5746: Improvement in Ranger policy engine (#1156)
     add 877a1cebc RANGER-5741 : Refactoring for Ranger KMS API (#1151)
     add 1deedabc7 RANGER-5739: Recursive URL resource policy does not match resources expressed in the default-FileSystem URL form (scheme:///path) (#1150)
     add e7aef11f8 RANGER-5735: Improve authorization consistency across RoleREST endpoints (#1149)
     add d4a0759a4 RANGER-5680: Restructure audit services in docker compose and use OpenSearch as the default Index Store (#1167)
     add c5e10dae5 RANGER-4458: Usersync Webapp, metrics and Docker changes (#1103)
     add b68bd5371 RANGER-5742: Inconsistent handling of service config fields by name v… (#1152)
     add 8e7716cd3 RANGER-5723: Plugin SPIFFE outbound auth for audit-server destination (#1139)
     add c227c010e RANGER-5754: Fix timezone-sensitive test failures in MiscUtilTest (#1173)
     add 2783d9a56 RANGER-5755: add convenience constructers to authz-api model classes (#1175)
     add deddc84bf RANGER-5761: blog: integrating applications with Apache Ranger (#1180)
     add 79c7e42a1 RANGER-5756: Make J10056 skip automatic reactivation of disabled external users (#1176)
     add 2bb9e9c99 RANGER-5751 : service-config UI show duplicate entries for trino plugin (#1170)
     add 724e3026d RANGER-5760 : [UI] Handle duplicate additional service configurations keys in service definition (#1182)
     add e2b8e720c Merge branch 'master' into RANGER-5720-patch
     add 803114396 RANGER-5720: Address review on MySQL LONGTEXT and Oracle CLOB upgrade.
     add e3a8e455b RANGER-5720: Add x_audit_config table for audit runtime settings.
     add 3b337345b RANGER-5720: Align x_audit_config with Option A config split.
     add 44cd426b4 Revert "RANGER-5720: Align x_audit_config with Option A config split."
     add ceed1a355 RANGER-5720: Move audit config to x_audit_config table.
     new 50e3b11b7 RANGER-5720: Finalize patch 078 x_audit_config and add docker DB E2E tests.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .github/workflows/ci.yml                           |   61 +-
 .../org/apache/ranger/audit/provider/MiscUtil.java |    2 +-
 .../audit/destination/AuditDestinationTest.java    |   90 ++
 .../destination/FileAuditDestinationTest.java      |  163 +++
 .../ranger/audit/model/AuditIndexRecordTest.java   |  106 ++
 .../ranger/audit/model/AuthzAuditEventTest.java    |  168 +++
 .../audit/provider/AsyncAuditProviderTest.java     |  167 +++
 .../audit/provider/AuditFileCacheProviderTest.java |  258 ++++
 .../audit/provider/AuditProviderFactoryTest.java   |  117 ++
 .../audit/provider/AuditWriterFactoryTest.java     |  266 ++++
 .../audit/provider/BaseAuditHandlerTest.java       |  339 +++++
 .../audit/provider/BufferedAuditProviderTest.java  |  266 ++++
 .../audit/provider/DummyAuditProviderTest.java     |  158 +++
 .../ranger/audit/provider/Log4jTracerTest.java     |  143 ++
 .../apache/ranger/audit/provider/MiscUtilTest.java |  660 +++++++++
 .../audit/provider/MultiDestAuditProviderTest.java |  322 +++++
 .../StandAloneAuditProviderFactoryTest.java        |  121 ++
 .../ranger/audit/queue/AuditAsyncQueueTest.java    |  189 +++
 .../ranger/audit/queue/AuditBatchQueueTest.java    |  271 ++++
 .../queue/AuditFileCacheProviderSpoolTest.java     |  553 ++++++++
 .../audit/queue/AuditFileQueueSpoolTest.java       |  561 ++++++++
 .../ranger/audit/queue/AuditFileQueueTest.java     |  239 ++++
 .../ranger/audit/queue/AuditFileSpoolTest.java     |  598 ++++++++
 .../apache/ranger/audit/queue/AuditQueueTest.java  |  278 ++++
 .../ranger/audit/queue/AuditSummaryQueueTest.java  |  335 +++++
 .../apache/ranger/audit/test/TestEventsTest.java   |  132 ++
 .../audit/utils/AbstractKerberosUserTest.java      |  159 +++
 .../audit/utils/AbstractRangerAuditWriterTest.java |  340 +++++
 .../audit/utils/InMemoryJAASConfigurationTest.java |  252 ++++
 .../ranger/audit/utils/KerberosActionTest.java     |  150 ++
 .../audit/utils/KerberosJAASConfigUserTest.java    |  131 ++
 .../audit/utils/RangerJSONAuditWriterTest.java     |   86 ++
 .../ranger/audit/utils/RollingTimeUtilTest.java    |   97 ++
 agents-audit/dest-auditserver/pom.xml              |    6 +
 .../destination/RangerAuditServerDestination.java  |   11 +
 .../RangerAuditServerDestinationTest.java          |   56 +
 agents-audit/dest-cloudwatch/pom.xml               |   14 +
 .../AmazonCloudWatchAuditDestinationTest.java      |  268 ++++
 agents-audit/dest-hdfs/pom.xml                     |   12 +
 .../destination/HDFSAuditDestinationTest.java      |  121 ++
 .../audit/provider/LocalFileLogBufferTest.java     |  244 ++++
 .../audit/provider/hdfs/HdfsAuditProviderTest.java |   78 +
 .../provider/hdfs/HdfsLogDestinationTest.java      |  230 +++
 agents-audit/dest-kafka/pom.xml                    |   14 +
 .../provider/kafka/KafkaAuditProviderTest.java     |  187 +++
 agents-audit/dest-log4j/pom.xml                    |   14 +
 .../destination/Log4JAuditDestinationTest.java     |  162 +++
 .../audit/provider/Log4jAuditProviderTest.java     |  105 ++
 agents-audit/dest-solr/pom.xml                     |   12 +-
 .../destination/SolrAuditDestinationTest.java      |  196 +++
 .../audit/provider/solr/SolrAuditProviderTest.java |  232 +++
 agents-audit/orc-util/pom.xml                      |   12 +
 .../apache/ranger/audit/utils/ORCFileUtilTest.java |  330 +++++
 .../audit/utils/RangerORCAuditWriterTest.java      |  300 ++++
 .../ranger/authorization/utils/StringUtil.java     |    2 +-
 .../ranger/plugin/model/RangerServiceDef.java      |  305 ++++
 .../ranger/plugin/policyengine/PolicyEngine.java   |    2 +-
 .../policyengine/RangerPolicyRepository.java       |    2 +-
 .../plugin/policyengine/RangerResourceTrie.java    |    2 +-
 .../resourcematcher/RangerURLResourceMatcher.java  |   28 +-
 .../org/apache/ranger/plugin/store/RoleStore.java  |   20 +
 .../ranger/plugin/util/RangerRESTClient.java       |   24 +
 .../apache/ranger/plugin/util/ServiceDefUtil.java  |  264 +---
 .../service-defs/ranger-servicedef-trino.json      |    6 +-
 .../TestRangerAbstractConditionEvaluator.java      |   35 +-
 .../TestRangerAccessedFromClusterConditions.java   |  129 ++
 .../TestRangerContextAttributeValueConditions.java |  174 +++
 .../TestRangerHiveResourcesAccessConditions.java   |  119 ++
 .../TestRangerScriptConditionEvaluator.java        |  125 ++
 ...TestRangerScriptTemplateConditionEvaluator.java |  123 ++
 .../TestRangerTagConditions.java                   |  134 ++
 .../TestRangerAbstractContextEnricher.java         |  184 +++
 .../TestRangerAdminGdsInfoRetriever.java           |  157 +++
 .../TestRangerAdminTagRetriever.java               |  103 ++
 .../TestRangerAdminUserStoreRetriever.java         |  106 ++
 .../TestRangerFileBasedGeolocationProvider.java    |   79 ++
 .../TestRangerFileBasedTagRetriever.java           |  158 +++
 .../contextenricher/TestRangerGdsEnricher.java     |   88 ++
 .../TestRangerServiceResourceMatcher.java          |   89 ++
 .../contextenricher/TestRangerTagEnricher.java     |  735 ++++++++++
 .../contextenricher/TestRangerTagForEval.java      |  147 ++
 .../TestRangerUserStoreEnricher.java               |  157 +++
 .../TestRangerUserStoreRefresher.java              |  257 ++++
 .../plugin/contextenricher/TestTagEnricher.java    |  186 ---
 .../externalretrievers/TestGetFromDataFile.java}   |   43 +-
 .../externalretrievers/TestGetFromURL.java         |  272 ++++
 .../TestRangerMultiSourceUserStoreRetriever.java   |  396 ++++++
 .../ranger/plugin/geo/TestBinarySearchTree.java    |  112 ++
 .../ranger/plugin/geo/TestGeolocationMetadata.java |   75 +
 .../plugin/geo/TestRangerGeolocationData.java      |  139 ++
 .../plugin/geo/TestRangerGeolocationDatabase.java  |  105 ++
 .../apache/ranger/plugin/geo/TestValuePrinter.java |   84 ++
 .../ranger/plugin/model/TestAuditFilter.java       |   50 +-
 .../apache/ranger/plugin/model/TestGroupInfo.java  |   34 +-
 .../plugin/model/TestRangerBaseModelObject.java    |  110 ++
 .../plugin/model/TestRangerDatasetHeader.java      |   65 +
 .../apache/ranger/plugin/model/TestRangerGds.java  |  312 ++++
 .../ranger/plugin/model/TestRangerGrant.java       |  145 ++
 .../ranger/plugin/model/TestRangerHealth.java      |   86 ++
 .../ranger/plugin/model/TestRangerMetrics.java     |   21 +-
 .../ranger/plugin/model/TestRangerPluginInfo.java  |  153 ++
 .../ranger/plugin/model/TestRangerPolicy.java      |  173 ++-
 .../ranger/plugin/model/TestRangerPolicyDelta.java |   82 ++
 .../plugin/model/TestRangerPolicyHeader.java       |   83 ++
 .../model/TestRangerPolicyResourceSignature.java   |   39 +-
 .../ranger/plugin/model/TestRangerPrincipal.java   |   35 +-
 .../apache/ranger/plugin/model/TestRangerRole.java |  121 ++
 .../plugin/model/TestRangerSecurityZone.java       |  102 ++
 .../model/TestRangerSecurityZoneHeaderInfo.java    |   34 +-
 .../plugin/model/TestRangerSecurityZoneV2.java     |  144 ++
 .../ranger/plugin/model/TestRangerService.java     |   12 +-
 .../ranger/plugin/model/TestRangerServiceDef.java  |  348 +++++
 .../plugin/model/TestRangerServiceHeaderInfo.java  |   72 +
 .../plugin/model/TestRangerServiceResource.java    |   83 ++
 .../model/TestRangerServiceResourceWithTags.java   |   39 +-
 .../ranger/plugin/model/TestRangerServiceTags.java |  114 ++
 .../apache/ranger/plugin/model/TestRangerTag.java  |   96 ++
 .../ranger/plugin/model/TestRangerTagDef.java      |   82 ++
 .../plugin/model/TestRangerTagResourceMap.java     |   33 +-
 .../plugin/model/TestRangerValidityRecurrence.java |   92 ++
 .../plugin/model/TestRangerValiditySchedule.java   |   71 +
 .../plugin/model/TestServiceDeleteResponse.java    |   38 +-
 .../apache/ranger/plugin/model/TestUserInfo.java   |   43 +-
 .../RangerSecurityZoneValidatorTest.java           |    4 +
 .../plugin/model/validation/TestDirectedGraph.java |   10 +
 .../validation/TestRangerPolicyValidator.java      |  304 ++--
 .../model/validation/TestRangerRoleValidator.java  |  284 ++++
 .../validation/TestRangerServiceDefHelper.java     |  763 ++++++++--
 .../validation/TestRangerServiceDefValidator.java  |   51 +-
 .../validation/TestRangerServiceValidator.java     |  123 +-
 .../validation/TestValidationFailureDetails.java   |   99 ++
 .../model/validation/ValidationTestUtils.java      |   58 +-
 .../TestRangerResourceTrieCaseFolding.java         |  493 +++++++
 .../RangerURLResourceMatcherTest.java              |   81 +-
 .../plugin/service/TestRangerAuthContext.java      |  136 ++
 .../plugin/service/TestRangerBasePlugin.java       |  475 ++++++-
 .../plugin/service/TestRangerBaseService.java      |  265 ++++
 .../plugin/service/TestRangerChainedPlugin.java    |  127 ++
 .../service/TestRangerDefaultRequestProcessor.java |  335 +++++
 .../plugin/service/TestRangerDefaultService.java   |   29 +-
 .../plugin/service/TestResourceLookupContext.java  |   50 +-
 .../ranger/plugin/store/TestAbstractGdsStore.java  |  151 ++
 .../plugin/store/TestAbstractPredicateUtil.java    |  573 ++++++++
 .../plugin/store/TestAbstractServiceStore.java     | 1047 ++++++++++++++
 .../ranger/plugin/store/TestAbstractTagStore.java  |  541 +++++++
 .../plugin/store/TestEmbeddedServiceDefsUtil.java  |  347 +++++
 .../org/apache/ranger/plugin/store/TestPList.java  |  101 ++
 .../store/TestRangerServiceResourceSignature.java  |  116 ++
 .../ranger/plugin/store/TestRolePredicateUtil.java |  123 ++
 .../store/TestSecurityZonePredicateUtil.java       |   67 +
 .../plugin/store/TestServicePredicateUtil.java     |  331 +++++
 .../plugin/store/TestStoredServiceResource.java    |   44 +-
 .../ranger/plugin/store/TestTagPredicateUtil.java  |  106 ++
 .../ranger/plugin/store/TestTagValidator.java      |  315 +++++
 .../store/file/TestGeolocationFileStore.java       |  258 ++++
 .../ranger/plugin/util/ServiceDefUtilTest.java     |  186 +++
 .../ranger/plugin/util/TestAutoClosableLock.java   |   83 ++
 .../ranger/plugin/util/TestDownloadTrigger.java    |   29 +-
 .../ranger/plugin/util/TestDownloaderTask.java     |   34 +-
 .../plugin/util/TestGraalScriptEngineCreator.java  |   33 +-
 .../ranger/plugin/util/TestGrantRevokeRequest.java |   91 ++
 .../plugin/util/TestGrantRevokeRoleRequest.java    |   78 +
 .../plugin/util/TestJavaScriptEngineCreator.java   |   33 +-
 .../apache/ranger/plugin/util/TestJsonUtilsV2.java |  102 ++
 .../plugin/util/TestJsonUtilsV2ReadResponse.java   |   30 +-
 .../ranger/plugin/util/TestKeySearchFilter.java    |   45 +-
 .../util/TestMacroProcessor.java}                  |   34 +-
 .../ranger/plugin/util/TestPerfDataRecorder.java   |   72 +
 .../ranger/plugin/util/TestPolicyRefresher.java    |  227 +++
 .../plugin/util/TestRangerAccessRequestUtil.java   |  249 ++++
 .../ranger/plugin/util/TestRangerMetricsUtil.java  |   95 ++
 .../plugin/util/TestRangerObjectFactory.java       |   30 +-
 .../ranger/plugin/util/TestRangerPerfTracer.java   |   69 +
 .../plugin/util/TestRangerPerfTracerFactory.java   |   24 +-
 .../plugin/util/TestRangerPolicyDeltaUtil.java     |  162 +++
 .../ranger/plugin/util/TestRangerPurgeResult.java  |   37 +-
 .../ranger/plugin/util/TestRangerRESTClient.java   |   51 +
 .../ranger/plugin/util/TestRangerRESTUtils.java    |   76 +
 .../plugin/util/TestRangerReadWriteLock.java       |   77 +
 .../plugin/util/TestRangerRequestedResources.java  |  150 ++
 .../TestRangerResourceEvaluatorsRetriever.java     |  158 +++
 .../apache/ranger/plugin/util/TestRangerRoles.java |   34 +-
 .../plugin/util/TestRangerRolesProvider.java       |  173 +++
 .../ranger/plugin/util/TestRangerRolesUtil.java    |  105 ++
 .../plugin/util/TestRangerSecurityZoneHelper.java  |  219 +++
 .../util/TestRangerServiceNotFoundException.java   |   56 +
 .../util/TestRangerServiceTagsDeltaUtil.java       |  165 +++
 .../ranger/plugin/util/TestRangerSslHelper.java    |   70 +
 .../ranger/plugin/util/TestRangerUserStore.java    |   97 ++
 .../plugin/util/TestRangerUserStoreUtil.java       |   89 ++
 .../ranger/plugin/util/TestScriptEngineUtil.java   |   27 +-
 .../ranger/plugin/util/TestSearchFilter.java       |  105 ++
 .../ranger/plugin/util/TestServiceGdsInfo.java     |  119 ++
 .../plugin/util/TestStringTokenReplacer.java       |   90 ++
 .../ranger/plugin/util}/TestTimedEventUtil.java    |   40 +-
 .../ranger/plugin/util/TestURLEncoderUtil.java     |   34 +-
 .../apache/ranger/plugin/util/TestXMLUtils.java    |   78 +
 .../ranger/services/gds/TestRangerServiceGds.java  |   84 ++
 .../ranger/services/tag/TestRangerServiceTag.java  |  238 ++++
 .../dispatcher/kafka/AuditDispatcherBase.java      |    6 +
 .../kafka/AuditOpenSearchDispatcher.java           |    6 +
 .../kafka/TestAuditOpenSearchDispatcher.java       |   28 +-
 .../ranger/authz/model/RangerAccessInfo.java       |   21 +
 .../ranger/authz/model/RangerAuthzRequest.java     |    4 +
 .../ranger/authz/model/RangerResourceInfo.java     |    8 +
 .../apache/ranger/authz/model/RangerUserInfo.java  |   12 +
 .../ranger/plugin/util/PluginHeaderAuthConfig.java |  166 +++
 .../plugin/util/PluginHeaderAuthConfigTest.java    |   92 ++
 dev-support/ranger-docker/.env                     |    7 +-
 dev-support/ranger-docker/Dockerfile.ranger-kdc    |    4 +-
 .../ranger-docker/Dockerfile.ranger-opensearch     |   35 -
 dev-support/ranger-docker/README.md                |  154 +-
 ...cker-compose.ranger-audit-destination-hdfs.yml} |   12 +-
 ...docker-compose.ranger-audit-dispatcher-hdfs.yml |   71 -
 ...-compose.ranger-audit-dispatcher-opensearch.yml |   70 -
 ...docker-compose.ranger-audit-dispatcher-solr.yml |   71 -
 .../docker-compose.ranger-audit-ingestor.yml       |   71 -
 .../docker-compose.ranger-audit-server.yml         |  173 ---
 .../docker-compose.ranger-audit-service.yml        |  320 +++++
 .../ranger-docker/docker-compose.ranger-kafka.yml  |   30 +-
 .../docker-compose.ranger-opensearch.yml           |   47 -
 .../ranger-docker/docker-compose.ranger-ozone.yml  |   18 +-
 .../ranger-docker/docker-compose.ranger-solr.yml   |   66 -
 .../docker-compose.ranger-usersync.yml             |    2 +
 .../ranger-docker/docker-compose.ranger.yml        |    1 +
 dev-support/ranger-docker/download-archives.sh     |    4 -
 dev-support/ranger-docker/ozone-action-matcher.md  |   53 +
 .../admin/ranger-admin-install-mysql.properties    |   31 +-
 .../admin/ranger-admin-install-oracle.properties   |   31 +-
 .../admin/ranger-admin-install-postgres.properties |   35 +-
 .../ranger-admin-install-sqlserver.properties      |   22 +-
 dev-support/ranger-docker/scripts/admin/ranger.sh  |    5 +
 .../audit-ingestor/ranger-audit-ingestor.sh        |   15 +-
 .../scripts/db-test/test-patch-078-docker.sh       |  154 ++
 .../scripts/db-test/test-patch-078-e2e-docker.sh   |  334 +++++
 .../scripts/db-test/verify-patch-078.sh            |  204 +++
 .../kafka/kafka-client.properties}                 |   22 +-
 dev-support/ranger-docker/scripts/kdc/krb5.conf    |    2 +
 .../scripts/opensearch/opensearch-jaas.conf        |   18 -
 .../scripts/opensearch/opensearch.yml              |    8 +-
 .../scripts/opensearch/ranger-opensearch-setup.sh  |   32 -
 .../scripts/opensearch/ranger-opensearch.sh        |   38 -
 .../scripts/ozone/ozone-service-start.sh           |   73 +
 .../usersync/ranger-usersync-install.properties    |    7 +
 .../scripts/usersync/ranger-usersync.sh            |    2 +-
 distro/src/main/assembly/usersync.xml              |   14 +-
 .../integrating_applications.files/image1.png      |  Bin 0 -> 69777 bytes
 .../integrating_applications.files/image2.png      |  Bin 0 -> 108133 bytes
 .../resources/blogs/integrating_applications.html  |  828 +++++++++++
 docs/src/site/site.xml                             |    1 +
 docs/src/site/xdoc/blogs.xml                       |   10 +
 docs/src/site/xdoc/download.xml                    |   12 +-
 functional-tests/pytest.ini                        |   18 +-
 functional-tests/readme.md                         |  165 ++-
 .../rolerest/__init__.py                           |    6 +-
 functional-tests/rolerest/conftest.py              |  351 +++++
 functional-tests/rolerest/readme.md                |   90 ++
 functional-tests/rolerest/test_role_management.py  | 1254 +++++++++++++++++
 functional-tests/rolerest/test_role_utility_fun.py | 1316 +++++++++++++++++
 .../rolerest/utility/__init__.py                   |    6 +-
 functional-tests/rolerest/utility/utils.py         |  261 ++++
 functional-tests/run-tests.sh                      |  195 ++-
 .../xuserrest/__init__.py                          |    6 +-
 functional-tests/xuserrest/conftest.py             |  605 ++++++++
 functional-tests/xuserrest/readme.md               |  137 ++
 functional-tests/xuserrest/test_groups.py          | 1487 ++++++++++++++++++++
 functional-tests/xuserrest/test_permission.py      | 1424 +++++++++++++++++++
 functional-tests/xuserrest/test_secure_user.py     | 1311 +++++++++++++++++
 functional-tests/xuserrest/test_ugsync.py          |  746 ++++++++++
 functional-tests/xuserrest/test_user.py            | 1043 ++++++++++++++
 functional-tests/xuserrest/test_utility_fun.py     |  896 ++++++++++++
 .../xuserrest/utility/__init__.py                  |    6 +-
 functional-tests/xuserrest/utility/utils.py        |  812 +++++++++++
 kms/scripts/dba_script.py                          |  108 +-
 .../apache/hadoop/crypto/key/kms/server/KMS.java   |    2 +-
 .../ranger/kms/metrics/KMSMetricWrapper.java       |    2 +
 .../hadoop/crypto/key/kms/server/TestKMS.java      | 1105 ++++++++++-----
 .../authorization/knox/RangerPDPKnoxFilter.java    |    6 +-
 .../knox/TestRangerPDPKnoxFilter.java              |   82 ++
 .../nifi/registry/client/NiFiRegistryClient.java   |   56 +-
 .../registry/client/TestNiFiRegistryClientSSL.java |    9 +
 .../ranger/services/nifi/client/NiFiClient.java    |   56 +-
 .../services/nifi/client/TestNiFiClientSSL.java    |   69 +-
 pom.xml                                            |    6 +-
 .../ranger/metrics/RangerMetricsSystemWrapper.java |    2 -
 .../source/TestRangerMetricsContainerSource.java   |   14 +-
 ranger-tools/src/main/python/stress/stress_kms.py  |   16 +-
 .../optimized/current/ranger_core_db_mysql.sql     |   19 +-
 ...global-state.sql => 078-add-x_audit_config.sql} |   50 +-
 .../optimized/current/ranger_core_db_oracle.sql    |   21 +-
 .../db/oracle/patches/078-add-x_audit_config.sql   |   92 ++
 .../078-audit-partition-plan-global-state.sql      |   86 --
 .../optimized/current/ranger_core_db_postgres.sql  |   21 +-
 ...global-state.sql => 078-add-x_audit_config.sql} |   51 +-
 .../current/ranger_core_db_sqlanywhere.sql         |   21 +-
 ...global-state.sql => 078-add-x_audit_config.sql} |   35 +-
 .../optimized/current/ranger_core_db_sqlserver.sql |   31 +-
 ...global-state.sql => 078-add-x_audit_config.sql} |   44 +-
 security-admin/scripts/dba_script.py               |  108 +-
 security-admin/src/bin/ranger_usersync.py          |   28 +-
 .../java/org/apache/ranger/biz/RoleDBStore.java    |   14 +-
 .../java/org/apache/ranger/biz/RoleRefUpdater.java |   26 +-
 .../java/org/apache/ranger/biz/ServiceDBStore.java |   37 +-
 .../java/org/apache/ranger/biz/SessionMgr.java     |    2 +-
 .../java/org/apache/ranger/common/ServiceUtil.java |   15 -
 .../apache/ranger/db/XXServiceConfigDefDao.java    |   28 +
 .../PatchForExternalUserStatusUpdate_J10056.java   |   35 +-
 .../java/org/apache/ranger/rest/PublicAPIs.java    |   21 +-
 .../main/java/org/apache/ranger/rest/RoleREST.java |   50 +-
 .../java/org/apache/ranger/rest/ServiceREST.java   |   31 +-
 .../ranger/service/RangerServiceService.java       |   61 +-
 .../main/resources/META-INF/jpa_named_queries.xml  |    9 +
 .../src/views/ServiceManager/ServiceForm.jsx       |   21 +-
 .../views/ServiceManager/ServiceViewDetails.jsx    |   13 +-
 .../org/apache/ranger/biz/TestRoleDBStore.java     |    4 +-
 .../org/apache/ranger/biz/TestRoleRefUpdater.java  |   49 +
 .../org/apache/ranger/biz/TestServiceDBStore.java  |  293 ++++
 ...estPatchForExternalUserStatusUpdate_J10056.java |   49 +-
 .../org/apache/ranger/rest/TestPublicAPIs.java     |   16 +-
 .../java/org/apache/ranger/rest/TestRoleREST.java  |  298 +++-
 .../org/apache/ranger/rest/TestServiceREST.java    |  105 ++
 .../ranger/service/TestRangerServiceService.java   |  136 ++
 .../org/apache/ranger/metrics/MetricCacheUtil.java |  101 ++
 .../unixusersync/config/UserGroupSyncConfig.java   |    4 +
 .../process/PolicyMgrUserGroupBuilder.java         |   73 +-
 .../process/TestPolicyMgrUserGroupBuilder.java     |   36 +
 unixauthservice/pom.xml                            |  213 +++
 .../scripts/ranger-usersync-services.sh            |   24 +-
 unixauthservice/scripts/setup.py                   |    4 +-
 .../scripts/templates/installprop2xml.properties   |    8 +
 .../scripts/templates/ranger-ugsync-template.xml   |   20 +
 unixauthservice/scripts/updatepolicymgrpassword.py |    2 +-
 unixauthservice/scripts/updatepolicymgrpassword.sh |    2 +-
 .../metrics/UserSyncMetricsFetcher.java            |   24 +-
 .../metrics/UserSyncMetricsWrapper.java            |   92 ++
 .../metrics/source/RangerUserSyncSourceApis.java   |   19 +-
 .../metrics/source/RangerUserSyncSourceBase.java   |   37 +-
 .../metrics/source/RangerUserSyncSourceCache.java  |   19 +-
 .../source/RangerUserSyncSourceRoleStatus.java     |   65 +
 .../source/RangerUserSyncSourceSyncSource.java     |   19 +-
 .../ranger/authentication}/rest/MetricsREST.java   |   47 +-
 .../security/UserSyncAuthEntryPoint.java           |   26 +-
 .../authentication}/server/EmbeddedServer.java     |  668 +++++----
 .../server/RangerUserSyncServer.java               |   26 +-
 .../server/RangerUserSyncStarter.java              |   49 +-
 .../src/main/resources/hadoop-metrics2.properties  |   41 +-
 .../src/main/webapp/WEB-INF/applicationContext.xml |    2 +-
 .../webapp/WEB-INF/security/spring-security.xml    |   46 +
 unixauthservice/src/main/webapp/WEB-INF/web.xml    |   71 +
 349 files changed, 47362 insertions(+), 3759 deletions(-)
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/destination/AuditDestinationTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/destination/FileAuditDestinationTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/model/AuditIndexRecordTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/model/AuthzAuditEventTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/provider/AsyncAuditProviderTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/provider/AuditFileCacheProviderTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/provider/AuditProviderFactoryTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/provider/AuditWriterFactoryTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/provider/BaseAuditHandlerTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/provider/BufferedAuditProviderTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/provider/DummyAuditProviderTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/provider/Log4jTracerTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/provider/MiscUtilTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/provider/MultiDestAuditProviderTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/provider/StandAloneAuditProviderFactoryTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/queue/AuditAsyncQueueTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/queue/AuditBatchQueueTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/queue/AuditFileCacheProviderSpoolTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/queue/AuditFileQueueSpoolTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/queue/AuditFileQueueTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/queue/AuditFileSpoolTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/queue/AuditQueueTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/queue/AuditSummaryQueueTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/test/TestEventsTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/utils/AbstractKerberosUserTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/utils/AbstractRangerAuditWriterTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/utils/InMemoryJAASConfigurationTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/utils/KerberosActionTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/utils/KerberosJAASConfigUserTest.java
 create mode 100644 agents-audit/core/src/test/java/org/apache/ranger/audit/utils/RollingTimeUtilTest.java
 create mode 100644 agents-audit/dest-auditserver/src/test/java/org/apache/ranger/audit/destination/RangerAuditServerDestinationTest.java
 create mode 100644 agents-audit/dest-cloudwatch/src/test/java/org/apache/ranger/audit/destination/AmazonCloudWatchAuditDestinationTest.java
 create mode 100644 agents-audit/dest-hdfs/src/test/java/org/apache/ranger/audit/destination/HDFSAuditDestinationTest.java
 create mode 100644 agents-audit/dest-hdfs/src/test/java/org/apache/ranger/audit/provider/LocalFileLogBufferTest.java
 create mode 100644 agents-audit/dest-hdfs/src/test/java/org/apache/ranger/audit/provider/hdfs/HdfsAuditProviderTest.java
 create mode 100644 agents-audit/dest-hdfs/src/test/java/org/apache/ranger/audit/provider/hdfs/HdfsLogDestinationTest.java
 create mode 100644 agents-audit/dest-kafka/src/test/java/org/apache/ranger/audit/provider/kafka/KafkaAuditProviderTest.java
 create mode 100644 agents-audit/dest-log4j/src/test/java/org/apache/ranger/audit/destination/Log4JAuditDestinationTest.java
 create mode 100644 agents-audit/dest-log4j/src/test/java/org/apache/ranger/audit/provider/Log4jAuditProviderTest.java
 create mode 100644 agents-audit/dest-solr/src/test/java/org/apache/ranger/audit/destination/SolrAuditDestinationTest.java
 create mode 100644 agents-audit/dest-solr/src/test/java/org/apache/ranger/audit/provider/solr/SolrAuditProviderTest.java
 create mode 100644 agents-audit/orc-util/src/test/java/org/apache/ranger/audit/utils/ORCFileUtilTest.java
 create mode 100644 agents-audit/orc-util/src/test/java/org/apache/ranger/audit/utils/RangerORCAuditWriterTest.java
 copy security-admin/src/test/java/org/apache/ranger/security/context/TestRangerAdminOpContext.java => agents-common/src/test/java/org/apache/ranger/plugin/conditionevaluator/TestRangerAbstractConditionEvaluator.java (57%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/conditionevaluator/TestRangerAccessedFromClusterConditions.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/conditionevaluator/TestRangerContextAttributeValueConditions.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/conditionevaluator/TestRangerHiveResourcesAccessConditions.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/conditionevaluator/TestRangerScriptConditionEvaluator.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/conditionevaluator/TestRangerScriptTemplateConditionEvaluator.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/conditionevaluator/TestRangerTagConditions.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/contextenricher/TestRangerAbstractContextEnricher.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/contextenricher/TestRangerAdminGdsInfoRetriever.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/contextenricher/TestRangerAdminTagRetriever.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/contextenricher/TestRangerAdminUserStoreRetriever.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/contextenricher/TestRangerFileBasedGeolocationProvider.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/contextenricher/TestRangerFileBasedTagRetriever.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/contextenricher/TestRangerGdsEnricher.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/contextenricher/TestRangerServiceResourceMatcher.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/contextenricher/TestRangerTagEnricher.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/contextenricher/TestRangerTagForEval.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/contextenricher/TestRangerUserStoreEnricher.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/contextenricher/TestRangerUserStoreRefresher.java
 delete mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/contextenricher/TestTagEnricher.java
 copy agents-common/src/test/java/org/apache/ranger/plugin/{client/TestHadoopException.java => contextenricher/externalretrievers/TestGetFromDataFile.java} (50%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/contextenricher/externalretrievers/TestGetFromURL.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/contextenricher/externalretrievers/TestRangerMultiSourceUserStoreRetriever.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/geo/TestBinarySearchTree.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/geo/TestGeolocationMetadata.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/geo/TestRangerGeolocationData.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/geo/TestRangerGeolocationDatabase.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/geo/TestValuePrinter.java
 copy security-admin/src/test/java/org/apache/ranger/security/context/TestRangerSecurityContext.java => agents-common/src/test/java/org/apache/ranger/plugin/model/TestAuditFilter.java (50%)
 copy hdfs-agent/src/test/java/org/apache/ranger/authorization/hadoop/exceptions/TestRangerAccessControlException.java => agents-common/src/test/java/org/apache/ranger/plugin/model/TestGroupInfo.java (60%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerBaseModelObject.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerDatasetHeader.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerGds.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerGrant.java
 copy hbase-agent/src/test/java/org/apache/ranger/authorization/hbase/TestHbaseConstants.java => agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerMetrics.java (70%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerPluginInfo.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerPolicyDelta.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerPolicyHeader.java
 copy ugsync-util/src/test/java/org/apache/ranger/ugsyncutil/transform/TestAbstractMapper.java => agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerPrincipal.java (62%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerRole.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerSecurityZone.java
 copy security-admin/src/test/java/org/apache/ranger/security/context/TestRangerAdminOpContext.java => agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerSecurityZoneHeaderInfo.java (57%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerSecurityZoneV2.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerServiceDef.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerServiceHeaderInfo.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerServiceResource.java
 copy ugsync-util/src/test/java/org/apache/ranger/ugsyncutil/transform/TestMapper.java => agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerServiceResourceWithTags.java (56%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerServiceTags.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerTag.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerTagDef.java
 copy ugsync-util/src/test/java/org/apache/ranger/ugsyncutil/transform/TestAbstractMapper.java => agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerTagResourceMap.java (64%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerValidityRecurrence.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/TestRangerValiditySchedule.java
 copy ugsync-util/src/test/java/org/apache/ranger/ugsyncutil/transform/TestAbstractMapper.java => agents-common/src/test/java/org/apache/ranger/plugin/model/TestServiceDeleteResponse.java (62%)
 copy ugsync-util/src/test/java/org/apache/ranger/ugsyncutil/transform/TestAbstractMapper.java => agents-common/src/test/java/org/apache/ranger/plugin/model/TestUserInfo.java (54%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/validation/TestRangerRoleValidator.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/model/validation/TestValidationFailureDetails.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/policyengine/TestRangerResourceTrieCaseFolding.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/service/TestRangerAuthContext.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/service/TestRangerBaseService.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/service/TestRangerChainedPlugin.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/service/TestRangerDefaultRequestProcessor.java
 copy unixauthclient/src/test/java/org/apache/ranger/authentication/unix/jaas/TestUnixUserPrincipal.java => agents-common/src/test/java/org/apache/ranger/plugin/service/TestRangerDefaultService.java (59%)
 copy security-admin/src/test/java/org/apache/ranger/authentication/unix/jaas/TestRoleUserAuthorityGranter.java => agents-common/src/test/java/org/apache/ranger/plugin/service/TestResourceLookupContext.java (55%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/store/TestAbstractGdsStore.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/store/TestAbstractPredicateUtil.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/store/TestAbstractServiceStore.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/store/TestAbstractTagStore.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/store/TestEmbeddedServiceDefsUtil.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/store/TestPList.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/store/TestRangerServiceResourceSignature.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/store/TestRolePredicateUtil.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/store/TestSecurityZonePredicateUtil.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/store/TestServicePredicateUtil.java
 copy security-admin/src/test/java/org/apache/ranger/security/context/TestRangerSecurityContext.java => agents-common/src/test/java/org/apache/ranger/plugin/store/TestStoredServiceResource.java (52%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/store/TestTagPredicateUtil.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/store/TestTagValidator.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/store/file/TestGeolocationFileStore.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestAutoClosableLock.java
 copy hive-agent/src/test/java/com/xasecure/authorization/hive/authorizer/TestXaSecureHiveAuthorizerFactory.java => agents-common/src/test/java/org/apache/ranger/plugin/util/TestDownloadTrigger.java (60%)
 copy hive-agent/src/test/java/com/xasecure/authorization/hive/authorizer/TestXaSecureHiveAuthorizerFactory.java => agents-common/src/test/java/org/apache/ranger/plugin/util/TestDownloaderTask.java (57%)
 copy hive-agent/src/test/java/com/xasecure/authorization/hive/authorizer/TestXaSecureHiveAuthorizerFactory.java => agents-common/src/test/java/org/apache/ranger/plugin/util/TestGraalScriptEngineCreator.java (50%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestGrantRevokeRequest.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestGrantRevokeRoleRequest.java
 copy hive-agent/src/test/java/com/xasecure/authorization/hive/authorizer/TestXaSecureHiveAuthorizerFactory.java => agents-common/src/test/java/org/apache/ranger/plugin/util/TestJavaScriptEngineCreator.java (50%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestJsonUtilsV2.java
 copy security-admin/src/test/java/org/apache/ranger/security/web/filter/TestRangerUsernamePasswordAuthenticationFilter.java => agents-common/src/test/java/org/apache/ranger/plugin/util/TestJsonUtilsV2ReadResponse.java (60%)
 copy kms/src/test/java/org/apache/ranger/entity/TestXXRangerKeyStore.java => agents-common/src/test/java/org/apache/ranger/plugin/util/TestKeySearchFilter.java (50%)
 copy agents-common/src/test/java/org/apache/ranger/{authorization/hadoop/config/TestRangerAdminConfig.java => plugin/util/TestMacroProcessor.java} (58%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestPerfDataRecorder.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestPolicyRefresher.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerAccessRequestUtil.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerMetricsUtil.java
 copy hive-agent/src/test/java/com/xasecure/authorization/hive/authorizer/TestXaSecureHiveAuthorizerFactory.java => agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerObjectFactory.java (56%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerPerfTracer.java
 copy hive-agent/src/test/java/com/xasecure/authorization/hive/authorizer/TestXaSecureHiveAuthorizerFactory.java => agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerPerfTracerFactory.java (63%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerPolicyDeltaUtil.java
 copy kms/src/test/java/org/apache/ranger/entity/TestXXRangerKeyStore.java => agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerPurgeResult.java (53%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerRESTUtils.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerReadWriteLock.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerRequestedResources.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerResourceEvaluatorsRetriever.java
 copy hive-agent/src/test/java/com/xasecure/authorization/hive/authorizer/TestXaSecureHiveAuthorizerFactory.java => agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerRoles.java (55%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerRolesProvider.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerRolesUtil.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerSecurityZoneHelper.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerServiceNotFoundException.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerServiceTagsDeltaUtil.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerSslHelper.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerUserStore.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestRangerUserStoreUtil.java
 copy hive-agent/src/test/java/com/xasecure/authorization/hive/authorizer/TestXaSecureHiveAuthorizerFactory.java => agents-common/src/test/java/org/apache/ranger/plugin/util/TestScriptEngineUtil.java (60%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestSearchFilter.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestServiceGdsInfo.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestStringTokenReplacer.java
 copy {security-admin/src/test/java/org/apache/ranger/common => agents-common/src/test/java/org/apache/ranger/plugin/util}/TestTimedEventUtil.java (50%)
 copy kms/src/test/java/org/apache/ranger/entity/TestXXRangerKeyStore.java => agents-common/src/test/java/org/apache/ranger/plugin/util/TestURLEncoderUtil.java (59%)
 create mode 100644 agents-common/src/test/java/org/apache/ranger/plugin/util/TestXMLUtils.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/services/gds/TestRangerServiceGds.java
 create mode 100644 agents-common/src/test/java/org/apache/ranger/services/tag/TestRangerServiceTag.java
 create mode 100644 common-utils/src/main/java/org/apache/ranger/plugin/util/PluginHeaderAuthConfig.java
 create mode 100644 common-utils/src/test/java/org/apache/ranger/plugin/util/PluginHeaderAuthConfigTest.java
 delete mode 100644 dev-support/ranger-docker/Dockerfile.ranger-opensearch
 copy dev-support/ranger-docker/{Dockerfile.ranger-trino => docker-compose.ranger-audit-destination-hdfs.yml} (84%)
 delete mode 100644 dev-support/ranger-docker/docker-compose.ranger-audit-dispatcher-hdfs.yml
 delete mode 100644 dev-support/ranger-docker/docker-compose.ranger-audit-dispatcher-opensearch.yml
 delete mode 100644 dev-support/ranger-docker/docker-compose.ranger-audit-dispatcher-solr.yml
 delete mode 100644 dev-support/ranger-docker/docker-compose.ranger-audit-ingestor.yml
 delete mode 100644 dev-support/ranger-docker/docker-compose.ranger-audit-server.yml
 create mode 100644 dev-support/ranger-docker/docker-compose.ranger-audit-service.yml
 delete mode 100644 dev-support/ranger-docker/docker-compose.ranger-opensearch.yml
 delete mode 100644 dev-support/ranger-docker/docker-compose.ranger-solr.yml
 create mode 100644 dev-support/ranger-docker/ozone-action-matcher.md
 create mode 100755 dev-support/ranger-docker/scripts/db-test/test-patch-078-docker.sh
 create mode 100755 dev-support/ranger-docker/scripts/db-test/test-patch-078-e2e-docker.sh
 create mode 100755 dev-support/ranger-docker/scripts/db-test/verify-patch-078.sh
 copy dev-support/ranger-docker/{Dockerfile.ranger-postgres => scripts/kafka/kafka-client.properties} (55%)
 delete mode 100644 dev-support/ranger-docker/scripts/opensearch/opensearch-jaas.conf
 delete mode 100755 dev-support/ranger-docker/scripts/opensearch/ranger-opensearch-setup.sh
 delete mode 100755 dev-support/ranger-docker/scripts/opensearch/ranger-opensearch.sh
 create mode 100755 dev-support/ranger-docker/scripts/ozone/ozone-service-start.sh
 create mode 100644 docs/src/site/resources/blogs/integrating_applications.files/image1.png
 create mode 100644 docs/src/site/resources/blogs/integrating_applications.files/image2.png
 create mode 100644 docs/src/site/resources/blogs/integrating_applications.html
 copy security-admin/src/main/webapp/robots.txt => functional-tests/rolerest/__init__.py (92%)
 create mode 100644 functional-tests/rolerest/conftest.py
 create mode 100644 functional-tests/rolerest/readme.md
 create mode 100644 functional-tests/rolerest/test_role_management.py
 create mode 100644 functional-tests/rolerest/test_role_utility_fun.py
 copy security-admin/src/main/webapp/robots.txt => functional-tests/rolerest/utility/__init__.py (92%)
 create mode 100644 functional-tests/rolerest/utility/utils.py
 copy security-admin/src/main/webapp/robots.txt => functional-tests/xuserrest/__init__.py (92%)
 create mode 100644 functional-tests/xuserrest/conftest.py
 create mode 100644 functional-tests/xuserrest/readme.md
 create mode 100644 functional-tests/xuserrest/test_groups.py
 create mode 100644 functional-tests/xuserrest/test_permission.py
 create mode 100644 functional-tests/xuserrest/test_secure_user.py
 create mode 100644 functional-tests/xuserrest/test_ugsync.py
 create mode 100644 functional-tests/xuserrest/test_user.py
 create mode 100644 functional-tests/xuserrest/test_utility_fun.py
 copy security-admin/src/main/webapp/robots.txt => functional-tests/xuserrest/utility/__init__.py (92%)
 create mode 100644 functional-tests/xuserrest/utility/utils.py
 copy plugin-nifi-registry/src/test/java/org/apache/ranger/services/nifi/registry/client/TestNiFiRegistryClientSSL.java => plugin-nifi/src/test/java/org/apache/ranger/services/nifi/client/TestNiFiClientSSL.java (87%)
 mode change 100755 => 100644 pom.xml
 rename security-admin/db/mysql/patches/{078-audit-partition-plan-global-state.sql => 078-add-x_audit_config.sql} (60%)
 create mode 100644 security-admin/db/oracle/patches/078-add-x_audit_config.sql
 delete mode 100644 security-admin/db/oracle/patches/078-audit-partition-plan-global-state.sql
 rename security-admin/db/postgres/patches/{078-audit-partition-plan-global-state.sql => 078-add-x_audit_config.sql} (57%)
 rename security-admin/db/sqlanywhere/patches/{078-audit-partition-plan-global-state.sql => 078-add-x_audit_config.sql} (59%)
 rename security-admin/db/sqlserver/patches/{078-audit-partition-plan-global-state.sql => 078-add-x_audit_config.sql} (62%)
 create mode 100644 ugsync/src/main/java/org/apache/ranger/metrics/MetricCacheUtil.java
 copy security-admin/src/main/java/org/apache/ranger/common/GUIDUtil.java => unixauthservice/src/main/java/org/apache/ranger/authentication/metrics/UserSyncMetricsFetcher.java (57%)
 create mode 100644 unixauthservice/src/main/java/org/apache/ranger/authentication/metrics/UserSyncMetricsWrapper.java
 copy security-admin/src/main/java/org/apache/ranger/metrics/source/RangerAdminMetricsSourceService.java => unixauthservice/src/main/java/org/apache/ranger/authentication/metrics/source/RangerUserSyncSourceApis.java (65%)
 copy security-admin/src/main/java/org/apache/ranger/metrics/source/RangerAdminMetricsSourceBase.java => unixauthservice/src/main/java/org/apache/ranger/authentication/metrics/source/RangerUserSyncSourceBase.java (53%)
 copy security-admin/src/main/java/org/apache/ranger/metrics/source/RangerAdminMetricsSourceService.java => unixauthservice/src/main/java/org/apache/ranger/authentication/metrics/source/RangerUserSyncSourceCache.java (65%)
 create mode 100644 unixauthservice/src/main/java/org/apache/ranger/authentication/metrics/source/RangerUserSyncSourceRoleStatus.java
 copy security-admin/src/main/java/org/apache/ranger/metrics/source/RangerAdminMetricsSourceDenyConditions.java => unixauthservice/src/main/java/org/apache/ranger/authentication/metrics/source/RangerUserSyncSourceSyncSource.java (63%)
 copy {security-admin/src/main/java/org/apache/ranger => unixauthservice/src/main/java/org/apache/ranger/authentication}/rest/MetricsREST.java (74%)
 copy audit-server/audit-ingestor/src/main/java/org/apache/ranger/audit/security/AuditAuthEntryPoint.java => unixauthservice/src/main/java/org/apache/ranger/authentication/security/UserSyncAuthEntryPoint.java (57%)
 copy {audit-server/audit-ingestor/src/main/java/org/apache/ranger/audit => unixauthservice/src/main/java/org/apache/ranger/authentication}/server/EmbeddedServer.java (55%)
 copy ugsync-util/src/main/java/org/apache/ranger/ugsyncutil/transform/AbstractMapper.java => unixauthservice/src/main/java/org/apache/ranger/authentication/server/RangerUserSyncServer.java (57%)
 copy agents-common/src/main/java/org/apache/ranger/authorization/hadoop/config/RangerAuditConfig.java => unixauthservice/src/main/java/org/apache/ranger/authentication/server/RangerUserSyncStarter.java (52%)
 copy {security-admin => unixauthservice}/src/main/resources/hadoop-metrics2.properties (51%)
 copy {audit-server/audit-ingestor => unixauthservice}/src/main/webapp/WEB-INF/applicationContext.xml (97%)
 create mode 100644 unixauthservice/src/main/webapp/WEB-INF/security/spring-security.xml
 create mode 100644 unixauthservice/src/main/webapp/WEB-INF/web.xml


(ranger) 01/01: RANGER-5720: Finalize patch 078 x_audit_config and add docker DB E2E tests.

Posted by ra...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ramackri pushed a commit to branch RANGER-5720-patch
in repository https://gitbox.apache.org/repos/asf/ranger.git

commit 50e3b11b7251dbba2020f38bffcd637d34374d0c
Author: ramk <ra...@cloudera.com>
AuthorDate: Thu Aug 27 19:06:21 2026 +0530

    RANGER-5720: Finalize patch 078 x_audit_config and add docker DB E2E tests.
    
    Rename patch 078 to add-x_audit_config, store all audit runtime settings in
    x_audit_config (not x_ranger_global_state), fix Oracle upgrade SQL, drop a
    stale SQL Server FK CHECK from optimized schema, and add ranger-docker scripts
    to verify fresh install and 077→078 upgrade on all four docker DB backends.
    
    Co-authored-by: Cursor <cu...@cursor.com>
---
 .../scripts/db-test/test-patch-078-docker.sh       | 154 ++++++++++
 .../scripts/db-test/test-patch-078-e2e-docker.sh   | 334 +++++++++++++++++++++
 .../scripts/db-test/verify-patch-078.sh            | 204 +++++++++++++
 .../optimized/current/ranger_core_db_mysql.sql     |   3 +-
 ...global-state.sql => 078-add-x_audit_config.sql} |   8 +-
 .../optimized/current/ranger_core_db_oracle.sql    |   3 +-
 .../db/oracle/patches/078-add-x_audit_config.sql   |  92 ++++++
 .../078-audit-partition-plan-global-state.sql      | 109 -------
 .../optimized/current/ranger_core_db_postgres.sql  |   3 +-
 ...global-state.sql => 078-add-x_audit_config.sql} |   8 +-
 .../current/ranger_core_db_sqlanywhere.sql         |   4 +-
 ...global-state.sql => 078-add-x_audit_config.sql} |   8 +-
 .../optimized/current/ranger_core_db_sqlserver.sql |   3 +-
 ...global-state.sql => 078-add-x_audit_config.sql} |  10 +-
 14 files changed, 797 insertions(+), 146 deletions(-)

diff --git a/dev-support/ranger-docker/scripts/db-test/test-patch-078-docker.sh b/dev-support/ranger-docker/scripts/db-test/test-patch-078-docker.sh
new file mode 100755
index 000000000..31ccb989e
--- /dev/null
+++ b/dev-support/ranger-docker/scripts/db-test/test-patch-078-docker.sh
@@ -0,0 +1,154 @@
+#!/bin/bash
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# End-to-end patch 078 test: build admin (if needed), start Ranger Admin per DB, verify.
+#
+# Usage (from dev-support/ranger-docker):
+#   ./scripts/db-test/test-patch-078-docker.sh              # all docker DBs
+#   ./scripts/db-test/test-patch-078-docker.sh postgres     # one DB
+#
+# Prerequisites:
+#   - Docker with >= 8 GB memory
+#   - JDBC jars in downloads/ (run ./download-archives.sh)
+#   - Ranger admin tarball in dist/ OR repo built via mvn
+
+set -euo pipefail
+
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+RANGER_DOCKER_DIR="$(cd "${SCRIPT_DIR}/../.." && pwd)"
+REPO_ROOT="$(cd "${RANGER_DOCKER_DIR}/../.." && pwd)"
+
+# shellcheck disable=SC1091
+source "${RANGER_DOCKER_DIR}/.env"
+
+DB_TYPES=("$@")
+if [ "${#DB_TYPES[@]}" -eq 0 ]; then
+  DB_TYPES=(postgres mysql oracle sqlserver)
+fi
+
+ensure_admin_tarball() {
+  local tarball="${RANGER_DOCKER_DIR}/dist/ranger-${RANGER_VERSION}-admin.tar.gz"
+  if [ -f "${tarball}" ]; then
+    echo "[ok] Admin tarball present: ${tarball}"
+    return
+  fi
+  echo "[build] Packaging admin tarball from ${REPO_ROOT} (distro module)..."
+  (cd "${REPO_ROOT}" && mvn -pl distro -am package -DskipTests -q)
+  cp "${REPO_ROOT}"/target/ranger-"${RANGER_VERSION}"-admin.tar.gz "${tarball}"
+  echo "${RANGER_VERSION}" > "${RANGER_DOCKER_DIR}/dist/version"
+}
+
+teardown_stack() {
+  local db_type="$1"
+  echo "[teardown] ${db_type} stack..."
+  export RANGER_DB_TYPE="${db_type}"
+  docker compose -f "${RANGER_DOCKER_DIR}/docker-compose.ranger.yml" down -v --remove-orphans 2>/dev/null || true
+  docker rm -f ranger ranger-postgres ranger-mysql ranger-oracle ranger-sqlserver \
+    ranger-kdc ranger-zk ranger-solr 2>/dev/null || true
+  docker network rm rangernw 2>/dev/null || true
+  local i
+  for i in $(seq 1 12); do
+    if ! docker ps -a --format '{{.Names}}' | grep -qE '^ranger(-|$)'; then
+      return 0
+    fi
+    sleep 2
+  done
+  local leftover
+  leftover="$(docker ps -a --filter name=ranger --format '{{.Names}}' 2>/dev/null || true)"
+  if [ -n "${leftover}" ]; then
+    echo "${leftover}" | xargs docker rm -f 2>/dev/null || true
+  fi
+}
+
+wait_for_db_setup() {
+  local db_type="$1"
+  local max_wait=90
+  case "${db_type}" in
+    oracle|sqlserver) max_wait=120 ;;
+  esac
+  local i
+  echo "[3/4] Waiting for DB setup / patch 078 (up to $((max_wait * 10))s)..."
+  for i in $(seq 1 "${max_wait}"); do
+    if docker logs ranger 2>&1 | grep -qE "DB_PATCHES have already been applied|Ranger Admin Setup completed|Patch 078|DEFAULT_ALL_ADMIN"; then
+      sleep 5
+      if "${SCRIPT_DIR}/verify-patch-078.sh" >/dev/null 2>&1; then
+        "${SCRIPT_DIR}/verify-patch-078.sh"
+        echo "  DB verified after ~$((i * 10))s"
+        return 0
+      fi
+    fi
+    if "${SCRIPT_DIR}/verify-patch-078.sh" >/dev/null 2>&1; then
+      "${SCRIPT_DIR}/verify-patch-078.sh"
+      echo "  DB verified after ~$((i * 10))s"
+      return 0
+    fi
+    if [ "${i}" -eq "${max_wait}" ]; then
+      echo "[error] Patch 078 verification timed out; ranger logs:"
+      docker logs ranger 2>&1 | tail -40
+      return 1
+    fi
+    sleep 10
+  done
+}
+
+test_db() {
+  local db_type="$1"
+  echo ""
+  echo "=========================================="
+  echo "Testing patch 078 with RANGER_DB_TYPE=${db_type}"
+  echo "=========================================="
+
+  export RANGER_DB_TYPE="${db_type}"
+  export KERBEROS_ENABLED=false
+
+  teardown_stack "${db_type}"
+
+  echo "[1/4] Building DB + Admin images..."
+  docker compose -f "${RANGER_DOCKER_DIR}/docker-compose.ranger.yml" \
+    build ranger-db ranger ranger-kdc ranger-zk
+
+  echo "[2/4] Starting stack (DB + Admin + ZK; Kerberos off, no Solr)..."
+  if ! docker compose -f "${RANGER_DOCKER_DIR}/docker-compose.ranger.yml" \
+    up -d 2>&1 | tee /tmp/ranger-compose-up-${db_type}.log; then
+    echo "[error] docker compose up failed:"
+    tail -20 /tmp/ranger-compose-up-${db_type}.log
+    return 1
+  fi
+
+  if ! wait_for_db_setup "${db_type}"; then
+    return 1
+  fi
+
+  teardown_stack "${db_type}"
+}
+
+ensure_admin_tarball
+
+FAILED=()
+for db in "${DB_TYPES[@]}"; do
+  if ! test_db "${db}"; then
+    FAILED+=("${db}")
+  fi
+done
+
+echo ""
+echo "=========================================="
+if [ "${#FAILED[@]}" -eq 0 ]; then
+  echo "All tested DB types passed patch 078 verification."
+else
+  echo "Failed DB types: ${FAILED[*]}"
+  exit 1
+fi
diff --git a/dev-support/ranger-docker/scripts/db-test/test-patch-078-e2e-docker.sh b/dev-support/ranger-docker/scripts/db-test/test-patch-078-e2e-docker.sh
new file mode 100755
index 000000000..756a1a615
--- /dev/null
+++ b/dev-support/ranger-docker/scripts/db-test/test-patch-078-e2e-docker.sh
@@ -0,0 +1,334 @@
+#!/bin/bash
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Fresh-install and 077->078 upgrade E2E for patch 078 (all docker DB backends).
+#
+# Usage (from dev-support/ranger-docker):
+#   ./scripts/db-test/test-patch-078-e2e-docker.sh
+#   ./scripts/db-test/test-patch-078-e2e-docker.sh postgres mysql
+
+set -euo pipefail
+
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+RANGER_DOCKER_DIR="$(cd "${SCRIPT_DIR}/../.." && pwd)"
+REPO_ROOT="$(cd "${RANGER_DOCKER_DIR}/../.." && pwd)"
+
+# shellcheck disable=SC1091
+source "${RANGER_DOCKER_DIR}/.env"
+
+DB_TYPES=("$@")
+if [ "${#DB_TYPES[@]}" -eq 0 ]; then
+  DB_TYPES=(postgres mysql oracle sqlserver)
+fi
+
+DIST_TARBALL="${RANGER_DOCKER_DIR}/dist/ranger-${RANGER_VERSION}-admin.tar.gz"
+MASTER_TARBALL="${RANGER_DOCKER_DIR}/dist/ranger-${RANGER_VERSION}-admin-master.tar.gz"
+BRANCH_TARBALL="${RANGER_DOCKER_DIR}/dist/ranger-${RANGER_VERSION}-admin-branch.tar.gz"
+
+build_admin_tarball_with_db() {
+  local db_dir="$1"
+  local out_tarball="$2"
+  local base_tarball="${DIST_TARBALL}"
+
+  if [ ! -f "${base_tarball}" ]; then
+    echo "[error] Base admin tarball missing: ${base_tarball}" >&2
+    return 1
+  fi
+
+  local workdir
+  workdir="$(mktemp -d)"
+  tar -xzf "${base_tarball}" -C "${workdir}"
+  local admin_dir
+  admin_dir="$(find "${workdir}" -maxdepth 1 -type d -name 'ranger-*-admin' | head -1)"
+  chmod -R u+w "${admin_dir}"
+  rsync -a --delete --exclude='._*' --exclude='.DS_Store' "${db_dir}/" "${admin_dir}/db/"
+  cp "${REPO_ROOT}/security-admin/scripts/dba_script.py" "${admin_dir}/dba_script.py"
+  COPYFILE_DISABLE=1 tar -czf "${out_tarball}" -C "${workdir}" "$(basename "${admin_dir}")"
+  rm -rf "${workdir}"
+  echo "[ok] Built ${out_tarball}"
+}
+
+fix_master_sqlserver_schema() {
+  local master_db="$1"
+  local schema="${master_db}/sqlserver/optimized/current/ranger_core_db_sqlserver.sql"
+  # master @077: patch 077 dropped x_policy_ref_user audit FKs but left an orphaned
+  # CHECK CONSTRAINT line in optimized schema (fixed on branch in RANGER-5720).
+  if [ -f "${schema}" ]; then
+    sed -i '' '/x_policy_ref_user\] CHECK CONSTRAINT \[x_policy_ref_user_FK_upd_by\]/d' "${schema}" 2>/dev/null \
+      || sed -i '/x_policy_ref_user\] CHECK CONSTRAINT \[x_policy_ref_user_FK_upd_by\]/d' "${schema}"
+  fi
+}
+
+prepare_tarballs() {
+  echo "[prep] Building master (077) and branch (078) admin tarballs..."
+  local master_db="${RANGER_DOCKER_DIR}/.patch078-master-db"
+  local branch_db="${REPO_ROOT}/security-admin/db"
+  rm -rf "${master_db}"
+  mkdir -p "${master_db}"
+  git -C "${REPO_ROOT}" archive master:security-admin/db | tar -x -C "${master_db}"
+  fix_master_sqlserver_schema "${master_db}"
+  build_admin_tarball_with_db "${master_db}" "${MASTER_TARBALL}"
+  build_admin_tarball_with_db "${branch_db}" "${BRANCH_TARBALL}"
+  cp "${BRANCH_TARBALL}" "${DIST_TARBALL}"
+}
+
+use_tarball() {
+  cp "$1" "${DIST_TARBALL}"
+}
+
+teardown_stack() {
+  local db_type="$1"
+  echo "[teardown] ${db_type} stack..."
+  export RANGER_DB_TYPE="${db_type}"
+  docker compose -f "${RANGER_DOCKER_DIR}/docker-compose.ranger.yml" down -v --remove-orphans 2>/dev/null || true
+  docker rm -f ranger ranger-postgres ranger-mysql ranger-oracle ranger-sqlserver \
+    ranger-kdc ranger-zk ranger-solr ranger-db 2>/dev/null || true
+  docker network rm rangernw 2>/dev/null || true
+  sleep 2
+}
+
+wait_for_db_setup() {
+  local db_type="$1"
+  export RANGER_DB_TYPE="${db_type}"
+  local max_wait=90
+  case "${db_type}" in
+    oracle|sqlserver) max_wait=120 ;;
+  esac
+  local i
+  for i in $(seq 1 "${max_wait}"); do
+    if "${SCRIPT_DIR}/verify-patch-078.sh" >/dev/null 2>&1; then
+      if "${SCRIPT_DIR}/verify-patch-078.sh"; then
+        echo "  verified after ~$((i * 10))s"
+        return 0
+      fi
+    fi
+    if [ "${i}" -eq "${max_wait}" ]; then
+      echo "[error] verification timed out; last verify attempt:"
+      "${SCRIPT_DIR}/verify-patch-078.sh" || true
+      docker logs ranger 2>&1 | tail -20 || true
+      return 1
+    fi
+    sleep 10
+  done
+}
+
+wait_for_master_at_077() {
+  local db_type="$1"
+  export RANGER_DB_TYPE="${db_type}"
+  local max_wait=120
+  case "${db_type}" in
+    oracle|sqlserver) max_wait=150 ;;
+  esac
+  local i patch077=""
+  for i in $(seq 1 "${max_wait}"); do
+    patch077=""
+    case "${db_type}" in
+      postgres)
+        patch077="$(docker exec ranger-postgres psql -U rangeradmin -d ranger -t -A -c "SELECT COALESCE(active,'') FROM x_db_version_h WHERE version='077';" 2>/dev/null | tr -d '\r')"
+        ;;
+      mysql)
+        patch077="$(docker exec ranger-mysql mysql -urangeradmin -prangerR0cks! ranger -N -s -e "SELECT COALESCE(active,'') FROM x_db_version_h WHERE version='077';" 2>/dev/null || true)"
+        ;;
+      oracle)
+        patch077="$(docker exec ranger-oracle bash -lc "sqlplus -s rangeradmin/rangerR0cks!@//localhost:1521/FREEPDB1 <<'EOSQL'
+SET HEADING OFF FEEDBACK OFF PAGES 0
+SELECT NVL(active,' ') FROM x_db_version_h WHERE version='077';
+EXIT
+EOSQL" 2>/dev/null | grep -v '^$' | tail -1 | tr -d '\r\t' | xargs || true)"
+        ;;
+      sqlserver)
+        patch077="$(docker exec ranger-sqlserver /opt/mssql-tools18/bin/sqlcmd -S localhost -U rangeradmin -P rangerR0cks! -d ranger -C -h -1 -W -Q "SET NOCOUNT ON; SELECT ISNULL(active,'') FROM x_db_version_h WHERE version='077'" 2>/dev/null | tr -d '\r' | sed '/^$/d' | head -1)"
+        ;;
+    esac
+    if [ "${patch077}" = "Y" ]; then
+      echo "  master DB at patch 077 after ~$((i * 10))s"
+      return 0
+    fi
+    if [ "${i}" -eq "${max_wait}" ]; then
+      echo "[error] master install did not reach patch 077"
+      docker logs ranger 2>&1 | tail -30
+      return 1
+    fi
+    sleep 10
+  done
+}
+
+start_stack() {
+  local db_type="$1"
+  export RANGER_DB_TYPE="${db_type}"
+  export KERBEROS_ENABLED=false
+  teardown_stack "${db_type}"
+  docker compose -f "${RANGER_DOCKER_DIR}/docker-compose.ranger.yml" \
+    build ranger-db ranger ranger-kdc ranger-zk
+  docker compose -f "${RANGER_DOCKER_DIR}/docker-compose.ranger.yml" up -d
+}
+
+verify_patch_077_only() {
+  local db_type="$1"
+  export RANGER_DB_TYPE="${db_type}"
+  local patch078=""
+  case "${db_type}" in
+    postgres)
+      patch078="$(docker exec ranger-postgres psql -U rangeradmin -d ranger -t -A -c "SELECT COALESCE(active,'') FROM x_db_version_h WHERE version='078';" 2>/dev/null | tr -d '\r')"
+      ;;
+    mysql)
+      patch078="$(docker exec ranger-mysql mysql -urangeradmin -prangerR0cks! ranger -N -s -e "SELECT COALESCE(active,'') FROM x_db_version_h WHERE version='078';" 2>/dev/null || true)"
+      ;;
+    oracle)
+      patch078="$(docker exec ranger-oracle bash -lc "sqlplus -s rangeradmin/rangerR0cks!@//localhost:1521/FREEPDB1 <<'EOSQL'
+SET HEADING OFF FEEDBACK OFF PAGES 0
+SELECT NVL(active,' ') FROM x_db_version_h WHERE version='078';
+EXIT
+EOSQL" 2>/dev/null | grep -v '^$' | tail -1 | tr -d '\r\t' | xargs || true)"
+      ;;
+    sqlserver)
+      patch078="$(docker exec ranger-sqlserver /opt/mssql-tools18/bin/sqlcmd -S localhost -U rangeradmin -P rangerR0cks! -d ranger -C -h -1 -W -Q "SET NOCOUNT ON; SELECT ISNULL(active,'') FROM x_db_version_h WHERE version='078'" 2>/dev/null | tr -d '\r' | sed '/^$/d' | head -1)"
+      ;;
+  esac
+  if [ "${patch078}" = "Y" ]; then
+    echo "[error] patch 078 already applied before upgrade step" >&2
+    return 1
+  fi
+  echo "  [ok] patch 078 not yet applied (expected pre-upgrade)"
+}
+
+clear_patch_078_marker() {
+  local db_type="$1"
+  case "${db_type}" in
+    postgres)
+      docker exec ranger-postgres psql -U rangeradmin -d ranger -c "DELETE FROM x_db_version_h WHERE version='078';"
+      ;;
+    mysql)
+      docker exec ranger-mysql mysql -urangeradmin -prangerR0cks! ranger -e "DELETE FROM x_db_version_h WHERE version='078';"
+      ;;
+    oracle)
+      docker exec ranger-oracle bash -lc "sqlplus -s rangeradmin/rangerR0cks!@//localhost:1521/FREEPDB1 <<'EOSQL'
+DELETE FROM x_db_version_h WHERE version='078';
+COMMIT;
+EXIT
+EOSQL"
+      ;;
+    sqlserver)
+      docker exec ranger-sqlserver /opt/mssql-tools18/bin/sqlcmd -S localhost -U rangeradmin -P rangerR0cks! -d ranger -C -Q "DELETE FROM x_db_version_h WHERE version='078';"
+      ;;
+  esac
+}
+
+clear_db_patches_marker() {
+  local db_type="$1"
+  case "${db_type}" in
+    postgres)
+      docker exec ranger-postgres psql -U rangeradmin -d ranger -c "DELETE FROM x_db_version_h WHERE version='DB_PATCHES';"
+      ;;
+    mysql)
+      docker exec ranger-mysql mysql -urangeradmin -prangerR0cks! ranger -e "DELETE FROM x_db_version_h WHERE version='DB_PATCHES';"
+      ;;
+    oracle)
+      docker exec ranger-oracle bash -lc "sqlplus -s rangeradmin/rangerR0cks!@//localhost:1521/FREEPDB1 <<'EOSQL'
+DELETE FROM x_db_version_h WHERE version='DB_PATCHES';
+COMMIT;
+EXIT
+EOSQL"
+      ;;
+    sqlserver)
+      docker exec ranger-sqlserver /opt/mssql-tools18/bin/sqlcmd -S localhost -U rangeradmin -P rangerR0cks! -d ranger -C -Q "DELETE FROM x_db_version_h WHERE version='DB_PATCHES';"
+      ;;
+  esac
+}
+
+run_db_setup_in_container() {
+  docker exec ranger bash -lc '
+    set -e
+    ADMIN=$(find /opt/ranger -maxdepth 2 -type d -name "ranger-*-admin" | head -1)
+    cd "${ADMIN}"
+    python3 db_setup.py
+  '
+}
+
+apply_upgrade_in_container() {
+  local branch_db="$1"
+  local db_type="$2"
+  local admin_path patch_file="${branch_db}/${db_type}/patches/078-add-x_audit_config.sql"
+  admin_path="$(docker exec ranger bash -lc 'find /opt/ranger -maxdepth 2 -type d -name "ranger-*-admin" | head -1')"
+  if [ ! -f "${patch_file}" ]; then
+    echo "[error] missing patch file: ${patch_file}" >&2
+    return 1
+  fi
+  docker cp "${patch_file}" "ranger:${admin_path}/db/${db_type}/patches/078-add-x_audit_config.sql"
+  docker exec ranger bash -lc "rm -f ${admin_path}/db/${db_type}/patches/078-audit-partition-plan-global-state.sql ${admin_path}/db/${db_type}/patches/._078* 2>/dev/null || true"
+  clear_patch_078_marker "${db_type}"
+  clear_db_patches_marker "${db_type}"
+  run_db_setup_in_container
+}
+
+test_fresh_install() {
+  local db_type="$1"
+  echo ""
+  echo "======== Fresh install: ${db_type} ========"
+  use_tarball "${BRANCH_TARBALL}"
+  start_stack "${db_type}"
+  wait_for_db_setup "${db_type}"
+  teardown_stack "${db_type}"
+}
+
+test_upgrade() {
+  local db_type="$1"
+  echo ""
+  echo "======== Upgrade 077->078: ${db_type} ========"
+  use_tarball "${MASTER_TARBALL}"
+  start_stack "${db_type}"
+  wait_for_master_at_077 "${db_type}" || { teardown_stack "${db_type}"; return 1; }
+  verify_patch_077_only "${db_type}" || { teardown_stack "${db_type}"; return 1; }
+  apply_upgrade_in_container "${REPO_ROOT}/security-admin/db" "${db_type}" || { teardown_stack "${db_type}"; return 1; }
+  wait_for_db_setup "${db_type}" || { teardown_stack "${db_type}"; return 1; }
+  teardown_stack "${db_type}"
+}
+
+prepare_tarballs
+
+FRESH_FAILED=()
+UPGRADE_FAILED=()
+
+if [ "${SKIP_FRESH:-0}" != "1" ]; then
+  for db in "${DB_TYPES[@]}"; do
+    if ! test_fresh_install "${db}"; then
+      FRESH_FAILED+=("${db}")
+    fi
+  done
+else
+  echo "[skip] Fresh install tests skipped (SKIP_FRESH=1)"
+fi
+
+for db in "${DB_TYPES[@]}"; do
+  if ! test_upgrade "${db}"; then
+    UPGRADE_FAILED+=("${db}")
+  fi
+done
+
+echo ""
+echo "=========================================="
+if [ "${SKIP_FRESH:-0}" != "1" ]; then
+  echo "Fresh install: $([ ${#FRESH_FAILED[@]} -eq 0 ] && echo PASS || echo "FAIL (${FRESH_FAILED[*]})")"
+fi
+echo "Upgrade 077->078: $([ ${#UPGRADE_FAILED[@]} -eq 0 ] && echo PASS || echo "FAIL (${UPGRADE_FAILED[*]})")"
+echo "=========================================="
+
+if [ "${SKIP_FRESH:-0}" != "1" ] && [ "${#FRESH_FAILED[@]}" -ne 0 ]; then
+  exit 1
+fi
+if [ "${#UPGRADE_FAILED[@]}" -ne 0 ]; then
+  exit 1
+fi
diff --git a/dev-support/ranger-docker/scripts/db-test/verify-patch-078.sh b/dev-support/ranger-docker/scripts/db-test/verify-patch-078.sh
new file mode 100755
index 000000000..fa9f60f9c
--- /dev/null
+++ b/dev-support/ranger-docker/scripts/db-test/verify-patch-078.sh
@@ -0,0 +1,204 @@
+#!/bin/bash
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Verify RANGER-5720 / patch 078 outcomes in a Ranger Admin database.
+#
+# Usage (from dev-support/ranger-docker):
+#   export RANGER_DB_TYPE=postgres   # postgres|mysql|oracle|sqlserver
+#   ./scripts/db-test/verify-patch-078.sh
+
+set -euo pipefail
+
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+RANGER_DOCKER_DIR="$(cd "${SCRIPT_DIR}/../.." && pwd)"
+DB_TYPE="${RANGER_DB_TYPE:-postgres}"
+
+PASS=0
+FAIL=0
+
+pass() { echo "  [PASS] $*"; PASS=$((PASS + 1)); }
+fail() { echo "  [FAIL] $*"; FAIL=$((FAIL + 1)); }
+
+check_eq() {
+  local label="$1" expected="$2" actual="$3"
+  if [ "${actual}" = "${expected}" ]; then
+    pass "${label} (${actual})"
+  else
+    fail "${label} expected '${expected}', got '${actual}'"
+  fi
+}
+
+check_contains() {
+  local label="$1" needle="$2" haystack="$3"
+  if echo "${haystack}" | grep -q "${needle}"; then
+    pass "${label}"
+  else
+    fail "${label} (missing '${needle}' in '${haystack}')"
+  fi
+}
+
+verify_audit_config_common() {
+  check_eq "ingestor.url" "https://ranger-audit-ingestor:8765" "${INGESTOR_URL}"
+  check_eq "service.hive.allowed.users" "hive" "${HIVE_USERS}"
+  check_contains "audit.partition.plan JSON" "ranger_audits" "${PLAN_JSON}"
+  check_contains "audit.partition.plan buffer" "buffer" "${PLAN_JSON}"
+  if [ -n "${GLOBAL_PLAN}" ]; then
+    fail "x_ranger_global_state partition plan row should be absent (got '${GLOBAL_PLAN}')"
+  else
+    pass "no x_ranger_global_state partition plan row"
+  fi
+}
+
+echo "=== Patch 078 verification (${DB_TYPE}) ==="
+
+case "${DB_TYPE}" in
+  postgres)
+    DB_CONTAINER="${DB_CONTAINER:-ranger-postgres}"
+    run_sql() {
+      docker exec "${DB_CONTAINER}" psql -U rangeradmin -d ranger -t -A -c "$1" 2>/dev/null | tr -d '\r'
+    }
+    STATUS="$(run_sql "SELECT status FROM x_portal_user WHERE login_id='rangerauditserver';")"
+    PASSWORD="$(run_sql "SELECT COALESCE(password,'') FROM x_portal_user WHERE login_id='rangerauditserver';")"
+    ROLE="$(run_sql "SELECT user_role FROM x_portal_user_role WHERE user_id=(SELECT id FROM x_portal_user WHERE login_id='rangerauditserver');")"
+    INGESTOR_URL="$(run_sql "SELECT cfg_value FROM x_audit_config WHERE cfg_name='ingestor.url';")"
+    HIVE_USERS="$(run_sql "SELECT cfg_value FROM x_audit_config WHERE cfg_name='service.hive.allowed.users';")"
+    PLAN_JSON="$(run_sql "SELECT cfg_value FROM x_audit_config WHERE cfg_name='audit.partition.plan';")"
+    GLOBAL_PLAN="$(run_sql "SELECT state_name FROM x_ranger_global_state WHERE state_name='RangerAuditPartitionPlan';")"
+    PATCH078="$(run_sql "SELECT active FROM x_db_version_h WHERE version='078';")"
+    COLTYPE="$(run_sql "SELECT data_type FROM information_schema.columns WHERE table_name='x_ranger_global_state' AND column_name='app_data';")"
+    check_eq "rangerauditserver status" "0" "${STATUS}"
+    check_eq "rangerauditserver password" "" "${PASSWORD}"
+    check_eq "rangerauditserver role" "ROLE_ADMIN_AUDITOR" "${ROLE}"
+    verify_audit_config_common
+    check_eq "patch 078 applied" "Y" "${PATCH078}"
+    if [ "${COLTYPE}" = "character varying" ]; then
+      pass "x_ranger_global_state.app_data type (${COLTYPE})"
+    else
+      fail "x_ranger_global_state.app_data type expected character varying, got '${COLTYPE}'"
+    fi
+    ;;
+
+  mysql)
+    DB_CONTAINER="${DB_CONTAINER:-ranger-mysql}"
+    run_sql() {
+      docker exec "${DB_CONTAINER}" mysql -urangeradmin -prangerR0cks! ranger -N -s -e "$1" 2>/dev/null
+    }
+    STATUS="$(run_sql "SELECT status FROM x_portal_user WHERE login_id='rangerauditserver';")"
+    PASSWORD="$(run_sql "SELECT IFNULL(password,'') FROM x_portal_user WHERE login_id='rangerauditserver';")"
+    ROLE="$(run_sql "SELECT user_role FROM x_portal_user_role WHERE user_id=(SELECT id FROM x_portal_user WHERE login_id='rangerauditserver');")"
+    INGESTOR_URL="$(run_sql "SELECT cfg_value FROM x_audit_config WHERE cfg_name='ingestor.url';")"
+    HIVE_USERS="$(run_sql "SELECT cfg_value FROM x_audit_config WHERE cfg_name='service.hive.allowed.users';")"
+    PLAN_JSON="$(run_sql "SELECT cfg_value FROM x_audit_config WHERE cfg_name='audit.partition.plan';")"
+    GLOBAL_PLAN="$(run_sql "SELECT state_name FROM x_ranger_global_state WHERE state_name='RangerAuditPartitionPlan';")"
+    PATCH078="$(run_sql "SELECT active FROM x_db_version_h WHERE version='078';")"
+    COLTYPE="$(run_sql "SELECT data_type FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='x_ranger_global_state' AND column_name='app_data';")"
+    check_eq "rangerauditserver status" "0" "${STATUS}"
+    check_eq "rangerauditserver password" "" "${PASSWORD}"
+    check_eq "rangerauditserver role" "ROLE_ADMIN_AUDITOR" "${ROLE}"
+    verify_audit_config_common
+    check_eq "patch 078 applied" "Y" "${PATCH078}"
+    if [ "${COLTYPE}" = "varchar" ]; then
+      pass "x_ranger_global_state.app_data type (${COLTYPE})"
+    else
+      fail "x_ranger_global_state.app_data type expected varchar, got '${COLTYPE}'"
+    fi
+    ;;
+
+  oracle)
+    DB_CONTAINER="${DB_CONTAINER:-ranger-oracle}"
+    if ! docker ps --format '{{.Names}}' | grep -qx "${DB_CONTAINER}"; then
+      fail "Oracle DB container ${DB_CONTAINER} is not running"
+    else
+    run_sql() {
+      docker exec "${DB_CONTAINER}" bash -lc "sqlplus -s rangeradmin/rangerR0cks!@//localhost:1521/FREEPDB1 <<'EOSQL'
+SET HEADING OFF FEEDBACK OFF PAGES 0 VERIFY OFF
+WHENEVER SQLERROR EXIT SQL.SQLCODE
+$1
+EXIT
+EOSQL" 2>/dev/null | grep -viE 'SP2-0157|ORA-[0-9]+|ERROR|Help:' | grep -v '^$' | tail -1 | tr -d '\r\t' | xargs || true
+    }
+    run_sql_clob() {
+      docker exec "${DB_CONTAINER}" bash -lc "sqlplus -s rangeradmin/rangerR0cks!@//localhost:1521/FREEPDB1 <<'EOSQL'
+SET HEADING OFF FEEDBACK OFF PAGES 0 LONG 4000 LONGCHUNKSIZE 4000 LINESIZE 32767 TRIMOUT ON
+$1
+EXIT
+EOSQL" 2>/dev/null | grep -v '^$' | tr -d '\r\n' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' || true
+    }
+    STATUS="$(run_sql "SELECT status FROM x_portal_user WHERE login_id='rangerauditserver';")"
+    PASSWORD="$(run_sql "SELECT NVL(password,' ') FROM x_portal_user WHERE login_id='rangerauditserver';")"
+    PASSWORD="$(echo "${PASSWORD}" | xargs)"
+    [ -z "${PASSWORD}" ] || [ "${PASSWORD}" = " " ] && PASSWORD=""
+    ROLE="$(run_sql "SELECT user_role FROM x_portal_user_role WHERE user_id=(SELECT id FROM x_portal_user WHERE login_id='rangerauditserver');")"
+    INGESTOR_URL="$(run_sql "SELECT cfg_value FROM x_audit_config WHERE cfg_name='ingestor.url';")"
+    HIVE_USERS="$(run_sql "SELECT cfg_value FROM x_audit_config WHERE cfg_name='service.hive.allowed.users';")"
+    PLAN_JSON="$(run_sql_clob "SELECT DBMS_LOB.SUBSTR(cfg_value, 4000, 1) FROM x_audit_config WHERE cfg_name='audit.partition.plan';")"
+    GLOBAL_PLAN="$(run_sql "SELECT state_name FROM x_ranger_global_state WHERE state_name='RangerAuditPartitionPlan';")"
+    PATCH078="$(run_sql "SELECT active FROM x_db_version_h WHERE version='078';")"
+    COLTYPE="$(run_sql "SELECT data_type FROM user_tab_columns WHERE table_name='X_RANGER_GLOBAL_STATE' AND column_name='APP_DATA';")"
+    check_eq "rangerauditserver status" "0" "${STATUS}"
+    check_eq "rangerauditserver password" "" "${PASSWORD}"
+    check_eq "rangerauditserver role" "ROLE_ADMIN_AUDITOR" "${ROLE}"
+    verify_audit_config_common
+    check_eq "patch 078 applied" "Y" "${PATCH078}"
+    if [ "${COLTYPE}" = "VARCHAR2" ]; then
+      pass "x_ranger_global_state.app_data type (${COLTYPE})"
+    else
+      fail "x_ranger_global_state.app_data type expected VARCHAR2, got '${COLTYPE}'"
+    fi
+    fi
+    ;;
+
+  sqlserver)
+    DB_CONTAINER="${DB_CONTAINER:-ranger-sqlserver}"
+    run_sql() {
+      docker exec "${DB_CONTAINER}" /opt/mssql-tools18/bin/sqlcmd -S localhost -U rangeradmin -P rangerR0cks! -d ranger -C -h -1 -W -Q "SET NOCOUNT ON; $1" 2>/dev/null | tr -d '\r' | sed '/^$/d' | head -1
+    }
+    STATUS="$(run_sql "SELECT status FROM x_portal_user WHERE login_id='rangerauditserver'")"
+    PASSWORD="$(run_sql "SELECT ISNULL(password,'') FROM x_portal_user WHERE login_id='rangerauditserver'")"
+    ROLE="$(run_sql "SELECT user_role FROM x_portal_user_role WHERE user_id=(SELECT id FROM x_portal_user WHERE login_id='rangerauditserver')")"
+    INGESTOR_URL="$(run_sql "SELECT cfg_value FROM x_audit_config WHERE cfg_name='ingestor.url'")"
+    HIVE_USERS="$(run_sql "SELECT cfg_value FROM x_audit_config WHERE cfg_name='service.hive.allowed.users'")"
+    PLAN_JSON="$(run_sql "SELECT cfg_value FROM x_audit_config WHERE cfg_name='audit.partition.plan'")"
+    GLOBAL_PLAN="$(run_sql "SELECT state_name FROM x_ranger_global_state WHERE state_name='RangerAuditPartitionPlan'")"
+    PATCH078="$(run_sql "SELECT active FROM x_db_version_h WHERE version='078'")"
+    COLTYPE="$(run_sql "SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='x_ranger_global_state' AND COLUMN_NAME='app_data'")"
+    check_eq "rangerauditserver status" "0" "${STATUS}"
+    check_eq "rangerauditserver password" "" "${PASSWORD}"
+    check_eq "rangerauditserver role" "ROLE_ADMIN_AUDITOR" "${ROLE}"
+    verify_audit_config_common
+    check_eq "patch 078 applied" "Y" "${PATCH078}"
+    if [ "${COLTYPE}" = "varchar" ]; then
+      pass "x_ranger_global_state.app_data type (${COLTYPE})"
+    else
+      fail "x_ranger_global_state.app_data type expected varchar, got '${COLTYPE}'"
+    fi
+    ;;
+
+  sqlanywhere)
+    echo "SQL Anywhere is not supported in ranger-docker (no DB container)."
+    echo "Apply patch 078 manually with db_setup/jisql on a SQL Anywhere host."
+    exit 2
+    ;;
+
+  *)
+    echo "Unknown RANGER_DB_TYPE: ${DB_TYPE}" >&2
+    exit 1
+    ;;
+esac
+
+echo ""
+echo "=== Results: ${PASS} passed, ${FAIL} failed ==="
+[ "${FAIL}" -eq 0 ]
diff --git a/security-admin/db/mysql/optimized/current/ranger_core_db_mysql.sql b/security-admin/db/mysql/optimized/current/ranger_core_db_mysql.sql
index 6d1070cc0..186b6c723 100644
--- a/security-admin/db/mysql/optimized/current/ranger_core_db_mysql.sql
+++ b/security-admin/db/mysql/optimized/current/ranger_core_db_mysql.sql
@@ -1898,8 +1898,7 @@ INSERT INTO x_ranger_global_state (create_time,update_time,added_by_id,upd_by_id
 
 INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (UTC_TIMESTAMP(),UTC_TIMESTAMP(),'ingestor.url','https://ranger-audit-ingestor:8765',1);
 INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (UTC_TIMESTAMP(),UTC_TIMESTAMP(),'service.hive.allowed.users','hive',1);
-INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (UTC_TIMESTAMP(),UTC_TIMESTAMP(),'topic','ranger_audits',1);
-INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (UTC_TIMESTAMP(),UTC_TIMESTAMP(),'RangerAuditPartitionPlan','{"plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}',1);
+INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (UTC_TIMESTAMP(),UTC_TIMESTAMP(),'audit.partition.plan','{"topic":"ranger_audits","plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}',1);
 
 END $$
 DELIMITER ;
diff --git a/security-admin/db/mysql/patches/078-audit-partition-plan-global-state.sql b/security-admin/db/mysql/patches/078-add-x_audit_config.sql
similarity index 90%
rename from security-admin/db/mysql/patches/078-audit-partition-plan-global-state.sql
rename to security-admin/db/mysql/patches/078-add-x_audit_config.sql
index 45113b62c..851575420 100644
--- a/security-admin/db/mysql/patches/078-audit-partition-plan-global-state.sql
+++ b/security-admin/db/mysql/patches/078-add-x_audit_config.sql
@@ -75,13 +75,9 @@ BEGIN
         INSERT INTO x_audit_config (create_time, update_time, cfg_name, cfg_value, version)
         VALUES (UTC_TIMESTAMP(), UTC_TIMESTAMP(), 'service.hive.allowed.users', 'hive', 1);
     END IF;
-    IF NOT EXISTS (SELECT 1 FROM x_audit_config WHERE cfg_name = 'topic') THEN
+    IF NOT EXISTS (SELECT 1 FROM x_audit_config WHERE cfg_name = 'audit.partition.plan') THEN
         INSERT INTO x_audit_config (create_time, update_time, cfg_name, cfg_value, version)
-        VALUES (UTC_TIMESTAMP(), UTC_TIMESTAMP(), 'topic', 'ranger_audits', 1);
-    END IF;
-    IF NOT EXISTS (SELECT 1 FROM x_audit_config WHERE cfg_name = 'RangerAuditPartitionPlan') THEN
-        INSERT INTO x_audit_config (create_time, update_time, cfg_name, cfg_value, version)
-        VALUES (UTC_TIMESTAMP(), UTC_TIMESTAMP(), 'RangerAuditPartitionPlan', '{"plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}', 1);
+        VALUES (UTC_TIMESTAMP(), UTC_TIMESTAMP(), 'audit.partition.plan', '{"topic":"ranger_audits","plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}', 1);
     END IF;
 END;;
 
diff --git a/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql b/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql
index 1265f7a95..2cdefbb60 100644
--- a/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql
+++ b/security-admin/db/oracle/optimized/current/ranger_core_db_oracle.sql
@@ -2199,8 +2199,7 @@ INSERT INTO x_ranger_global_state (id,create_time,update_time,added_by_id,upd_by
 
 INSERT INTO x_audit_config (id,create_time,update_time,cfg_name,cfg_value,version) VALUES (X_AUDIT_CONFIG_SEQ.nextval,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),'ingestor.url','https://ranger-audit-ingestor:8765',1);
 INSERT INTO x_audit_config (id,create_time,update_time,cfg_name,cfg_value,version) VALUES (X_AUDIT_CONFIG_SEQ.nextval,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),'service.hive.allowed.users','hive',1);
-INSERT INTO x_audit_config (id,create_time,update_time,cfg_name,cfg_value,version) VALUES (X_AUDIT_CONFIG_SEQ.nextval,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),'topic','ranger_audits',1);
-INSERT INTO x_audit_config (id,create_time,update_time,cfg_name,cfg_value,version) VALUES (X_AUDIT_CONFIG_SEQ.nextval,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),'RangerAuditPartitionPlan','{"plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}',1);
+INSERT INTO x_audit_config (id,create_time,update_time,cfg_name,cfg_value,version) VALUES (X_AUDIT_CONFIG_SEQ.nextval,sys_extract_utc(systimestamp),sys_extract_utc(systimestamp),'audit.partition.plan','{"topic":"ranger_audits","plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}',1);
 
 INSERT INTO x_db_version_h (id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES (X_DB_VERSION_H_SEQ.nextval,'J10001',sys_extract_utc(systimestamp),'Ranger 1.0.0',sys_extract_utc(systimestamp),'localhost','Y');
 INSERT INTO x_db_version_h (id,version,inst_at,inst_by,updated_at,updated_by,active) VALUES (X_DB_VERSION_H_SEQ.nextval,'J10002',sys_extract_utc(systimestamp),'Ranger 1.0.0',sys_extract_utc(systimestamp),'localhost','Y');
diff --git a/security-admin/db/oracle/patches/078-add-x_audit_config.sql b/security-admin/db/oracle/patches/078-add-x_audit_config.sql
new file mode 100644
index 000000000..03078031f
--- /dev/null
+++ b/security-admin/db/oracle/patches/078-add-x_audit_config.sql
@@ -0,0 +1,92 @@
+-- Licensed to the Apache Software Foundation (ASF) under one or more
+-- contributor license agreements.  See the NOTICE file distributed with
+-- this work for additional information regarding copyright ownership.
+-- The ASF licenses this file to You under the Apache License, Version 2.0
+-- (the "License"); you may not use this file except in compliance with
+-- the License.  You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+DECLARE
+    v_table_count NUMBER := 0;
+    v_seq_count NUMBER := 0;
+    v_portal_user_count NUMBER := 0;
+    v_user_count NUMBER := 0;
+    v_role_count NUMBER := 0;
+    v_xuser_count NUMBER := 0;
+    v_cfg_count NUMBER := 0;
+    v_audit_user_id NUMBER := 0;
+    sql_stmt VARCHAR2(4000);
+BEGIN
+    SELECT count(*) INTO v_table_count FROM user_tables WHERE table_name = 'X_AUDIT_CONFIG';
+    IF (v_table_count = 0) THEN
+        EXECUTE IMMEDIATE '
+            CREATE TABLE x_audit_config (
+                id NUMBER(20) NOT NULL,
+                create_time DATE DEFAULT NULL NULL,
+                update_time DATE DEFAULT NULL NULL,
+                cfg_name varchar(255) NOT NULL,
+                cfg_value CLOB DEFAULT NULL NULL,
+                version NUMBER(20) DEFAULT NULL NULL,
+                PRIMARY KEY (id),
+                CONSTRAINT x_audit_config_UK_cfg_name UNIQUE (cfg_name)
+            )';
+        SELECT count(*) INTO v_seq_count FROM user_sequences WHERE sequence_name = 'X_AUDIT_CONFIG_SEQ';
+        IF (v_seq_count = 0) THEN
+            EXECUTE IMMEDIATE 'CREATE SEQUENCE X_AUDIT_CONFIG_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';
+        END IF;
+    END IF;
+
+    SELECT count(*) INTO v_portal_user_count FROM user_tables WHERE table_name = 'X_PORTAL_USER';
+    IF (v_portal_user_count > 0) THEN
+        SELECT count(*) INTO v_user_count FROM x_portal_user WHERE login_id = 'rangerauditserver';
+        IF (v_user_count = 0) THEN
+            INSERT INTO x_portal_user (id, create_time, update_time, first_name, last_name, pub_scr_name, login_id, password, email, status, user_src)
+            VALUES (X_PORTAL_USER_SEQ.nextval, sys_extract_utc(systimestamp), sys_extract_utc(systimestamp), 'rangerauditserver', NULL, 'rangerauditserver', 'rangerauditserver', ' ', 'rangerauditserver', 0, 0);
+        END IF;
+
+        UPDATE x_portal_user SET status = 0, password = ' ' WHERE login_id = 'rangerauditserver';
+
+        v_audit_user_id := getXportalUIdByLoginId('rangerauditserver');
+
+        IF (v_audit_user_id IS NOT NULL AND v_audit_user_id > 0) THEN
+            SELECT count(*) INTO v_role_count FROM x_portal_user_role WHERE user_id = v_audit_user_id AND user_role = 'ROLE_ADMIN_AUDITOR';
+            IF (v_role_count = 0) THEN
+                INSERT INTO x_portal_user_role (id, create_time, update_time, user_id, user_role, status)
+                VALUES (X_PORTAL_USER_ROLE_SEQ.nextval, sys_extract_utc(systimestamp), sys_extract_utc(systimestamp), v_audit_user_id, 'ROLE_ADMIN_AUDITOR', 1);
+            END IF;
+
+            SELECT count(*) INTO v_xuser_count FROM x_user WHERE user_name = 'rangerauditserver';
+            IF (v_xuser_count = 0) THEN
+                INSERT INTO x_user (id, create_time, update_time, user_name, status, descr)
+                VALUES (X_USER_SEQ.nextval, sys_extract_utc(systimestamp), sys_extract_utc(systimestamp), 'rangerauditserver', 0, 'Ranger audit server machine user');
+            END IF;
+        END IF;
+    END IF;
+
+    EXECUTE IMMEDIATE 'SELECT count(*) FROM x_audit_config WHERE cfg_name = :1' INTO v_cfg_count USING 'ingestor.url';
+    IF (v_cfg_count = 0) THEN
+        sql_stmt := 'INSERT INTO x_audit_config (id, create_time, update_time, cfg_name, cfg_value, version) VALUES (X_AUDIT_CONFIG_SEQ.nextval, sys_extract_utc(systimestamp), sys_extract_utc(systimestamp), :1, :2, 1)';
+        EXECUTE IMMEDIATE sql_stmt USING 'ingestor.url', 'https://ranger-audit-ingestor:8765';
+    END IF;
+
+    EXECUTE IMMEDIATE 'SELECT count(*) FROM x_audit_config WHERE cfg_name = :1' INTO v_cfg_count USING 'service.hive.allowed.users';
+    IF (v_cfg_count = 0) THEN
+        sql_stmt := 'INSERT INTO x_audit_config (id, create_time, update_time, cfg_name, cfg_value, version) VALUES (X_AUDIT_CONFIG_SEQ.nextval, sys_extract_utc(systimestamp), sys_extract_utc(systimestamp), :1, :2, 1)';
+        EXECUTE IMMEDIATE sql_stmt USING 'service.hive.allowed.users', 'hive';
+    END IF;
+
+    EXECUTE IMMEDIATE 'SELECT count(*) FROM x_audit_config WHERE cfg_name = :1' INTO v_cfg_count USING 'audit.partition.plan';
+    IF (v_cfg_count = 0) THEN
+        sql_stmt := 'INSERT INTO x_audit_config (id, create_time, update_time, cfg_name, cfg_value, version) VALUES (X_AUDIT_CONFIG_SEQ.nextval, sys_extract_utc(systimestamp), sys_extract_utc(systimestamp), :1, :2, 1)';
+        EXECUTE IMMEDIATE sql_stmt USING 'audit.partition.plan', '{"topic":"ranger_audits","plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}';
+    END IF;
+
+    COMMIT;
+END;/
diff --git a/security-admin/db/oracle/patches/078-audit-partition-plan-global-state.sql b/security-admin/db/oracle/patches/078-audit-partition-plan-global-state.sql
deleted file mode 100644
index 0318556d9..000000000
--- a/security-admin/db/oracle/patches/078-audit-partition-plan-global-state.sql
+++ /dev/null
@@ -1,109 +0,0 @@
--- Licensed to the Apache Software Foundation (ASF) under one or more
--- contributor license agreements.  See the NOTICE file distributed with
--- this work for additional information regarding copyright ownership.
--- The ASF licenses this file to You under the Apache License, Version 2.0
--- (the "License"); you may not use this file except in compliance with
--- the License.  You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
-
-CREATE OR REPLACE FUNCTION getXportalUIdByLoginId(input_val IN VARCHAR2)
-RETURN NUMBER IS
-BEGIN
-DECLARE
-    myid Number := 0;
-BEGIN
-    SELECT x_portal_user.id INTO myid FROM x_portal_user WHERE x_portal_user.login_id = input_val;
-    RETURN myid;
-END;
-END;
-/
-
-DECLARE
-    t_count number := 0;
-    v_audit_user_id number;
-    v_user_count number := 0;
-    v_role_count number := 0;
-    v_xuser_count number := 0;
-    v_audit_config_count number := 0;
-    v_cfg_count number := 0;
-    v_plan_json CLOB := '{"plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}';
-    sql_stmt VARCHAR2(4000);
-BEGIN
-    SELECT count(*) INTO v_audit_config_count FROM user_tables WHERE table_name = 'X_AUDIT_CONFIG';
-    IF (v_audit_config_count = 0) THEN
-        EXECUTE IMMEDIATE 'CREATE TABLE x_audit_config (id NUMBER(20) NOT NULL, create_time DATE DEFAULT NULL NULL, update_time DATE DEFAULT NULL NULL, cfg_name varchar(255) NOT NULL, cfg_value CLOB DEFAULT NULL NULL, version NUMBER(20) DEFAULT NULL NULL, primary key (id), CONSTRAINT x_audit_config_UK_cfg_name UNIQUE(cfg_name))';
-        BEGIN
-            EXECUTE IMMEDIATE 'CREATE SEQUENCE X_AUDIT_CONFIG_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';
-        EXCEPTION
-            WHEN OTHERS THEN
-                IF SQLCODE != -955 THEN
-                    RAISE;
-                END IF;
-        END;
-        COMMIT;
-    END IF;
-
-    SELECT count(*) INTO t_count FROM user_tables WHERE table_name = 'X_PORTAL_USER';
-    IF (t_count > 0) THEN
-        SELECT count(*) INTO v_user_count FROM x_portal_user WHERE login_id = 'rangerauditserver';
-        IF (v_user_count = 0) THEN
-            sql_stmt := 'INSERT INTO x_portal_user (id, create_time, update_time, first_name, last_name, pub_scr_name, login_id, password, email, status, user_src) VALUES (X_PORTAL_USER_SEQ.nextval, sys_extract_utc(systimestamp), sys_extract_utc(systimestamp), :1, NULL, :2, :3, :4, :5, 0, 0)';
-            EXECUTE IMMEDIATE sql_stmt USING 'rangerauditserver', 'rangerauditserver', 'rangerauditserver', ' ', 'rangerauditserver';
-            COMMIT;
-        END IF;
-
-        UPDATE x_portal_user SET status = 0, password = ' ' WHERE login_id = 'rangerauditserver';
-        COMMIT;
-
-        v_audit_user_id := getXportalUIdByLoginId('rangerauditserver');
-
-        IF (v_audit_user_id IS NOT NULL AND v_audit_user_id > 0) THEN
-            SELECT count(*) INTO v_role_count FROM x_portal_user_role WHERE user_id = v_audit_user_id AND user_role = 'ROLE_ADMIN_AUDITOR';
-            IF (v_role_count = 0) THEN
-                sql_stmt := 'INSERT INTO x_portal_user_role (id, create_time, update_time, user_id, user_role, status) VALUES (X_PORTAL_USER_ROLE_SEQ.nextval, sys_extract_utc(systimestamp), sys_extract_utc(systimestamp), :1, :2, 1)';
-                EXECUTE IMMEDIATE sql_stmt USING v_audit_user_id, 'ROLE_ADMIN_AUDITOR';
-                COMMIT;
-            END IF;
-
-            SELECT count(*) INTO v_xuser_count FROM x_user WHERE user_name = 'rangerauditserver';
-            IF (v_xuser_count = 0) THEN
-                sql_stmt := 'INSERT INTO x_user (id, create_time, update_time, user_name, status, descr) VALUES (X_USER_SEQ.nextval, sys_extract_utc(systimestamp), sys_extract_utc(systimestamp), :1, 0, :2)';
-                EXECUTE IMMEDIATE sql_stmt USING 'rangerauditserver', 'Ranger audit server machine user';
-                COMMIT;
-            END IF;
-        END IF;
-    END IF;
-
-    SELECT count(*) INTO v_cfg_count FROM x_audit_config WHERE cfg_name = 'ingestor.url';
-    IF (v_cfg_count = 0) THEN
-        sql_stmt := 'INSERT INTO x_audit_config (id, create_time, update_time, cfg_name, cfg_value, version) VALUES (X_AUDIT_CONFIG_SEQ.nextval, sys_extract_utc(systimestamp), sys_extract_utc(systimestamp), :1, :2, 1)';
-        EXECUTE IMMEDIATE sql_stmt USING 'ingestor.url', 'https://ranger-audit-ingestor:8765';
-        COMMIT;
-    END IF;
-    SELECT count(*) INTO v_cfg_count FROM x_audit_config WHERE cfg_name = 'service.hive.allowed.users';
-    IF (v_cfg_count = 0) THEN
-        sql_stmt := 'INSERT INTO x_audit_config (id, create_time, update_time, cfg_name, cfg_value, version) VALUES (X_AUDIT_CONFIG_SEQ.nextval, sys_extract_utc(systimestamp), sys_extract_utc(systimestamp), :1, :2, 1)';
-        EXECUTE IMMEDIATE sql_stmt USING 'service.hive.allowed.users', 'hive';
-        COMMIT;
-    END IF;
-    SELECT count(*) INTO v_cfg_count FROM x_audit_config WHERE cfg_name = 'topic';
-    IF (v_cfg_count = 0) THEN
-        sql_stmt := 'INSERT INTO x_audit_config (id, create_time, update_time, cfg_name, cfg_value, version) VALUES (X_AUDIT_CONFIG_SEQ.nextval, sys_extract_utc(systimestamp), sys_extract_utc(systimestamp), :1, :2, 1)';
-        EXECUTE IMMEDIATE sql_stmt USING 'topic', 'ranger_audits';
-        COMMIT;
-    END IF;
-    SELECT count(*) INTO v_cfg_count FROM x_audit_config WHERE cfg_name = 'RangerAuditPartitionPlan';
-    IF (v_cfg_count = 0) THEN
-        sql_stmt := 'INSERT INTO x_audit_config (id, create_time, update_time, cfg_name, cfg_value, version) VALUES (X_AUDIT_CONFIG_SEQ.nextval, sys_extract_utc(systimestamp), sys_extract_utc(systimestamp), :1, :2, 1)';
-        EXECUTE IMMEDIATE sql_stmt USING 'RangerAuditPartitionPlan', v_plan_json;
-        COMMIT;
-    END IF;
-END;
-/
diff --git a/security-admin/db/postgres/optimized/current/ranger_core_db_postgres.sql b/security-admin/db/postgres/optimized/current/ranger_core_db_postgres.sql
index 4d33ad77f..f937f1bde 100644
--- a/security-admin/db/postgres/optimized/current/ranger_core_db_postgres.sql
+++ b/security-admin/db/postgres/optimized/current/ranger_core_db_postgres.sql
@@ -2132,8 +2132,7 @@ INSERT INTO x_ranger_global_state (create_time,update_time,added_by_id,upd_by_id
 
 INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (current_timestamp,current_timestamp,'ingestor.url','https://ranger-audit-ingestor:8765',1);
 INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (current_timestamp,current_timestamp,'service.hive.allowed.users','hive',1);
-INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (current_timestamp,current_timestamp,'topic','ranger_audits',1);
-INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (current_timestamp,current_timestamp,'RangerAuditPartitionPlan','{"plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}',1);
+INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (current_timestamp,current_timestamp,'audit.partition.plan','{"topic":"ranger_audits","plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}',1);
 
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10001',current_timestamp,'Ranger 1.0.0',current_timestamp,'localhost','Y');
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10002',current_timestamp,'Ranger 1.0.0',current_timestamp,'localhost','Y');
diff --git a/security-admin/db/postgres/patches/078-audit-partition-plan-global-state.sql b/security-admin/db/postgres/patches/078-add-x_audit_config.sql
similarity index 89%
rename from security-admin/db/postgres/patches/078-audit-partition-plan-global-state.sql
rename to security-admin/db/postgres/patches/078-add-x_audit_config.sql
index 743630133..da5344d96 100644
--- a/security-admin/db/postgres/patches/078-audit-partition-plan-global-state.sql
+++ b/security-admin/db/postgres/patches/078-add-x_audit_config.sql
@@ -64,13 +64,9 @@ BEGIN
         INSERT INTO x_audit_config (create_time, update_time, cfg_name, cfg_value, version)
         VALUES (current_timestamp, current_timestamp, 'service.hive.allowed.users', 'hive', 1);
     END IF;
-    IF NOT EXISTS (SELECT 1 FROM x_audit_config WHERE cfg_name = 'topic') THEN
+    IF NOT EXISTS (SELECT 1 FROM x_audit_config WHERE cfg_name = 'audit.partition.plan') THEN
         INSERT INTO x_audit_config (create_time, update_time, cfg_name, cfg_value, version)
-        VALUES (current_timestamp, current_timestamp, 'topic', 'ranger_audits', 1);
-    END IF;
-    IF NOT EXISTS (SELECT 1 FROM x_audit_config WHERE cfg_name = 'RangerAuditPartitionPlan') THEN
-        INSERT INTO x_audit_config (create_time, update_time, cfg_name, cfg_value, version)
-        VALUES (current_timestamp, current_timestamp, 'RangerAuditPartitionPlan', '{"plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}', 1);
+        VALUES (current_timestamp, current_timestamp, 'audit.partition.plan', '{"topic":"ranger_audits","plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}', 1);
     END IF;
 END;
 $$ LANGUAGE plpgsql;
diff --git a/security-admin/db/sqlanywhere/optimized/current/ranger_core_db_sqlanywhere.sql b/security-admin/db/sqlanywhere/optimized/current/ranger_core_db_sqlanywhere.sql
index fe968c4da..2ffacc47a 100644
--- a/security-admin/db/sqlanywhere/optimized/current/ranger_core_db_sqlanywhere.sql
+++ b/security-admin/db/sqlanywhere/optimized/current/ranger_core_db_sqlanywhere.sql
@@ -2315,9 +2315,7 @@ INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version)
 GO
 INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,'service.hive.allowed.users','hive',1);
 GO
-INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,'topic','ranger_audits',1);
-GO
-INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,'RangerAuditPartitionPlan','{"plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}',1);
+INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,'audit.partition.plan','{"topic":"ranger_audits","plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}',1);
 GO
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10001',CURRENT_TIMESTAMP,'Ranger 1.0.0',CURRENT_TIMESTAMP,'localhost','Y');
 GO
diff --git a/security-admin/db/sqlanywhere/patches/078-audit-partition-plan-global-state.sql b/security-admin/db/sqlanywhere/patches/078-add-x_audit_config.sql
similarity index 89%
rename from security-admin/db/sqlanywhere/patches/078-audit-partition-plan-global-state.sql
rename to security-admin/db/sqlanywhere/patches/078-add-x_audit_config.sql
index dc37c9aa7..c497b79e9 100644
--- a/security-admin/db/sqlanywhere/patches/078-audit-partition-plan-global-state.sql
+++ b/security-admin/db/sqlanywhere/patches/078-add-x_audit_config.sql
@@ -63,13 +63,9 @@ BEGIN
         INSERT INTO x_audit_config(create_time, update_time, cfg_name, cfg_value, version)
         VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'service.hive.allowed.users', 'hive', 1);
     END IF;
-    IF NOT EXISTS(SELECT * FROM x_audit_config WHERE cfg_name = 'topic') THEN
+    IF NOT EXISTS(SELECT * FROM x_audit_config WHERE cfg_name = 'audit.partition.plan') THEN
         INSERT INTO x_audit_config(create_time, update_time, cfg_name, cfg_value, version)
-        VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'topic', 'ranger_audits', 1);
-    END IF;
-    IF NOT EXISTS(SELECT * FROM x_audit_config WHERE cfg_name = 'RangerAuditPartitionPlan') THEN
-        INSERT INTO x_audit_config(create_time, update_time, cfg_name, cfg_value, version)
-        VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'RangerAuditPartitionPlan', '{"plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}', 1);
+        VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'audit.partition.plan', '{"topic":"ranger_audits","plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}', 1);
     END IF;
 END
 GO
diff --git a/security-admin/db/sqlserver/optimized/current/ranger_core_db_sqlserver.sql b/security-admin/db/sqlserver/optimized/current/ranger_core_db_sqlserver.sql
index f590573b2..bbc9a4956 100644
--- a/security-admin/db/sqlserver/optimized/current/ranger_core_db_sqlserver.sql
+++ b/security-admin/db/sqlserver/optimized/current/ranger_core_db_sqlserver.sql
@@ -4572,8 +4572,7 @@ INSERT INTO x_ranger_global_state (create_time,update_time,added_by_id,upd_by_id
 
 INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,'ingestor.url',N'https://ranger-audit-ingestor:8765',1);
 INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,'service.hive.allowed.users',N'hive',1);
-INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,'topic',N'ranger_audits',1);
-INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,'RangerAuditPartitionPlan',N'{"plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}',1);
+INSERT INTO x_audit_config (create_time,update_time,cfg_name,cfg_value,version) VALUES (CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,'audit.partition.plan',N'{"topic":"ranger_audits","plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}',1);
 
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10001',CURRENT_TIMESTAMP,'Ranger 1.0.0',CURRENT_TIMESTAMP,'localhost','Y');
 INSERT INTO x_db_version_h (version,inst_at,inst_by,updated_at,updated_by,active) VALUES ('J10002',CURRENT_TIMESTAMP,'Ranger 1.0.0',CURRENT_TIMESTAMP,'localhost','Y');
diff --git a/security-admin/db/sqlserver/patches/078-audit-partition-plan-global-state.sql b/security-admin/db/sqlserver/patches/078-add-x_audit_config.sql
similarity index 89%
rename from security-admin/db/sqlserver/patches/078-audit-partition-plan-global-state.sql
rename to security-admin/db/sqlserver/patches/078-add-x_audit_config.sql
index 834d6e07d..2d5b978d5 100644
--- a/security-admin/db/sqlserver/patches/078-audit-partition-plan-global-state.sql
+++ b/security-admin/db/sqlserver/patches/078-add-x_audit_config.sql
@@ -83,16 +83,10 @@ BEGIN
     VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'service.hive.allowed.users', N'hive', 1);
 END;
 GO
-IF NOT EXISTS(SELECT * FROM x_audit_config WHERE cfg_name = 'topic')
+IF NOT EXISTS(SELECT * FROM x_audit_config WHERE cfg_name = 'audit.partition.plan')
 BEGIN
     INSERT INTO x_audit_config (create_time, update_time, cfg_name, cfg_value, version)
-    VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'topic', N'ranger_audits', 1);
-END;
-GO
-IF NOT EXISTS(SELECT * FROM x_audit_config WHERE cfg_name = 'RangerAuditPartitionPlan')
-BEGIN
-    INSERT INTO x_audit_config (create_time, update_time, cfg_name, cfg_value, version)
-    VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'RangerAuditPartitionPlan', N'{"plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}', 1);
+    VALUES (CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'audit.partition.plan', N'{"topic":"ranger_audits","plugins":{},"buffer":{"partitions":[1,2,3,4,5,6,7,8,9]}}', 1);
 END;
 GO
 EXIT