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:38 UTC
(ranger) 01/01: RANGER-5720: Finalize patch 078 x_audit_config and add docker DB E2E tests.
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