postgresql常用创建用户和授权
需求
(1)给用户a创建一个数据库,并且给a用户对这个库有所有权限
(2)给read_a用户对这个数据库有只读权限
步骤
1.创建用户a
2.创建数据库db_a, 并设置owner为a
3.回收默认的public schema create权限
4.设置db_a的public schema 默认的owner 为a
5.创建只读用户read_a
6.用a用户给read_a用户设置默认的权限
7.给read_a用户设置对public schema 查询权限
具体操作如下:
db_test=# create user a with password '1234'; # 1. 创建用户a
CREATE ROLE
db_test=# create database db_a with owner a; # 2. 创建数据库db_a, owner为a
CREATE DATABASE
db_test=# \c db_a;
You are now connected to database "db_a" as user "postgres".
db_a=# revoke create on schema public from public; # 3. 回收默认public create权限, 这样就不是每个人都可以在这里创建表了
REVOKE
db_a=# \dn
List of schemas
Name | Owner
--------+----------
public | postgres
(1 row)
db_a=# alter schema public owner to a; # 4. 设置db_a 的public schema的owner 为a
ALTER SCHEMA
db_a=# \dn
List of schemas
Name | Owner
--------+-------
public | a
(1 row)
db_a=# create user read_a with password '1234'; # 5. 创建只读用户read_a
CREATE ROLE
db_a=# \c - a # 切换到用户a, db_a数据库
You are now connected to database "db_a" as user "a".
db_a=> alter default privileges in schema public grant select on tables to read_a; # 6. 修改默认权限
ALTER DEFAULT PRIVILEGES
db_a=> GRANT USAGE ON SCHEMA public to read_a; # 6.授权read_a 对public schema权限
GRANT
db_a=> GRANT SELECT ON ALL TABLES IN SCHEMA public to read_a; # 授权read_a 对public schema权限
GRANT
db_a=> \ddp
Default access privileges
Owner | Schema | Type | Access privileges
-------+--------+-------+-------------------
a | public | table | read_a=r/a
(1 row)
postgres=> \c db_a # 用a用户创建一个表t2,插入语句,用read_a查询测试一下
You are now connected to database "db_a" as user "a".
db_a=> \dt
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------
public | t1 | table | a
(1 row)
db_a=> create table t2(id int);
CREATE TABLE
db_a=> insert into t2(id) values(1);
INSERT 0 1
db_a=> \c - read_a; # 切换到read_a用户,测试查询t2表
You are now connected to database "db_a" as user "read_a".
db_a=>
db_a=> \dt
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------
public | t1 | table | a
public | t2 | table | a
(2 rows)
db_a=> select * from t2;
id
----
1
(1 row)
分类:
Postgresql
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!