在使用oceanbase数据库的mysql模式时,我新建了一个租户,其中有两个数据库A和B,是否可通过白名单的方式,限制可以访问A库的数据但是不能访问B库的数据,限制可以访问B库的数据但是不能访问A库的数据?
2 个赞
在 OceanBase 数据库的 MySQL 模式下,可以通过设置租户级别的白名单来控制哪些客户端可以访问当前租户。然而,白名单控制是针对整个租户的,而不是针对单个数据库。因此,无法直接通过白名单限制访问特定数据库。
但是,可以通过以下方式实现更细粒度的权限控制:
-
创建不同的用户:为数据库 A 和 B 创建不同的用户,并分别为这些用户授予访问相应数据库的权限。
-
设置用户权限:确保用户 A 只有访问数据库 A 的权限,用户 B 只有访问数据库 B 的权限。可以使用 SQL 语句来实现这一点,例如:
-- 创建用户 A 并授予访问数据库 A 的权限
CREATE USER 'user_a'@'%' IDENTIFIED BY 'password_a';
GRANT ALL PRIVILEGES ON A.* TO 'user_a'@'%';
-- 创建用户 B 并授予访问数据库 B 的权限
CREATE USER 'user_b'@'%' IDENTIFIED BY 'password_b';
GRANT ALL PRIVILEGES ON B.* TO 'user_b'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
通过这种方式,可以实现用户 A 只能访问数据库 A,用户 B 只能访问数据库 B。
关于白名单的具体设置方法,可以参考官方文档 网络安全访问控制。
具体信息可参考以下文档:
1 个赞
OBProxy的路由规则可以通过设置不同的参数来实现更细粒度的控制,例如通过设置proxy_route_policy
来指定弱读请求的路由策略,其值可以为FOLLOWER_FIRST
或FOLLOWER_ONLY
,还可以通过alter proxyconfig set obproxy_read_consistency=1;
来设置弱一致性读。另外,针对事务路由是否受到只读语句影响,可通过设置ob_proxy_readonly_transaction_routing_policy
来实现更细粒度的控制。
具体信息可参考以下文档:
- 如何路由到只读型副本查询数据
- 读写分离
- 路由策略路由
- ob_proxy_readonly_transaction_routing_policy
- 配置项总览
白名单只有租户级别的和ODP级别的,没有database级别的名单
创建两个用户,分别授权两个db的权限就可以吧!