【发布时间】:2015-04-25 22:24:52
【问题描述】:
PostgreSQL 中新关系的权限如何工作?
步骤:
- 创建数据库(从用户 postgres)并连接到它
CREATE DATABASE test;
\c test
- 创建具有某些权限的用户站点
CREATE USER site NOCREATEDB NOINHERIT;
GRANT SELECT, UPDATE, INSERT, DELETE, TRUNCATE, REFERENCES ON ALL TABLES IN SCHEMA public TO site;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO site;
- 更改用户 site 的默认权限
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, UPDATE, INSERT, DELETE, TRUNCATE, REFERENCES ON TABLES TO site;
- 创建具有所有权限的用户迁移
CREATE USER migration NOCREATEDB NOINHERIT;
GRANT ALL PRIVILEGES ON DATABASE test TO migration;
- 从用户迁移连接到数据库并创建表
CREATE TABLE test (id serial);
- 从用户站点连接到数据库并从创建的表中选择数据
SELECT * FROM test;
ERROR: permission denied for relation test
但如果我从用户 postgres 创建表,一切正常!
为什么默认权限在这种情况下不起作用?如何为用户 site 授予新表的权限?
【问题讨论】:
标签: postgresql