Skip to content

Add OUDBase functionality for Oracle Unified Directory setup, configuration, and operations #21

@oehrlis

Description

@oehrlis

Feature Description

Integrate Oracle Unified Directory (OUD) management capabilities into OraDBA, providing OUDBase-inspired functionality for OUD environment setup, configuration, instance management, and daily operations.

Problem Statement

Current limitations:

  • OraDBA focuses only on Oracle Database, not OUD
  • No standardized OUD environment management
  • Manual OUD instance setup and configuration
  • No OUD-specific scripts or aliases
  • Missing integration between database and directory services
  • No centralized OUD operations management
  • Difficult to manage multiple OUD instances
  • No OUD version management

Background

Oracle Unified Directory (OUD) is Oracle's LDAP directory service, commonly used for:

  • Enterprise user authentication
  • Identity management
  • Oracle Fusion Middleware integration
  • Database external authentication
  • Centralized access control

OUDBase is a management framework (similar to BasEnv/TVDBasEnv for databases) that provides:

  • OUD environment variables
  • Instance management scripts
  • Configuration templates
  • Operational utilities

Proposed Solution

1. OUD Environment Structure

srv/
├── bin/
│   ├── oud_env.sh              # Set OUD environment
│   ├── oud_create.sh           # Create OUD instance
│   ├── oud_start.sh            # Start OUD instance
│   ├── oud_stop.sh             # Stop OUD instance
│   ├── oud_status.sh           # Check OUD status
│   ├── oud_backup.sh           # Backup OUD data
│   └── oud_config.sh           # Configure OUD settings
├── etc/
│   └── oud.conf                # OUD configuration
├── sql/
│   └── oud/
│       └── db_external_auth.sql # DB external auth setup
└── templates/
    └── oud/
        ├── oud_instance.props  # Instance creation template
        ├── ldif/               # LDIF templates
        │   ├── base_entries.ldif
        │   ├── oracle_schema.ldif
        │   └── acl_config.ldif
        └── config/
            └── oud_config.props

2. OUD Environment Variables

# OUD Base Directories
export OUD_BASE="${ORACLE_BASE}/oud"
export OUD_INSTANCE_HOME="${OUD_BASE}/${OUD_INSTANCE_NAME}"
export OUD_INSTANCE_NAME="oud1"

# OUD Software
export OUD_HOME="${ORACLE_HOME}"  # Or separate OUD installation
export OUD_VERSION="12.2.1.4.0"

# OUD Configuration
export OUD_ADMIN_PORT="4444"
export OUD_LDAP_PORT="1389"
export OUD_LDAPS_PORT="1636"
export OUD_ADMIN_USER="cn=Directory Manager"

# Java for OUD
export JAVA_HOME="${ORACLE_BASE}/product/java/jdk"
export PATH="${OUD_INSTANCE_HOME}/OUD/bin:${PATH}"

3. OUD Instance Creation Script

#!/usr/bin/env bash
# srv/bin/oud_create.sh - Create OUD instance

usage() {
    cat <<EOF
Usage: oud_create.sh [OPTIONS]

Create Oracle Unified Directory instance.

Options:
    --instance NAME        Instance name (default: oud1)
    --admin-port PORT      Admin port (default: 4444)
    --ldap-port PORT       LDAP port (default: 1389)
    --ldaps-port PORT      LDAPS port (default: 1636)
    --base-dn DN           Base DN (default: dc=example,dc=com)
    --admin-user USER      Admin user (default: cn=Directory Manager)
    --admin-password PWD   Admin password (prompted if not provided)
    --sample-data          Load sample data
    -h, --help             Show this help

Examples:
    # Create instance with defaults
    oud_create.sh --instance oud1
    
    # Create with custom ports
    oud_create.sh --instance oud1 --ldap-port 1389 --admin-port 4444
    
    # Create with sample data
    oud_create.sh --instance oud1 --sample-data

EOF
}

