
# 评估前准备
#### 用户权限
用户需拥有创建 UGO 评估项目的对应权限。具体权限，可参见[权限管理](https://support.huaweicloud.com/productdesc-ugo/ugo_01_0008.html)进行设置。
#### 网络准备
1. 若使用公网连接源数据库，需确保源数据库的安全策略开放 UGO 服务的访问，并在访问白名单中对 UGO 服务放行。各类型数据库添加白名单的方法不同，具体方法请参考各数据库官方文档进行操作。
2. 源数据库设置的最大连接数限制，各类型数据库最大连接数控制的参数和修改方法不同，具体方法请参考各数据库官方文档进行操作。
3. 检查数据库连接信息是否正确，包括提供的 IP 地址、数据库服务名称、用户名、密码等信息。
 
#### 源数据库权限
在使用UGO进行数据库评估，需要准备用于采集的数据库账号，并授予必要的访问权限。
- Oracle为源，源数据库DBA权限授权方式。
  1. 创建用户，USER为数据库用户名。
     ```
     CREATE USER user IDENTIFIED BY password;
     ```
     
  
  2. 授予用户登录权限。
     ```
     GRANT CONNECT TO user;
     ```
     
  
  3. 授予用户DBA权限。
     ```
     GRANT DBA TO user;
     ```
     
   
- Oracle为源，源数据非DBA权限授权方式。
  1. 创建用户，USER为数据库用户名。
     ```
     CREATE USER user IDENTIFIED BY password;
     ```
     
  
  2. 授予用户登录权限。
     ```
     GRANT CONNECT TO user;
     ```
     
  
  3. 授予用户SELECT_CATALOG_ROLE角色权限，允许用户从数据字典中获取对象的DDL语句，若没有此权限，权限检查将失败无法执行下一步。
     ```
     GRANT SELECT_CATALOG_ROLE TO user;
     GRANT SELECT ANY DICTIONARY TO user;
     ```
     
  
  
  ![](https://support.huaweicloud.com/qs-ugo/public_sys-resources/notice_3.0-zh-cn.png)
  Oracle为源库时，需要具有待迁移数据库的DBMS_METADATA、动态视图和Schema对象数量检查的权限。且为了使DBMS_METADATA.GET_DDL方法返回的对象DDL保持统一，UGO需要对采集的SQL进行格式化，因此需要非只读权限账号。UGO连接时会进行导出参数设置，该设置仅对采集的DDL有效，作用范围是会话级别，不会对源库产生变更及影响。UGO会进行三个参数设置，详细介绍如下：
  - 让表约束、索引将成为CREATE TABLE语句的一部分，不单独生成ALTER TABLE语句。
    ```
    DBMS_METADATA.SET_TRANSFORM_PARAM(dbms_metadata.SESSION_TRANSFORM, 'CONSTRAINTS_AS_ALTER', false)
    ```
    
  
  - 导出的DDL中不包含排序规则子句。
    ```
    DBMS_METADATA.SET_TRANSFORM_PARAM(dbms_metadata.SESSION_TRANSFORM, 'COLLATION_CLAUSE', 'NEVER')
    ```
    
  
  - 采集后的SQL语句添加分号;
    ```
    DBMS_METADATA.SET_TRANSFORM_PARAM(dbms_metadata.SESSION_TRANSFORM, 'SQLTERMINATOR', true)
    ```
    
    
- MySQL为源数据库时，需要具有MySQL系统库的查询权限、PROCESS权限和待迁移数据库的所有权限。从MySQL-8.0版本开始，针对存储过程和存储函数，还需要SHOW_ROUTINE权限。源数据库授权方式如下：
  1. 创建用户，db-user为数据库用户名。
     ```
     CREATE USER db-user IDENTIFIED BY passwd;
     ```
     
  
  2. 授予用户权限，UGO默认使用mysql数据库进行测试连接，并需要访问mysql数据库进行权限检查。
     ```
     GRANT SELECT ON mysql.* TO db-user;
     ```
     
  
  3. process权限用于指定用户可以查看information_schema所有的表。
     ```
     GRANT PROCESS ON *.* TO db-user;
     ```
     
  
  4. 采集对象需要授予如下权限。
     ```
     GRANT SELECT ON schema-name.* TO db-user;
     GRANT SHOW VIEW ON schema-name.* TO db-user;
     GRANT TRIGGER ON schema-name.* TO db-user;
     ```
     ![](https://support.huaweicloud.com/qs-ugo/public_sys-resources/note_3.0-zh-cn.png)
     若需采集所有Schema，可将以上\<schema-name\>.\*替换为\*.\*，直接授予全局对象采集权限。
     
  
  5. 从MySQL8.0.20版本开始，针对存储过程和存储函数，还需要授予如下权限：
     ```
     GRANT SHOW_ROUTINE ON *.* TO db-user;
     ```
     
   
- GoldenDB为源数据库时，需要具有GoldenDB系统库的查询权限、PROCESS权限和待迁移数据库的所有权限。针对存储过程和存储函数，还需要SHOW_ROUTINE权限。源数据库授权方式如下：
  1. 创建用户，db-user为数据库用户名。
     ```
     CREATE USER db-user IDENTIFIED BY passwd;
     ```
     
  
  2. 授予用户权限，GoldenDB系统表mysql.user的权限，该权限用于采集USER、ROLE对象的信息。
     ```
     GRANT SELECT ON mysql.user TO db-user;
     ```
     
  
  3. process权限用于指定用户可以查看information_schema所有的表。
     ```
     GRANT PROCESS ON *.* TO db-user;
     ```
     
  
  4. 采集对象需要授予如下权限。
     ```
     GRANT SELECT ON schema-name.* TO db-user;
     GRANT SHOW VIEW ON schema-name.* TO db-user;
     GRANT TRIGGER ON schema-name.* TO db-user;
     ```
     ![](https://support.huaweicloud.com/qs-ugo/public_sys-resources/note_3.0-zh-cn.png)
     若需采集所有Schema，可将以上\<schema-name\>.\*替换为\*.\*，直接授予全局对象采集权限。
     
  
  5. 针对存储过程和存储函数，还需要授予如下权限：
     ```
     GRANT SHOW_ROUTINE ON *.* TO db-user
     ```
     
  
  
  ![](https://support.huaweicloud.com/qs-ugo/public_sys-resources/note_3.0-zh-cn.png)
  以MySQL和GoldenDB为源，如果给用户赋予了全局的SELECT权限，SHOW_ROUTINE权限也能通过，无需再单独授予。
  
- PostgreSQL为源数据库时，需要具有PUBLIC和用户自建SCHEMA权限。源数据库授权方式如下：
  1. 创建用户user。
     ```
     CREATE USER user PASSWORD password;
     ```
     
  
  2. 授予用户PUBLIC和用户自建SCHEMA权限。
     ```
     -- 1. public schema
     GRANT USAGE ON SCHEMA public TO user;
     GRANT SELECT ON ALL TABLES IN SCHEMA public TO user;
     GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO user;
     GRANT TRIGGER ON ALL TABLES IN SCHEMA public TO user;
     -- 2. 用户自建 schema
     GRANT USAGE ON SCHEMA schema TO user;
     GRANT SELECT ON ALL TABLES IN SCHEMA schema TO user;
     GRANT USAGE ON ALL SEQUENCES IN SCHEMA schema TO user;
     GRANT TRIGGER ON ALL TABLES IN SCHEMA schema TO user;
     ```
     
   
- Microsoft SQL Server为源数据库时，需要具有VIEW DEFINITION权限。源数据库授权方式如下：
  1. 创建登录用户login-user。
     ```
     CREATE LOGIN login-user WITH PASSWORD=password,DEFAULT_DATABASE =database;
     ```
     
  
  2. 创建数据库用户db-user。
     ```
     CREATE USER db-user FOR LOGIN login-user;
     ```
     
  
  3. 授予用户查询元数据的权限，该权限可以赋予用户查看所有表结构和元数据的能力。
     ```
     GRANT VIEW DEFINITION ON DATABASE :: database TO db-user;
     ```
     
  
  4. 授予用户查询依赖的权限。
     ```
     GRANT SELECT ON OBJECT :: sys.sql_expression_dependencies TO db-user;
     ```
     
   
 
- MariaDB为源数据库时，需要具有MariaDB系统库的查询权限、PROCESS权限和待迁移数据库的所有权限。源数据库授权方式如下：
  1. 创建用户，db-user为数据库用户名。
     ```
     CREATE USER db-user IDENTIFIED BY passwd;
     ```
     
  
  2. 授予用户权限，UGO默认使用mysql数据库进行测试连接，需要访问mysql数据库进行权限检查。
     ```
     GRANT SELECT ON mysql.* TO db-user;
     ```
     
  
  3. PROCESS权限用于指定用户查看sys.metrics表，采集数据库内存等基本信息，缺失该权限不影响数据库对象的采集，可选授予。
     ```
     GRANT PROCESS ON *.* TO db-user;
     GRANT SELECT ON *.* TO <db-user>;
     ```
     
  
  4. 采集对象需要授予如下权限。
     ```
     GRANT SELECT ON schema-name.* TO db-user;
     GRANT SHOW VIEW ON schema-name.* TO db-user;
     GRANT TRIGGER ON schema-name.* TO db-user;
     ```
     ![](https://support.huaweicloud.com/qs-ugo/public_sys-resources/note_3.0-zh-cn.png)
     若需采集所有Schema，可将以上\<schema-name\>.\*替换为\*.\*，直接授予全局对象采集权限。
     
   
- openGauss 为源数据库时，需要具有 PUBLIC 和用户自建 SCHEMA 权限。源数据库授权方式如下：
  1. 创建用户 user。
     ```
     CREATE USER <user> PASSWORD '<password>';
     ```
     
  
  2. 根据待采集的 Schema 为用户授于对应 Schema 的对象采集权限。
     ```
     GRANT SELECT ON pg_authid TO <user>;
     GRANT USAGE ON SCHEMA <schema>,... TO <user>;
     GRANT SELECT ON ALL SEQUENCES IN SCHEMA <schema>,... TO <user>;
     GRANT SELECT ON ALL TABLES IN SCHEMA <schema>,... TO <user>;
     ```
     
   
- DDM 为源时，需要 DDM 用户拥有 SELECT 权限。DDM 授权方式如下：
  1. 登录 DDM 控制台。
  
  2. 在实例管理列表页面，单击目标实例名称，进入实例基本信息页面。
  
  3. 在左侧导航栏选择"账号管理"，进入账号管理页面。
  
  4. 在账号管理页面单击"创建DDM账号"。
  
  5. 在弹窗中输入必填信息，在账号权限处勾选 SELECT 权限。
  
  6. 单击"确定"，完成账号创建。
   
 
