更新时间:2024-10-21 GMT+08:00

评估前准备

用户权限

用户需拥有创建UGO评估项目的对应权限。具体权限,可参见权限管理进行设置。

网络准备

  1. 源数据库与UGO服务的网络是否打通,目前UGO连接源库仅支持公网连接。
  2. 源数据库的防火墙需要放通UGO服务的访问,使得UGO可以正常访问本地数据库。
  3. 源数据库的访问白名单限制是否对UGO服务放行,各类型数据库添加白名单的方法不同,具体方法请参考各数据库官方文档进行操作。
  4. 源数据库设置的最大连接数限制,各类型数据库最大连接数控制的参数和修改方法不同,具体方法请参考各数据库官方文档进行操作。
  5. 检查数据库连接信息是否正确,包括提供的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;
    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;

      若需采集所有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;

      若需采集所有Schema,可将以上<schema-name>.*替换为*.*,直接授予全局对象采集权限。

    5. 从MySQL8.0.20版本开始,针对存储过程和存储函数,还需要授予如下权限:
      GRANT SHOW_ROUTINE ON *.* TO db-user

    以MySQL和GoldenDB为源,如果给用户赋予了全局的SELECT权限,SHOW_ROUTINE权限也能通过,无需再单独授予。

  • 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;