create_oud_instance() {
    local instance_name="${1}"
    local admin_port="${2}"
    local ldap_port="${3}"
    local base_dn="${4}"
    
    log_info "Creating OUD instance: ${instance_name}"
    
    # Create instance directory
    local instance_home="${OUD_BASE}/${instance_name}"
    mkdir -p "${instance_home}"
    
    # Run oud-setup
    "${OUD_HOME}/oud-setup" \
        --cli \
        --instancePath "${instance_home}/OUD" \
        --adminConnectorPort "${admin_port}" \
        --ldapPort "${ldap_port}" \
        --ldapsPort "${ldaps_port}" \
        --rootUserDN "${admin_user}" \
        --rootUserPassword "${admin_password}" \
        --baseDN "${base_dn}" \
        --addBaseEntry \
        --noPropertiesFile \
        --no-prompt
    
    if [[ $? -eq 0 ]]; then
        log_info "OUD instance created successfully: ${instance_home}"
        
        # Create startup script
        create_startup_script "${instance_name}" "${instance_home}"
        
        # Register in oratab equivalent
        register_oud_instance "${instance_name}" "${instance_home}"
    else
        log_error "Failed to create OUD instance"
        return 1
    fi
}

4. OUD Management Aliases

# Add to srv/etc/oradba.bashrc

# OUD Environment
alias oud_env='. ${ORADBA_BASE}/srv/bin/oud_env.sh'
alias cdoud='cd ${OUD_INSTANCE_HOME}'
alias cdoudlog='cd ${OUD_INSTANCE_HOME}/OUD/logs'
alias cdoudconfig='cd ${OUD_INSTANCE_HOME}/OUD/config'

# OUD Operations
alias oud_start='${ORADBA_BASE}/srv/bin/oud_start.sh'
alias oud_stop='${ORADBA_BASE}/srv/bin/oud_stop.sh'
alias oud_status='${ORADBA_BASE}/srv/bin/oud_status.sh'
alias oud_restart='oud_stop && oud_start'

# OUD Logs
alias oud_log='tail -f ${OUD_INSTANCE_HOME}/OUD/logs/server.out'
alias oud_errors='tail -f ${OUD_INSTANCE_HOME}/OUD/logs/errors'
alias oud_access='tail -f ${OUD_INSTANCE_HOME}/OUD/logs/access'

# LDAP Utilities
alias ldapsearch_oud='ldapsearch -h localhost -p ${OUD_LDAP_PORT} -D "${OUD_ADMIN_USER}"'
alias ldapmodify_oud='ldapmodify -h localhost -p ${OUD_LDAP_PORT} -D "${OUD_ADMIN_USER}"'

5. OUD Configuration File

# srv/etc/oud.conf

# ------------------------------------------------------------------------------
# OUD Configuration
# ------------------------------------------------------------------------------

# Default OUD instance
OUD_INSTANCE_NAME="oud1"

# OUD Base Directory
OUD_BASE="${ORACLE_BASE}/oud"

# Default Ports
OUD_DEFAULT_ADMIN_PORT=4444
OUD_DEFAULT_LDAP_PORT=1389
OUD_DEFAULT_LDAPS_PORT=1636

# Default Base DN
OUD_DEFAULT_BASE_DN="dc=example,dc=com"

# Java Settings for OUD
OUD_JAVA_OPTS="-Xms512m -Xmx1024m"

# Enable OUD functionality in OraDBA
ORADBA_OUD_ENABLED=true

6. Integration with Database

-- srv/sql/oud/db_external_auth.sql
-- Configure database for OUD external authentication

-- Create LDAP directory link
CREATE OR REPLACE DIRECTORY LDAP_DIR AS
  'ldap://localhost:1389/dc=example,dc=com';

-- Configure external authentication
ALTER SYSTEM SET ldap_directory_access = 'PASSWORD' SCOPE=BOTH;

-- Create externally authenticated user
CREATE USER ops$oracle_user IDENTIFIED EXTERNALLY;
GRANT CONNECT TO ops$oracle_user;

Tasks

Core Infrastructure

  • Create srv/bin/oud_env.sh for environment setup
  • Create srv/etc/oud.conf configuration file
  • Add OUD-specific variables to environment management
  • Create OUD instance registry (similar to /etc/oratab)
  • Add OUD detection to OraDBA initialization

