
# DRS要求的PostgreSQL权限有哪些
DRS在同步过程中，对账号有一定的权限要求，本章节主要介绍PostgreSQL引擎的权限要求。
#### 权限要求
- 源和目标库的连接账号需要具有登录权限，如果没有该账号，可以通过如下方式创建，以用户ptd为例。 参考语句：**CREATE USER** ptd **PASSWORD**'password';
  

- DRS实时同步功能的权限要求，[表1 权限要求]中以ptd为例提供参考语句。
   表1权限要求及参考语句 
  | 同步模式    | 源数据库                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 目标数据库                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
  |:---|:---|:---|
  | 全量同步    | 数据库的CONNECT权限，模式的USAGE权限，表的SELECT权限，序列的SELECT权限，系统表pg_catalog.pg_authid的SELECT权限（用于同步用户的密码）。 参考语句： **GRANT CONNECT ON DATABASE** *database_name* **TO** *ptd*; **GRANT USAGE ON SCHEMA** *schema_name* **TO** *ptd*; **GRANT SELECT ON TABLE** *table_name* **TO** *ptd*; **GRANT SELECT ON SEQUENCE** *sequence_name* **TO** *ptd*; **GRANT SELECT ON** pg_catalog.pg_authid**TO** *ptd*;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | **库级同步权限要求：** - 如果目标库不是postgres，需要具有CREATEDB权限。 参考语句：**ALTER ROLE** *ptd* **WITH CREATEDB**;     - 如果目标库是postgres，需要具有postgres库的CONNECT和CREATE权限、对模式public的USAGE和CREATE权限。 参考语句： **GRANT CONNECT, CREATE ON DATABASE** postgres **TO** *ptd*; **GRANT USAGE, CREATE ON SCHEMA** public **TO** *ptd*;     **表级同步权限要求：** - 如果需要同步库，需要具有CREATEDB权限。 参考语句： **ALTER ROLE** *ptd* **WITH CREATEDB**;     - 如果需要同步模式，需要具有模式所在库的CONNECT权限、模式所在库上的CREATE权限。 参考语句： **GRANT CONNECT, CREATE ON DATABASE** *database_name* **TO** *ptd*;     - 如果需要同步模式下的对象，需要具有模式所在库的CONNECT权限、对象所在模式的USAGE权限、对象所在模式上的CREATE权限。 参考语句： **GRANT USAGE, CREATE ON SCHEMA** *schema_name* **TO** *ptd*;     **同步用户权限要求：** 需要具有CREATEROLE权限。 参考语句： **ALTER USER** *ptd* **CREATEROLE**; |
  | 全量+增量同步 | - 数据库的CONNECT权限，模式的USAGE权限，表的SELECT权限，序列的SELECT权限，系统表pg_catalog.pg_authid的SELECT权限（用于同步用户的密码），无主键表的UPDATE、DELETE和TRUNCATE权限（用于对无主键表的短暂加锁，保证迁移后数据一致）。 参考语句： **GRANT CONNECT ON DATABASE** *database_name* **TO** *ptd*; **GRANT USAGE ON SCHEMA** *schema_name* **TO** *ptd*; **GRANT SELECT ON TABLE** *table_name* **TO** *ptd*; **GRANT SELECT ON SEQUENCE** *sequence_name* **TO** *ptd*; **GRANT SELECT ON** pg_catalog.pg_authid**TO** *ptd*; **GRANT UPDATE, DELETE, TRUNCATE ON TABLE** *table_name* **TO** *ptd*;   - REPLICATION连接权限。 添加方法： 1. 在源数据库的"pg_hba.conf"配置文件的所有配置前增加一行配置"host replication \<src_user_name\> \<drs_instance_ip\>/32 \<认证方式\>"； 认证方式可参考PostgreSQL官方文档[pg_hba.conf文件配置](https://www.postgresql.org/docs/current/auth-pg-hba-conf.html)，常见的认证方式有md5、scram-sha-256等。   2. 在源库使用SUPERUSER用户执行语句"select pg_reload_conf();"或重启数据库实例使设置生效。     | **库级同步权限要求：** - 如果目标库不是postgres，需要具有CREATEDB权限。 参考语句：**ALTER ROLE** *ptd* **WITH CREATEDB**;     - 如果目标库是postgres，需要具有postgres库的CONNECT和CREATE权限、对模式public的USAGE和CREATE权限。 参考语句： **GRANT CONNECT, CREATE ON DATABASE** postgres **TO** *ptd*; **GRANT USAGE, CREATE ON SCHEMA** public **TO** *ptd*;     **表级同步权限要求：** - 如果需要同步库，需要具有CREATEDB权限。 参考语句： **ALTER ROLE** *ptd* **WITH CREATEDB**;     - 如果需要同步模式，需要具有模式所在库的CONNECT权限、模式所在库上的CREATE权限。 参考语句： **GRANT CONNECT, CREATE ON DATABASE** *database_name* **TO** *ptd*;     - 如果需要同步模式下的对象，需要具有模式所在库的CONNECT权限、对象所在模式的USAGE权限、对象所在模式上的CREATE权限。 参考语句： **GRANT USAGE, CREATE ON SCHEMA** *schema_name* **TO** *ptd*;     **同步用户权限要求：** 需要具有CREATEROLE权限。 参考语句： **ALTER USER** *ptd* **CREATEROLE**; |
     
  
 
