postgresql数据 设置只读用户

该文章详细介绍了如何在PostgreSQL中创建一个只读用户,并逐步讲解了设置默认只读事务、授予特定模式使用权限以及查看和赋予表的SELECT权限的过程。主要步骤包括创建用户、开启只读事务、授权模式使用权以及分配表的查看权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录


前言

按四步走

--1 创建用户
CREATE USER reado WITH ENCRYPTED PASSWORD 'reado';

--2 开启只读事务
alter user reado set default_transaction_read_only=on;

-- 3 授予特定模式的使用权限
GRANT USAGE ON SCHEMA public, common, espc TO reado;

GRANT USAGE ON SCHEMA dimension TO reado;

GRANT USAGE ON schema unified_data.dimension  TO reado;
<think>好的,我现在需要帮助用户PostgreSQL创建一个查询用户用户之前已经问过如何创建用户,现在具体想知道如何创建具有查询权限的用户,也就是只读用户。我需要结合之前的引用来给出正确的步骤。 首先,根据引用[1],创建用户的基本命令是CREATE USER,所以第一步应该是用超级用户登录,执行CREATE USER来创建用户,比如设定用户名和密码。这部分应该是正确的,但用户需要的是查询权限,所以不能只有创建用户,还需要赋予权限。 然后看引用[2]和[3],里面提到了创建只读用户的步骤。引用[2]中提到需要设置default_transaction_read_only为on,这样可以确保用户的事务是只读的,防止写操作。同时还需要授予连接数据库的权限,比如GRANT CONNECT ON DATABASE。之后,还需要切换到目标数据库,授予SELECT权限在特定schema下的所有表,比如GRANT SELECT ON ALL TABLES IN SCHEMA public TO用户。 另外,引用[3]提到可能需要为每个schema重复授权,如果用户需要访问多个schema的话。但通常默认是public模式,所以这里可能只需要处理public。 所以综合步骤应该是: 1. 使用超级用户(如postgres)登录,创建用户设置密码。 2. 设置用户的默认事务为只读,防止写操作。 3. 授予用户对目标数据库的连接权限。 4. 切换到目标数据库,授予该用户在public模式下的SELECT权限。 5. 如果需要访问其他模式,重复授权步骤。 另外,需要注意在PostgreSQL中,GRANT SELECT ON ALL TABLES只会影响现有的表,新创建的表需要重新授权,或者使用默认权限ALTER DEFAULT PRIVILEGES来设置未来的权限。这可能是一个进阶步骤,但用户的问题可能暂时不需要,不过可以提到这点作为优化。 验证步骤:用新用户登录,尝试查询表,若成功则正确;尝试插入数据,应该被拒绝。 现在需要将这些步骤整理成清晰的指导,分步骤说明,并确保命令正确。同时要使用中文,结构清晰,可能还要注意用户是否有使用特定版本的PostgreSQL,比如引用中提到的是PostgreSQL15,但步骤是否通用?比如设置default_transaction_read_only可能在旧版本中是否有效?不过根据官方文档,这个参数应该是可用的。 最后,生成相关问题,比如如何限制用户只能访问特定表,或如何处理新创建的表权限等。</think>### 分步说明 在 PostgreSQL创建查询用户(即只读用户)需通过以下步骤实现: --- #### **1. 使用超级用户登录并创建用户** 以管理员身份(如 `postgres`)登录数据库后,执行以下 SQL 创建用户: ```sql -- 创建用户设置密码 CREATE USER query_user WITH ENCRYPTED PASSWORD 'your_password'; ``` --- #### **2. 配置用户只读属性** 通过修改用户参数强制限制为只读事务: ```sql -- 设置默认事务为只读模式(禁止写操作) ALTER USER query_user SET default_transaction_read_only = ON; ``` --- #### **3. 授予数据库连接权限** 允许用户连接到目标数据库(例如 `your_database`): ```sql -- 授予连接权限 GRANT CONNECT ON DATABASE your_database TO query_user; ``` --- #### **4. 切换到目标数据库并授予查询权限** 切换到需要授权的数据库后,授予用户对指定模式(如 `public`)下所有表的 `SELECT` 权限: ```sql -- 进入目标数据库(例如 your_database) \c your_database -- 授予对现有表的查询权限 GRANT SELECT ON ALL TABLES IN SCHEMA public TO query_user; -- (可选)设置未来新建表的默认查询权限 ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO query_user; ``` - **注意**:`ALTER DEFAULT PRIVILEGES` 确保未来新建的表自动继承查询权限[^3]。 --- #### **5. 验证权限** 使用新用户登录并测试权限: ```bash psql -U query_user -d your_database ``` - **验证读操作**: ```sql SELECT * FROM your_table LIMIT 1; ``` - **验证写操作**(应失败): ```sql INSERT INTO your_table VALUES (...); ``` --- ### 关键点总结 | 步骤 | 作用 | 依赖权限 | |------|------|----------| | 创建用户 | 定义用户身份和密码 | 超级用户权限[^1] | | 设置只读事务 | 防止意外写入 | 用户参数修改权限[^2] | | 授予连接权限 | 允许访问数据库 | `GRANT CONNECT` 权限[^2] | | 授予查询权限 | 允许读取数据 | 表所有者或超级用户权限[^3] | --- ### 相关问题 1. 如何限制用户仅能访问特定表而非所有表? 2. 为什么新建表后只读用户无法查询?如何自动继承权限? 3. 如何撤销用户的查询权限? 4. PostgreSQL 中如何创建具有只读视图权限的用户? [^1]: PostgreSQL 用户数据库创建流程 [^2]: postgresql15 创建只读用户 [^3]: postgresql创建只读权限的用户
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qwecxzz

鸡腿

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值