CockroachDB是否支持只读模式?能否以只读模式连接避免写入?
CockroachDB 只读模式相关问题解答
1. 是否支持只读模式
CockroachDB支持实现集群级的只读状态,你可以通过设置集群配置项开启:
- 执行
SET CLUSTER SETTING server.read_only = true;命令,整个集群会切换为只读状态,所有写入操作(包括DDL、DML)都会被直接拒绝。 - 需要恢复正常读写时,执行
SET CLUSTER SETTING server.read_only = false;即可。
注意:这个设置是集群全局生效的,会影响所有连接和用户。
2. 如何以只读模式连接,确保无法执行写入操作
如果不需要全局只读,仅需限制单个连接或用户的写入权限,可通过以下两种方式实现:
创建只读权限用户:
新建一个仅拥有SELECT权限的用户,示例命令如下:CREATE USER readonly_user WITH PASSWORD 'secure_password'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user; -- 为后续新建的表自动赋予只读权限 ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT TO readonly_user;使用该用户连接后,任何写入操作(INSERT、UPDATE、DELETE、CREATE等)都会因权限不足被拒绝。
会话级只读设置:
连接后执行SET TRANSACTION READ ONLY;,该会话内的所有事务都会被限制为只读。如果需要让连接默认启用该设置,可以在连接字符串中添加参数,示例如下:cockroach sql --url 'postgresql://user:pass@host:port/db?options=--transaction-read-only'这种方式下,即使用户本身拥有写入权限,当前会话内也无法执行写入操作。
内容的提问来源于stack exchange,提问作者alyshan
相关产品推荐
相关产品推荐

