postgresql|数据库|只读用户的创建和删除(备忘)

bash 复制代码
CREATE USER read_only WITH PASSWORD '密码'
-- 连接到xxx数据库
\c xxx
-- 授予对xxx数据库的只读权限
GRANT CONNECT ON DATABASE xxx TO read_only;
GRANT USAGE ON SCHEMA public TO read_only;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO readonly_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO read_only;
ALTER DEFAULT PRIVILEGES FOR USER read_only GRANT SELECT, USAGE ON SEQUENCES TO read_only;
ALTER DEFAULT PRIVILEGES FOR USER read_only GRANT  EXECUTE ON FUNCTIONS TO read_only;

                        


-- 连接到xxxdata数据库
\c xxxdata
-- 授予对xxxdata数据库的只读权限
GRANT CONNECT ON DATABASE xxxdata TO read_only;
GRANT USAGE ON SCHEMA public TO read_only;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO read_only;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO readonly_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO read_only;
ALTER DEFAULT PRIVILEGES FOR USER read_only GRANT SELECT, USAGE ON SEQUENCES TO read_only;
ALTER DEFAULT PRIVILEGES FOR USER read_only GRANT  EXECUTE ON FUNCTIONS TO read_only;

说明:GRANT CONNECT ON DATABASE xxx TO read_only; 这里是显式的指定连接哪个数据库,read_only 是用户名称

GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; public是默认的模式,如果不是,需要显式的指定哪个模式

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO read_only; 是让后续在此模式创建的对象仍然有查询权限

删除read_only 用户

首先,直接删除必定失败,如果目前这个模式下有表的情况下

bash 复制代码
DROP user read_only

报错提示如下:

bash 复制代码
DROP user read_only
> ERROR:  role "read_only" cannot be dropped because some objects depend on it
DETAIL:  privileges for schema public
privileges for database test
privileges for table teachers
privileges for table courses
privileges for default privileges on new relations belonging to role postgres in schema public

根据报错提示逐条解决依赖问题就可以彻底删除此用户了,SQL如下:

bash 复制代码
REVOKE ALL PRIVILEGES on DATABASE test FROM read_only
REVOKE ALL PRIVILEGES on SCHEMA "public" FROM read_only
REVOKE ALL PRIVILEGES ON ALL tables IN SCHEMA "public" FROM read_only
ALTER DEFAULT PRIVILEGES in SCHEMA PUBLIC REVOKE SELECT ON tables FROM read_only

删除用户其实主要就是根据日志来删除,哪留的有关联权限,删除掉就可以了,没什么好说的

相关推荐
小二·1 小时前
RAG + 向量数据库实战:ChromaDB / Milvus / FAISS 选型与性能横评
数据库·milvus·faiss
矜持的左手1 小时前
电子小白的枕边书:电子学(The Art of Electronics)
数据库·restful
吴声子夜歌1 小时前
Redis 5.x——布隆过滤器
数据库·redis·缓存
Albert Tan2 小时前
Oracle EBS 外部应用节点-OOM
oracle·oracle ebs
蓝天下的守望者2 小时前
svt_apb_if里的宏定义问题
运维·服务器·数据库
上海云盾-小余2 小时前
网站频繁遭遇 SQL 注入溯源与原生漏洞修复全流程总结
数据库·sql
数据库小学妹2 小时前
国家区域医疗中心国产化改造实战:数据库选型、跨院区数据互通与踩坑经验
数据库·国产数据库·数据库选型·医疗信息化·信创数据库·医疗信创
AllData公司负责人4 小时前
数据库同步平台|AIIData数据中台实现OceanBase、达梦数据库、OpenGauss、人大金仓、Hive、TDengine 一键接入Doris
大数据·数据库·hive·mysql·oceanbase·tdengine
2603_954708314 小时前
全维度容错设计,打造微电网安全运行屏障
服务器·网络·数据库·人工智能·分布式·安全