跳到主要内容

SQLServer需要的权限

简述

CloudCanal 在做 SQLServer 作为源/对端的数据迁移同步时,需要提供的账号有一些赋权。
如果在添加数据源的时候使用 SQLServer 账号已经具有 DBA/SA 权限,那么可以忽略下面的具体权限申请。

账号创建

如果已经准备了用于数据同步的账号则可以跳过该步骤

  • CREATE LOGIN [cloudcanal] WITH PASSWORD=N'cloudcanal', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
    • 用途:创建 cloudcanal 登陆账号用于连接数据库
  • GRANT CONNECT SQL TO [cloudcanal]
    • 用途:授权 cloudcanal 登陆账号可以连接数据库

SQLServer 为源端

  • USE [xxx]
    • 用途:切换到 xxx 源端数据库,为下一步分配数据库用户做准备
  • CREATE USER [cloudcanal] FOR LOGIN [cloudcanal]
    • 用途:为 cloudcanal 登陆账号分配同名数据库用户

增量同步

  • exec [xxx].sys.sp_cdc_enable_db
    • 用途:为 xxx 数据启用 CDC,该命令需要 sysadmin 服务器角色,应由 DBA 单独操作
  • ALTER ROLE [db_owner] ADD MEMBER [cloudcanal]
    • 用途:为 cloudcanal 登陆账号分配 db_owner 身份,新建任务创建 CDC 表需要该权限

SQLServer 为对端

提示:如果已经具有 xxx 数据库的 db_owner 身份则无需下列授权操作

  • USE [xxx]
    • 用途:切换到 xxx 对端数据库,为下一步分配数据库用户做准备
  • CREATE USER [cloudcanal] FOR LOGIN [cloudcanal]
    • 用途:为 cloudcanal 登陆账号分配同名数据库用户
  • GRANT CREATE TABLE TO [cloudcanal]
  • GRANT ALTER TO [cloudcanal]
    • 用途:结构迁移时在对端创建 表结构
  • GRANT EXECUTE TO [cloudcanal]
    • 用途1:结构迁移过程中表/列备注信息的设置
    • 用途2:增量 DDL 同步过程中同步源端 表/列 更名 DDL
  • GRANT INSERT TO [cloudcanal]
  • GRANT UPDATE TO [cloudcanal]
  • GRANT DELETE TO [cloudcanal]
    • 用途:对应的表INSERTUPDATEDELETE

Schema 级授权

提示:如果已经具有 xxx 数据库的 db_owner 身份则无需下列授权操作
单一 SCHEMA 授权

  • GRANT ALTER ON SCHEMA::[my_schema] TO [cloudcanal]
  • GRANT EXECUTE ON SCHEMA::[my_schema] TO [cloudcanal]
    • 用途:在 SCHEMA 下创建表
  • GRANT INSERT ON SCHEMA::[my_schema] TO [cloudcanal]
  • GRANT UPDATE ON SCHEMA::[my_schema] TO [cloudcanal]
  • GRANT DELETE ON SCHEMA::[my_schema] TO [cloudcanal]
    • 用途:对应的表INSERTUPDATEDELETE

整体 SCHEMA 授权

  • GRANT ALTER ON SCHEMA::* TO [cloudcanal]
  • GRANT EXECUTE ON SCHEMA::* TO [cloudcanal]
    • 用途:在 SCHEMA 下创建表
  • GRANT INSERT ON SCHEMA::* TO [cloudcanal]
  • GRANT UPDATE ON SCHEMA::* TO [cloudcanal]
  • GRANT DELETE ON SCHEMA::* TO [cloudcanal]
    • 用途:对应的表INSERTUPDATEDELETE