Instance Management

  • Create srv/bin/oud_create.sh (instance creation)
  • Create srv/bin/oud_start.sh (start instance)
  • Create srv/bin/oud_stop.sh (stop instance)
  • Create srv/bin/oud_status.sh (status check)
  • Create srv/bin/oud_restart.sh (restart instance)
  • Add startup/shutdown scripts

Configuration Management

  • Create srv/bin/oud_config.sh (configuration utility)
  • Create OUD configuration templates
  • Add LDIF templates (base entries, schemas, ACLs)
  • Support for replication configuration
  • SSL/TLS certificate management

Operations

  • Create srv/bin/oud_backup.sh (backup OUD data)
  • Create srv/bin/oud_restore.sh (restore OUD data)
  • Create srv/bin/oud_export.sh (export LDIF)
  • Create srv/bin/oud_import.sh (import LDIF)
  • Add monitoring and health check scripts

Aliases and Shell Integration

  • Add OUD aliases to srv/etc/oradba.bashrc
  • Add navigation aliases (cdoud, cdoudlog, etc.)
  • Add operation aliases (oud_start, oud_stop, etc.)
  • Add LDAP utility aliases
  • Add log viewing aliases

Database Integration

  • Create SQL scripts for external authentication setup
  • Add DB-OUD integration documentation
  • Create password verification callout scripts
  • Add Enterprise User Security (EUS) support

Documentation

  • Create doc/OUD.md with OUD functionality guide
  • Document OUD instance creation
  • Document OUD operations
  • Document DB-OUD integration
  • Add troubleshooting guide
  • Document OUD best practices

Testing

  • Test OUD instance creation
  • Test OUD start/stop operations
  • Test environment switching
  • Test backup/restore
  • Test DB external authentication
  • Test with multiple OUD instances

Acceptance Criteria

  • OUD instances can be created via OraDBA scripts
  • OUD environment variables properly set
  • Start/stop/status operations work correctly
  • OUD-specific aliases available
  • Configuration templates provided
  • Backup/restore functionality works
  • Integration with Oracle Database external auth
  • Comprehensive documentation available

Use Cases

Use Case 1: New OUD Instance Setup

DBA needs LDAP directory, runs oud_create.sh --instance oud1, gets fully configured OUD instance integrated with OraDBA environment management.

Use Case 2: Multiple OUD Instances

Environment has dev/test/prod OUD instances, uses oud_env oud_prod to switch between them, similar to database environment switching.

Use Case 3: Database External Authentication

Team configures Oracle Database to use OUD for authentication, uses provided SQL scripts and templates for seamless integration.

Use Case 4: OUD Operations

Operator needs to restart OUD instance, uses oud_restart alias, checks status with oud_status, monitors logs with oud_log.

Use Case 5: Backup and Recovery

Regular OUD backups automated via oud_backup.sh, disaster recovery uses oud_restore.sh to recover directory data.

Benefits

  • Unified management for database and directory services
  • Standardized OUD operations
  • Simplified OUD instance provisioning
  • Integration with existing OraDBA workflows
  • Consistent tooling across Oracle stack
  • Reduced operational complexity
  • Better database-directory integration

Implementation Notes

OUD Versions

  • Support OUD 11g (11.1.1.7+)
  • Support OUD 12c (12.2.1.3+, 12.2.1.4)
  • Consider OUDSM (OUD Services Manager) integration

Security

  • Secure password handling
  • SSL/TLS certificate management
  • LDAP access control configuration
  • Audit logging integration

Dependencies

  • Java Runtime (JDK 8 or 11)
  • OUD software installation
  • Network ports availability
  • Sufficient disk space

Integration Points

  • Oracle Database external authentication
  • Fusion Middleware integration
  • Enterprise User Security (EUS)
  • Oracle Access Manager (OAM) integration

References

Priority

Low

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentation📚 Improvements or additions to documentation (README, comments, examples).enhancement✨ Accepted improvement or new feature request.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions