云数据库 GaussDB-gs_loader:使用权限

时间:2025-02-12 15:01:58

使用权限

使用场景分为三权分立场景下及非三权分立场景下的使用。使用者可以选择将guc参数enableSeparationOfDuty设置为on或者off来控制三权分立功能的开启或关闭。

GUC参数enable_copy_error_log是控制是否使用错误表pgxc_copy_error_log的参数,默认为off、即不使用错误表,错误记录直接记录到gs_loader的bad文件中。如果该参数设置为on,则会使用错误表pgxc_copy_error_log,将错误记录插入错误表。

默认场景,不开启三权分立(即enableSeparationOfDuty=off)时,使用者可以是数据库普通用户或管理员用户。当使用者为普通用户的时候,需要管理员用户对普通用户赋权。管理员账户可以直接使用。错误表pgxc_copy_error_log通过GUC参数enable_copy_error_log控制开启和关闭,默认关闭。

  1. 使用管理员用户创建新的用户:
    CREATE USER load_user WITH PASSWORD '************';
  2. 给新用户授权pg_catalog.gs_copy_summary表:

    gs_loader使用的public.gs_copy_summary变更为pg_catalog.gs_copy_summary,原public.gs_copy_summary表废弃。由于public.gs_copy_summary可能与用户表同名,因此需要用户进行识别,确认不是用户表后,将数据迁移到pg_catalog.gs_copy_summary表里之后,删除public.gs_copy_summary。由于存在pg_catalog.gs_copy_summary,gsql元命令\d(+)优先找到pg_catalog.gs_copy_summary,而因为是系统表的缘故不显示,因此列表中找不到gs_copy_summary,但是实际上public.gs_copy_summary是存在的。可以直接通过public.gs_copy_summary引用。

    GRANT INSERT,SELECT ON  pg_catalog.gs_copy_summary To load_user;
  3. (可选)给新用户授权错误表pgxc_copy_error_log:

    gs_loader使用的public.pgxc_copy_error_log变更为pg_catalog.pgxc_copy_error_log,原public.pgxc_copy_error_log表废弃。由于public.pgxc_copy_error_log可能与用户表同名,因此需要用户进行识别,确认不是用户表后,将数据迁移到pg_catalog.pgxc_copy_error_log表里之后,删除public.pgxc_copy_error_log。由于存在pg_catalog.pgxc_copy_error_log,gsql元命令\d(+)优先找到pg_catalog.pgxc_copy_error_log,而因为是系统表的缘故不显示,因此列表中找不到pgxc_copy_error_log,但是实际上public.pgxc_copy_error_log是存在的。可以直接通过public.pgxc_copy_error_log引用。

    GRANT INSERT,SELECT,DELETE ON  pg_catalog.pgxc_copy_error_log To load_user;

开启三权分立(即enableSeparationOfDuty=on)时,使用者可以是数据库普通用户或管理员用户。使用前需要到各自的schema下创建pgxc_copy_error_log表以及gs_copy_summary这两张表并添加索引,不需要再进行授权。

因为pg_catalog模式下始终存在pgxc_copy_error_log以及gs_copy_summary两张表,而pg_catalog模式在search_path中优先级高于用户模式,因此在三权分立场景下无法直接通过gsql元命令\d(+)查询到,使用这两张表需要显式指定用户模式。

  1. 使用初始用户创建新用户:
    CREATE USER load_user WITH PASSWORD '********';
  2. 从初始用户切换为新用户:
    \c - load_user
  3. 创建gs_copy_summary表并添加索引:
    CREATE TABLE load_user.gs_copy_summary(relname varchar, begintime timestamptz, endtime timestamptz, id bigint, pid bigint, readrows bigint, skiprows bigint, loadrows bigint, errorrows bigint, whenrows bigint, allnullrows bigint, detail text);CREATE INDEX gs_copy_summary_idx ON load_user.gs_copy_summary(id);
  4. (可选)创建pgxc_copy_error_log表并添加索引:
    1. 如果guc参数enable_copy_error_log未设置(默认为off),或者设置为off,则无需使用错误表,无需创建。否则需要创建该错误表。
    CREATE TABLE load_user.pgxc_copy_error_log (relname varchar, begintime timestamptz, filename varchar, lineno int8, rawrecord text, detail text);CREATE INDEX copy_error_log_relname_idx ON load_user.pgxc_copy_error_log(relname);
support.huaweicloud.com/tg-gaussdb-cent-v8/gaussdb-38-0011.html