在这篇博客中,我将讨论复制的用例。我们希望提高复制数据的能力,并将复制安全限制为基于行的事件,其中我们无法控制源。
从MySQL 8.0.18开始,副本在处理复制事务时不具有检查功能。它这样做是为了执行来自上游的所有指令。副本必须对被复制的流施加数据访问限制,因为在某些配置中,更改可能会越过分隔源和副本的安全屏障。在这种情况下,在更受限的安全上下文中实现上游更改对于需要来自多个独立数据库的特权控制聚合数据的组织是有益的。
在MySQL 8.0.18中,复制通道中引入了一个新的特性PRIVILEGE_CHECKS_USER。当使用PRIVILEGE CHECKS USER帐户时,复制区域通道可以更好地防止未经授权或无意使用特权或不良操作。
默认情况下,复制线程使用为复制配置的MySQL用户帐户的权限。如果用户帐户拥有复制所不需要的特权,例如SUPER特权或执行任意SQL语句的能力,则可能会带来安全风险。通过将PRIVILEGE_CHECKS_USER设置为具有有限权限的单独用户帐户,可以降低未经授权访问或恶意攻击的风险。复制线程将使用PRIVILEGE_CHECKS_USER帐户的有限特权,这有助于防止执行未经授权的SQL语句或操作敏感数据。
PRIVILEGE CHECKS USER在多源复制中有助于仔细收集来自不同源的数据。
在副本上配置用户
|
1
2
3.
4
5
6
7
8
9
10
11
12
13
14
15
|
mysql
>
停止
副本
;
mysql
>
集
SQL_LOG_BIN=0
;
mysql
>
创建
用户
repl
;
mysql
>
格兰特
REPLICATION_APPLIER
,
SESSION_VARIABLES_ADMIN
,
创建
,
插入
,
删除
,
更新
在
*.*
来
repl
;
mysql
>
集
SQL_LOG_BIN=1
;
mysql
>
改变
复制
源
来
PRIVILEGE_CHECKS_USER
=
repl
为
通道
“channel1”
;
mysql
>
开始
副本
;
1
行
在
集
(
0.00
证券交易委员会
)
|
限制
- 的SESSION_VARIABLES_ADMIN权限的子集SYSTEM_VARIABLES_ADMIN而且超级特权。如果复制提供程序不可靠,ADMIN可能会带来安全风险。
- 可能会注意到很少的性能问题。
- 如果通道由于权限检查失败而终止,则消息将记录在错误文件中。
MySQL 8.0.19中添加了另一个特性REQUIRE ROW FORMAT,将复制限制为基于行的复制事件。如果设置了“REQUIRE ROW FORMAT”,复制区域通道将只接受基于行的复制事件。如果启用了REQUIRE ROW FORMAT,则源服务器上需要基于行的二进制日志记录(binlog FORMAT =ROW)。
配置REQUIRE_ROW_FORMAT
|
1
2
3.
4
5
6
7
|
mysql
>
停止
副本
;
mysql
>
改变
复制
源
来
REQUIRE_ROW_FORMAT
=
1
;
mysql
>
开始
副本
;
1
行
在
集
(
0.00
证券交易委员会
)
|
在复制区域通道中启用此新功能后,将检查接收和实现的所有事务,并且不允许执行以下操作:
(在遇到任何这些事件时,复制将失败并停止。)
- 记录基于语句的复制的DML
- 创建或删除临时表:禁止复制临时表的原因是,它们可能包含不打算在其生命周期之后持久保存的敏感数据。例如,临时表可能包含用于计算税收或费用的敏感客户数据,但一旦计算完成,这些数据就可能被删除。如果将此临时数据复制到副本,则可能容易受到暴露或操纵。
- LOAD DATA事件:禁止复制LOAD DATA指令的原因是从文件中加载的数据可能是明文且未加密的。当使用SQL语句将数据加载到数据库中时,可以在插入之前对其进行加密,以防止未经授权的访问或泄露。但是,当使用LOAD data加载数据时,它不会自动加密,并且可能容易被篡改或拦截。
总结
使用PRIVILEGE_CHECKS_USER和require_row_format可以进一步提高MySQL复制环境的安全性。
如前所述,PRIVILEGE_CHECKS_USER可以限制复制线程所需的特权。通过将PRIVILEGE_CHECKS_USER设置为具有有限权限的单独用户帐户,可以降低未经授权访问的风险。
另一方面,require_row_format可以用来确保InnoDB存储引擎中的表使用ROW格式,这是最安全的复制选项。当require_row_format设置为ON时,MySQL将要求所有使用InnoDB存储引擎的表都使用ROW格式。这有助于确保正确处理复制事件,并有助于防止数据不一致。
通过组合PRIVILEGE_CHECKS_USER和require_row_format,您可以创建一个更安全的复制环境。复制线程将使用PRIVILEGE_CHECKS_USER帐户的有限权限,而InnoDB存储引擎中的表将使用安全ROW格式。这有助于防止对敏感数据或操作的未经授权的访问,并降低复制期间数据不一致的风险。
需要注意的是,使用PRIVILEGE_CHECKS_USER和require_row_format时应该谨慎,因为更改这些变量可能会对复制环境的性能和功能产生影响。建议在生产环境中实现更改之前,先在开发或测试环境中测试更改。
雷竞技下载官网Percona Distribution for MySQL是最完整、稳定、可扩展和安全的开源MySQL解决方案,为您最关键的业务应用程序提供企业级数据库环境……而且它是免费使用的!
现在就试雷竞技下载官网试MySQL的Percona发行版吧!






