PostgreSQL创建只读用户

这篇博客介绍了如何在PostgreSQL中创建用户并设置密码,将用户默认事务设为只读,赋予用户查看public模式下所有表的权限,允许用户连接特定数据库,以及查看表和序列的权限。详细步骤包括使用`createuser`命令创建用户,`alteruser`修改用户属性,以及`grant`命令授予不同级别的权限。

创建用户及指定密码:

1

create user zhangyou with encrypted password '123456';

设置用户默认事务只读:

1

alter user zhangyou set default_transaction_read_only=on;

赋予用户权限,查看public模式下所有表:

1

2

grant usage on schema public to zhangyou;

alter default privileges in schema public grant select on tables to zhangyou;

赋予用户连接数据库权限:

1

grant connect on database test to zhangyou;

切换到指定数据库:

1

\c test 

赋予用户表、序列查看权限:

1

2

3

GRANT USAGE ON SCHEMA public to zhangyou;

GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO zhangyou;

GRANT SELECT ON ALL TABLES IN SCHEMA public TO zhangyou;

<think>好的,我需要帮助用户PostgreSQL创建只读用户。首先,我应该回忆相关的步骤,并确保步骤正确。根据用户提供的引用,创建只读用户通常涉及创建角色、授予连接权限、赋予模式中的表选择权限,以及设置默认权限。 首先,用户需要使用超级用户登录,比如postgres。然后创建用户,设置密码。接下来,授予该用户数据库的连接权限,这一步可能容易被忽略,但很重要,否则用户无法连接数据库。之后,需要授予用户对现有表的SELECT权限,可能需要针对每个模式执行GRANT SELECT命令,特别是public模式。此外,设置默认权限可以确保新创建的表自动继承只读权限,这对未来维护有帮助。还需要注意,如果数据库有多个模式,需要为每个模式重复授权。可能还需要撤销用户的写权限,比如INSERT、UPDATE、DELETE,以确保只读用户的问题可能还涉及如何测试这个只读用户,所以建议用户创建完成后进行连接测试,并尝试执行写操作来验证权限是否生效。 需要检查是否有遗漏的步骤,比如是否要授予USAGE权限在模式上,否则用户可能无法访问模式中的表。引用中提到要使用GRANT USAGE ON SCHEMA,这也是关键的一步。另外,是否需要设置密码加密方式?可能取决于PostgreSQL的版本,但用户提供的示例中没有提到,可能可以忽略。最后,是否需要重启服务?通常不需要,权限变更即时生效。 现在需要将这些步骤整理成清晰的中文回答,结构分明,并生成相关问题。确保使用正确的LaTeX格式,比如用$...$包裹行内代码,独立公式用$$...$$,但这里可能更多是代码块。需要引用提供的引用资料,比如引用[1]到[4],并在适当的位置标注引用标记。同时,生成的相关问题应该与创建只读用户相关,比如权限管理、权限回收、多模式处理等。</think>### 如何在 PostgreSQL创建只读用户 以下是创建只读用户的具体步骤和权限设置: --- #### **1. 以超级用户身份登录** 使用 `psql` 或客户端工具登录到 PostgreSQL 数据库: ```bash psql -U postgres -d your_database ``` (将 `your_database` 替换为实际数据库名) --- #### **2. 创建只读用户** 创建用户并设置密码: ```sql CREATE ROLE read_only_user WITH LOGIN PASSWORD 'your_password' NOSUPERUSER NOCREATEDB NOCREATEROLE; ``` - `NOSUPERUSER`、`NOCREATEDB`、`NOCREATEROLE` 确保用户无管理权限[^1][^3]。 --- #### **3. 授予连接权限** 允许用户连接到目标数据库: ```sql GRANT CONNECT ON DATABASE your_database TO read_only_user; ``` --- #### **4. 授予模式访问权限** 授予用户对 `public` 模式(或其他指定模式)的 `USAGE` 权限: ```sql GRANT USAGE ON SCHEMA public TO read_only_user; ``` --- #### **5. 授予表查询权限** 授予对现有表的 `SELECT` 权限: ```sql GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only_user; ``` - 若需覆盖所有模式,需为每个模式重复此命令[^2][^4]。 --- #### **6. 设置默认权限(可选)** 确保新创建的表自动继承只读权限: ```sql ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO read_only_user; ``` --- #### **7. 撤销写权限(可选)** 若需严格限制,可显式撤销写权限: ```sql REVOKE INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public FROM read_only_user; ``` --- #### **8. 验证权限** 测试用户连接并验证操作: ```bash psql -U read_only_user -d your_database ``` 尝试执行 `SELECT` 查询和写操作(如 `INSERT`),验证后者是否被拒绝。 --- ### 关键注意事项 1. **多模式处理**:若数据库包含多个模式(如 `schema1`, `schema2`),需为每个模式重复步骤 4-5[^4]。 2. **权限继承**:默认权限仅对后续新建表生效,已有表需手动授权[^2]。 3. **安全性**:通过 `REVOKE` 显式限制敏感操作更可靠。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值