1. 替换衡石metadb

在使用HENGSHI SENSE服务过程中,可以根据业务需要替换HENGSHI自带的metadb。本文讲述使用云服务PostgreSQL替代衡石metadb的过程。

1.1. 准备工作

在进行配置前,请在云服务PostgreSQL上完成如下准备工作。

  1. 在数据库中创建用户和数据库账户,并对数据库账户授权所有权限。
    可参考下面示例进行操作,示例中用户名和账户名均为hengshi。
     DO $body$ BEGIN IF NOT EXISTS (SELECT * FROM pg_catalog.pg_user WHERE  usename = 'hengshi') THEN CREATE ROLE hengshi CREATEDB CREATEROLE LOGIN PASSWORD 'hengshi202020'; END IF; END $body$;
     set role hengshi;
     create database hengshi;
     create database hengshi_sense_internal_storage;
     reset role;
    
  2. 创建衡石日志用户,建立衡石日志数据库,并将数据库权限授权给衡石日志用户。
    参考下面示例进行日志用户相关准备工作。
    \c hengshi
    DO $body$ BEGIN IF NOT EXISTS (SELECT * FROM pg_catalog.pg_user WHERE usename = 'syslog') THEN CREATE ROLE syslog LOGIN PASSWORD 'syslog'; END IF; END $body$;
    GRANT ALL PRIVILEGES ON DATABASE hengshi to syslog;
    CREATE DATABASE syslog;
    GRANT ALL PRIVILEGES ON DATABASE syslog to syslog;
    
  3. 准备只读帐号(此操作在成功启动衡石服务后进行配置)。参考下面示例,设置只读账户。
     \c hengshi
     DO $body$ BEGIN IF NOT EXISTS (SELECT * FROM pg_catalog.pg_user WHERE  usename = 'hsro') THEN CREATE ROLE hsro LOGIN PASSWORD 'hsro202020'; END IF; END $body$;
     GRANT USAGE ON SCHEMA public TO hsro;
     ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO hsro;
     GRANT SELECT ON ALL TABLES IN SCHEMA public TO hsro;
     GRANT USAGE ON SCHEMA quartz TO hsro;
     ALTER DEFAULT PRIVILEGES IN SCHEMA quartz GRANT SELECT ON TABLES TO hsro;
     GRANT SELECT ON ALL TABLES IN SCHEMA quartz TO hsro;
    
  4. 使用超级管理员账号对用户进行授权操作
    Hengshi-sense版本>=4.4,要求云服务PostgreSQL数据库hengshi用户需要具备hengshi、hengshi_sense_internal_storage 这两个数据库的pg_catalog(schema)的CREATE/USAGE权限,或者hengshi用户拥有超级管理员权限

    • 查询hengshi用户是否具备超级管理员权限

      select usename from pg_catalog.pg_user where usesuper = 't' and usename = 'hengshi';
      # 查询结果不为空即表示hengshi用户具有超级管理员权限
      

      注意: 如果hengshi用户具有超级管理员权限忽略下述步骤

    • 依次连接hengshi、hengshi_sense_internal_storage数据库,进行授权操作

      \c hengshi
      GRANT ALL ON SCHEMA pg_catalog TO hengshi;
      \c hengshi_sense_internal_storage
      GRANT ALL ON SCHEMA pg_catalog TO hengshi;
      
    • 依次连接hengshi、hengshi_sense_internal_storage数据库,查询授权操作是否成功
      \c hengshi
      select nspname,pri_t,rolname from (SELECT nspname, (aclexplode(COALESCE(nspacl, acldefault('n', nspowner)))).grantee        AS grantee, (aclexplode(COALESCE(nspacl, acldefault('n', nspowner)))).privilege_type AS pri_t FROM pg_namespace WHERE nspname = 'pg_catalog') a left join pg_roles b on a.grantee=b.oid where rolname = 'HS_PG_USR';
      \c hengshi_sense_internal_storage
      select nspname,pri_t,rolname from (SELECT nspname, (aclexplode(COALESCE(nspacl, acldefault('n', nspowner)))).grantee        AS grantee, (aclexplode(COALESCE(nspacl, acldefault('n', nspowner)))).privilege_type AS pri_t FROM pg_namespace WHERE nspname = 'pg_catalog') a left join pg_roles b on a.grantee=b.oid where rolname = 'HS_PG_USR';
      
    • 授权成功查询结果如下,说明hengshi用户已拥有USAGE、CREATE权限
nspname pri_t rolname
pg_catalog USAGE HS_PG_USR
pg_catalog CREATE HS_PG_USR
  • 使用hengshi用户依次连接hengshi、hengshi_sense_internal_storage数据库,使用下列sql验证用户权限,执行未出现错误信息即完成授权操作

     CREATE OR REPLACE FUNCTION pg_catalog.myTestCreate(text)
      RETURNS numeric
      IMMUTABLE STRICT AS
      $$
      BEGIN
      RETURN $1::numeric;
      EXCEPTION
          WHEN OTHERS THEN
              RETURN NULL;
      END
      $$ LANGUAGE plpgsql;
    
      select myTestCreate('123');
    
      DROP FUNCTION pg_catalog.myTestCreate(text);
     `
    

1.2. 修改数据库相关配置

在文件conf/hengshi-sense-env.sh中修改如下配置项,然后重新启动HENGSHI SENSE。重启后,衡石metadb替换成功。

HS_PG_HOST=xxx         #衡石业务数据库 host
HS_PG_PORT=5432        #衡石业务数据库 port
HS_PG_DB="hengshi"     #衡石业务数据库 dbname
HS_PG_USR=hengshi      #衡石业务数据库 user
HS_PG_PWD="hengshi"    #衡石业务数据库 password

export INTERNAL_STORAGE_DB_NAME="hengshi_sense_internal_storage"  #衡石内部存储数据库

HS_SYSLOG_HOST=xxxx    #衡石日志数据库 host (一般与业务数据库一致)
HS_SYSLOG_PORT=5432    #衡石日志数据库 port (一般与业务数据库一致)
HS_SYSLOG_DB=syslog    #衡石日志数据库 dbname
HS_SYSLOG_USR=syslog   #衡石日志数据库 user
HS_SYSLOG_PWD=syslog   #衡石日志数据库 password

results matching ""

    No results matching ""

    通用配置 引擎高级配置