3.6. 기록 데이터베이스에 대한 읽기 전용 액세스 허용

편집을 허용하지 않고 기록 데이터베이스에 액세스할 수 있도록 하려면 ovirt_engine_history 데이터베이스에 로그인하고 읽을 수 있는 읽기 전용 PostgreSQL 사용자를 만들어야 합니다. 이 절차는 히스토리 데이터베이스가 설치된 시스템에서 실행해야 합니다.

기록 데이터베이스에 대한 읽기 전용 액세스 허용

  1. postgres 사용자 쉘에 root로 로그인합니다.

    # su - postgres
  2. 히스토리 데이터베이스에 대한 읽기 전용 액세스 권한을 부여할 사용자를 생성합니다.

    # psql -U postgres -c "CREATE ROLE username WITH LOGIN ENCRYPTED PASSWORD 'password';" -d ovirt_engine_history
  3. 새로 생성된 사용자에게 기록 데이터베이스에 연결할 수 있는 권한을 부여합니다.

    # psql -U postgres -c "GRANT CONNECT ON DATABASE ovirt_engine_history TO username;"
  4. 새로 생성된 사용자 사용을 공개 스키마에 부여합니다.

    # psql -U postgres -c "GRANT USAGE ON SCHEMA public TO username;" ovirt_engine_history
  5. 새로 생성된 사용자에게 부여할 나머지 권한을 생성하여 파일에 저장합니다.

    # psql -U postgres -c "SELECT 'GRANT SELECT ON ' || relname || ' TO username;' FROM pg_class JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace WHERE nspname = 'public' AND relkind IN ('r', 'v');" --pset=tuples_only=on  ovirt_engine_history > grant.sql
  6. 이전 단계에서 만든 파일을 사용하여 새로 만든 사용자에게 권한을 부여합니다.

    # psql -U postgres -f grant.sql ovirt_engine_history
  7. 새로 생성된 사용자에게 권한을 부여하는 데 사용한 파일을 제거합니다.

    # rm grant.sql
  8. Ctrld 눌러 postgres 사용자 쉘을 종료합니다.
  9. 새로 생성된 사용자에 대해 /var/lib/pgsql/data/pg_hba.conf에 대해 다음 행을 모두 로컬로 시작하는 행 앞의 /var/lib/pgsql/data/pg_hba.conf 에 추가합니다.

    # TYPE  DATABASE                USER           ADDRESS                 METHOD
    host    ovirt_engine_history    username    0.0.0.0/0               md5
    host    ovirt_engine_history    username    ::0/0                   md5
    local   all             all                                     peer
  10. PostgreSQL 서비스를 다시 로드합니다.

    # systemctl reload postgresql
  11. 읽기 전용 사용자의 액세스 권한을 테스트하려면 다음을 수행합니다.

    # su - postgres -c 'psql -U username ovirt_engine_history -h localhost'
    Password for user username:
    psql (9.2.23)
    Type "help" for help.
    
    ovirt_engine_history=>
  12. ovirt_engine_history 데이터베이스를 종료하려면 \q 를 입력합니다.

수정이 실패하는 동안 ovirt_engine_history 데이터베이스의 테이블 및 뷰에 대한 읽기 전용 사용자의 SELECT 문은 성공합니다.