PostgreSQL创建只读用户权限


-- 创建角色:
create role read_only;
comment on role read_only is '只读角色【继承】';

-- 不能创建表,不能修改数据,添加数据
alter role read_only set default_transaction_read_only=on;


-- 给角色授权访问数据库:
grant connect on database   alcohol    to  read_only;
grant connect on database   bigdata    to  read_only;
grant connect on database   message  to  read_only;
-- 或者:
alter role read_only in database alcohol set default_transaction_read_only to true;
alter role read_only in database bigdata set default_transaction_read_only to true;
alter role read_only in database postgres set default_transaction_read_only to true;

-- 给角色授权访问数据库:
grant connect on database   alcohol  to  bp_lxj;
grant connect on database   message  to  bp_lxj;
grant connect on database   postgres to  bp_lxj;
-- 或者
alter role bp_lxj in database alcohol set default_transacti

<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` 显式限制敏感操作更可靠。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值