云数据库 GaussDB-gs_loader:使用权限
使用权限
使用场景分为三权分立场景下及非三权分立场景下的使用。可以通过将GUC参数enableSeparationOfDuty设置为on或者off,控制三权分立功能的开启或关闭。
GUC参数enable_copy_error_log是控制是否使用错误表pgxc_copy_error_log的参数,默认为off,即不使用错误表,错误数据直接记录到gs_loader的bad文件中。如果该参数设置为on,则会使用错误表pgxc_copy_error_log,将错误数据同时写入bad文件和错误表中。
- 默认场景,关闭三权分立(即enableSeparationOfDuty=off)时,使用者可以是数据库普通用户或管理员用户。当使用者为普通用户的时候,需要管理员用户对普通用户赋权。管理员账户可以直接使用。
- (在管理员用户下)创建用户。
CREATE USER load_user WITH PASSWORD '************';
- (在管理员用户下)将public schema权限给用户。
GRANT ALL ON SCHEMA public TO load_user;
- (在管理员用户下)创建并给用户授权gs_copy_summary表。
gs_copy_summary表中不能含有RULE、TRIGGER、索引函数、行级访问控制、CHECK约束、GENERATED列、DEFAULT列、ON UPDATE列等可能导致提权的对象,否则将认为是恶意用户创建而报错退出。
SELECT copy_summary_create() WHERE NOT EXISTS(SELECT * FROM pg_tables WHERE schemaname='public' AND tablename='gs_copy_summary');GRANT INSERT,SELECT ON public.gs_copy_summary To load_user;
- (可选,在管理员用户下)创建并给用户授权错误表pgxc_copy_error_log。
- 如果guc参数enable_copy_error_log未设置(默认为off),或者设置为off,则无需使用错误表,无需创建。否则需要创建该错误表。
- pgxc_copy_error_log表中不能含有RULE、TRIGGER、索引函数、行级访问控制、CHECK约束、GENERATED列、DEFAULT列、ON UPDATE列等可能导致提权的对象,否则将认为是恶意用户创建而报错退出。
SELECT copy_error_log_create() WHERE NOT EXISTS(SELECT * FROM pg_tables WHERE schemaname='public' AND tablename='pgxc_copy_error_log');GRANT INSERT,SELECT,DELETE ON public.pgxc_copy_error_log To load_user;
- (在管理员用户下)创建用户。
- 开启三权分立(即enableSeparationOfDuty=on)时,使用者可以是数据库普通用户或管理员用户。使用前需要到各自的Schema下创建pgxc_copy_error_log表以及gs_copy_summary这两张表并添加索引,不需要再进行授权。
- (在初始用户下)创建用户。
CREATE USER load_user WITH PASSWORD '********';
- (在初始用户下)切换为load_user用户
\c - load_user
- (在自建用户下)创建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);
- (可选,在自建用户下)创建pgxc_copy_error_log表并添加索引。
如果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);
- (在初始用户下)创建用户。