AWS RDS只读副本:如何避免复制少数表和列

时间:2017-11-03 19:56:47

标签: java amazon-web-services aws-lambda mariadb amazon-rds

我使用的是RDS MariaDB,并且要求拥有可用于分析的从属数据库。我正在寻找AWS Read Replica,但问题是它没有为我提供跳过包含一些敏感信息的少数表和列的复制的规定,而且我们不希望从属DB拥有该信息。

我可以使用AWS只读副本跳过几个表和列的复制吗?或者在AWS Read Replica中,我可以编写可以从副本数据库中删除此信息的AWS Lambda吗?

2 个答案:

答案 0 :(得分:2)

RDS只读副本是只读的。您无法直接修改此副本。

更好的方法是创建适当的表级和列级权限,以便分析用户无法访问某些表。

MySQL Table and Column Level Permissions

答案 1 :(得分:2)

AWS Database Migration Service适用于此用例:

  • 您可以使用AWS数据库迁移服务在异构源数据库和目标数据库之间建立持续的连续复制。
  • AWS DMS支持源数据库和目标数据库的MariaDB。
  • AWS DMS支持从源数据库中选择每个表。
  • AWS DMS支持在转换为目标数据库期间删除列。

根据常见问题:

  

Q值。除了一次性数据迁移之外,我还可以使用AWS数据库   用于连续数据复制的迁移服务?

     

是的,您可以将AWS数据库迁移服务用于两个一次性数据   迁移到基于RDS和EC2的数据库以及连续数据库   数据复制。 AWS数据库迁移服务将捕获更改   在源数据库上并以事务一致的方式应用它们   通往目标的方式。可以从您的数据进行连续复制   以AWS为中心到数据库,反之亦然,复制到   数据中心中的数据库来自AWS中的数据库。持续不断   复制也可以在同源或异构之间完成   数据库。对于正在进行的复制,最好使用   多可用区用于高可用性。

如果您不熟悉AWS DMS,请查看官方文档“Getting Started”页面,然后在下面继续。

使用与源相同的架构创建目标数据库,除了这些您不想填充的表和列。

将源数据库和目标数据库与DMS关联后,您将需要创建一个任务来执行迁移,并使用特定的表映射来排除表并删除列。

排除表格

使用规则操作排除创建selection rule,并指定要排除的表。迁移所有表的文档示例,但表名以DMS%开头的表除外:

{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "selection",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "Test",
                "table-name": "DMS%"
            },
            "rule-action": "exclude"
        }
    ]
}

删除行

使用rule-action remove和rule-target创建transformation rule any指定要删除的列的模式,表和列名称。以下示例(也来自文档)从test.Actor表中删除以字符col开头的所有列:

{
    "rules": [{
        "rule-type": "selection",
        "rule-id": "1",
        "rule-name": "1",
        "object-locator": {
            "schema-name": "test",
            "table-name": "%"
        },
        "rule-action": "include"
    }, {
        "rule-type": "transformation",
        "rule-id": "2",
        "rule-name": "2",
        "rule-action": "remove-column",
        "rule-target": "column",
        "object-locator": {
            "schema-name": "test",
            "table-name": "Actor",
            "column-name": "col%"
        }
    }]
 }

进一步阅读