在 PostgreSQL 中,“设置权限”通常包含 用户/角色管理、对象权限授权、以及 数据库/模式级别的访问控制。下面按常见场景系统说明。
PostgreSQL 使用 角色(ROLE) 统一管理用户和权限。
-- 可登录的用户
CREATE ROLE username WITH LOGIN PASSWORD 'password';
-- 只读用户
CREATE ROLE readonly_user WITH LOGIN PASSWORD 'password';
-- 超级用户
CREATE ROLE admin WITH SUPERUSER LOGIN PASSWORD 'password';
ALTER ROLE username WITH PASSWORD 'newpassword';
ALTER ROLE username CREATEDB;
ALTER ROLE username NOLOGIN;
DROP ROLE username;
GRANT CONNECT ON DATABASE mydb TO username;
GRANT CREATE ON DATABASE mydb TO username;
-- 使用 schema 的权限
GRANT USAGE ON SCHEMA public TO username;
-- 在 schema 中创建对象
GRANT CREATE ON SCHEMA public TO username;
-- 单表
GRANT SELECT, INSERT ON TABLE users TO username;
-- 所有表
GRANT SELECT ON ALL TABLES IN SCHEMA public TO username;
-- 序列(自增 ID)
GRANT USAGE, SELECT ON SEQUENCE users_id_seq TO username;
REVOKE INSERT ON users FROM username;
新创建的表不会自动继承之前的 GRANT
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO readonly_user;
只对 之后创建的对象 生效。
CREATE ROLE readonly_user WITH LOGIN PASSWORD '123456';
GRANT CONNECT ON DATABASE mydb TO readonly_user;
GRANT USAGE ON SCHEMA public TO readonly_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO readonly_user;
-- 表权限
\dp
-- 角色属性
\du
-- 某表权限
SELECT * FROM information_schema.role_table_grants
WHERE grantee = 'username';
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
CREATE POLICY user_only ON orders
FOR SELECT
USING (user_id = current_user_id());
如果你有具体需求(如:
✅ 只读用户
✅ 读写分离
✅ Spring Boot 连接权限
✅ 多租户权限设计)
可以告诉我,我可以直接给你一套 SQL。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。