
# 无权限角色导出数据
gs_dump和gs_dumpall通过-U指定执行导出的用户账户。如果当前使用的账户不具备导出所要求的权限时，会无法导出数据。此时，可在导出命令中设置--role参数来指定具备权限的角色。在执行命令后，gs_dump和gs_dumpall会使用--role参数指定的角色，完成导出动作。
#### 操作步骤
1. [准备ECS作为gsql客户端主机](https://support.huaweicloud.com/mgtg-dws/dws_01_0037.html#section0)。
2. 请参见[下载客户端](https://support.huaweicloud.com/mgtg-dws/dws_01_0031.html)下载gsql客户端，并使用SSH文件传输工具（例如WinSCP工具），将客户端工具上传到一个待安装gsql的Linux主机上。
   
   执行上传gsql操作的用户需要对客户端主机的目标存放目录有完全控制权限。
   或者，您也可以先SSH远程登录到需要安装gsql的Linux主机，然后在Linux命令窗口，执行以下命令下载gsql客户端：
   ```
   wget https://obs.myhuaweicloud.com/dws/download/dws_client_9.x.x_redhat_x64.zip --no-check-certificate
   ```
   
   
3. 执行以下命令解压客户端工具。 
   ```
   cd <客户端存放路径>
   unzip dws_client_9.x.x_redhat_x64.zip
   ```
   其中：
   - \<客户端存放路径\>：请替换为实际的客户端存放路径。
   
   - dws_client_9.x.x_redhat_x64.zip：为"RedHat x86"对应的客户端工具包名称，请替换为实际下载的包名。
   
   
   
   
4. 执行以下命令配置客户端。 
   ```
   source gsql_env.sh
   ```
   提示以下信息表示客户端已配置成功：
   ```
   All things done.
   ```
   
   
5. 使用gs_dump导出human_resource数据库数据。 
   用户jack不具备导出数据库human_resource的权限，而角色role1具备该权限，要实现导出数据库human_resource，可以在导出命令中设置--role角色为role1，使用role1的权限，完成导出目的。导出文件格式为tar归档格式。
   ```
   gs_dump -U jack -W password -f /home/dbadmin/backup/MPPDB_backup.tar -p 8000 -h 10.10.10.100 human_resource --role role1 --rolepassword password -F t
   ```
   表1常用参数说明 
   | 参数             | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 举例                                         |
   |:---|:---|:---|
   | -U             | 连接数据库的用户名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | -U jack                                    |
   | -W             | 指定用户连接的密码。 - 如果主机的认证策略是trust，则不会对数据库管理员进行密码验证，即无需输入-W选项。  - 如果没有-W选项，并且不是数据库管理员，会提示用户输入密码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | -W *password*，此处密码需要用户自定义。                 |
   | -f             | 将导出文件发送至指定目录文件夹。如果这里省略，则使用标准输出。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | -f /home/*dbadmin*/backup/MPPDB_backup.tar |
   | -p             | 指定服务器所监听的TCP端口或本地Unix域套接字后缀，以确保连接。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | -p 8000                                    |
   | -h             | "集群地址"如果通过公网地址连接，请指定为集群"公网访问地址"或"公网访问域名"，如果通过内网地址连接，请指定为集群"内网访问地址"或"内网访问域名"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | -h 10.10.10.100                            |
   | dbname         | 需要导出的数据库名称                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | human_resource                             |
   | --role         | 指定导出使用的角色名。选择该选项，会使导出工具连接数据库后，发起一个SET ROLE角色名命令。当所授权用户（由-U指定）没有导出工具要求的权限时，该选项会起到作用，即切换到具备相应权限的角色。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | -r role1                                   |
   | --rolepassword | 指定具体角色用户的角色密码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | --rolepassword password                    |
   | -F             | 选择导出文件格式。-F参数值如下： - p：纯文本格式  - c：自定义归档  - d：目录归档格式  - t：tar归档格式   | -F t                                       |
      
   其他参数说明请参见《数据仓库服务工具指南》中"gs_dump"或"gs_dumpall"章节。
   
   
 
#### 示例
示例一：执行gs_dump导出数据，用户jack不具备导出数据库human_resource的权限，而角色role1具备该权限，要实现导出数据库human_resource，可以在导出命令中设置--role角色为role1，使用role1的权限，完成导出目的。导出文件格式为tar归档格式。
```
human_resource=# CREATE USER jack IDENTIFIED BY "password";
gs_dump -U jack -W password -f /home/dbadmin/backup/MPPDB_backup11.tar -p 8000 -h 10.10.10.100 human_resource --role role1 --rolepassword password -F t
gs_dump[port='8000'][human_resource][2017-07-21 16:21:10]: dump database human_resource successfully
gs_dump[port='8000'][human_resource][2017-07-21 16:21:10]: total time: 4239  ms
```
示例二：执行gs_dump导出数据，用户jack不具备导出模式public的权限，而角色role1具备该权限，要实现导出模式public，可以在导出命令中设置--role角色为role1，使用role1的权限，完成导出目的。导出文件格式为tar归档格式。
```
human_resource=# CREATE USER jack IDENTIFIED BY "1234@abc";
gs_dump -U jack -W password -f /home/dbadmin/backup/MPPDB_backup12.tar -p 8000 -h 10.10.10.100 human_resource -n public --role role1 --rolepassword password -F t
gs_dump[port='8000'][human_resource][2017-07-21 16:21:10]: dump database human_resource successfully
gs_dump[port='8000'][human_resource][2017-07-21 16:21:10]: total time: 3278  ms
```
示例三：执行gs_dumpall导出数据，用户jack不具备导出所有数据库的权限，而角色role1具备该权限，要实现导出所有数据库，可以在导出命令中设置--role角色为role1，使用role1的权限，完成导出目的。导出文件格式为文本归档格式。
```
human_resource=# CREATE USER jack IDENTIFIED BY "password";
gs_dumpall -U jack -W password -f /home/dbadmin/backup/MPPDB_backup.sql -p 8000 -h 10.10.10.100 --role role1 --rolepassword password
gs_dumpall[port='8000'][human_resource][2018-11-14 17:26:18]: dumpall operation successful
gs_dumpall[port='8000'][human_resource][2018-11-14 17:26:18]: total time: 6437  ms
```
