【发布时间】:2017-07-25 00:23:52
【问题描述】:
postgresql 数据库。两个架构1. base_layers 2. how 每个都有自己唯一的登录名(不是超级用户)
我非常简单地尝试从 base_layers 连接 sql 窗口的方式模式中的表中创建 base_layers 模式中的表
我运行这个
GRANT ALL ON SCHEMA base_layers TO how;
create table base_layers.man as
select * from how.hl_boundary
它给了我这个错误
ERROR: permission denied for relation hl_boundary
********** Error **********
ERROR: permission denied for relation hl_boundary
SQL state: 42501
但是,当我通过 postgres SQL 连接窗口运行相同的查询时,它会在 base_layers 架构中正确创建此表...
base_layers 连接 SQL 窗口需要做什么才能从另一个模式创建表
如何架构
-- Schema: how
-- DROP SCHEMA how;
CREATE SCHEMA how
AUTHORIZATION how;
GRANT ALL ON SCHEMA how TO how;
GRANT USAGE ON SCHEMA how TO public;
GRANT ALL ON SCHEMA how TO base_layers;
ALTER DEFAULT PRIVILEGES IN SCHEMA how
GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES
TO base_layers;
base_layers 架构
-- Schema: base_layers
-- DROP SCHEMA base_layers;
CREATE SCHEMA base_layers
AUTHORIZATION base_layers;
GRANT ALL ON SCHEMA base_layers TO base_layers;
GRANT USAGE ON SCHEMA base_layers TO public;
GRANT ALL ON SCHEMA base_layers TO how;
ALTER DEFAULT PRIVILEGES IN SCHEMA base_layers
GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES
TO public;
【问题讨论】:
-
您是在创建这些表之前还是之后运行
ALTER DEFAULT的?该命令不会更改现有表的权限。此外,它仅适用于当前用户创建的表(除非您指定FOR [role]) -
@Nicarus 我在创建表后运行了 alter default
-
那么您需要对现有表运行单独的
GRANT命令,因为ALTER DEFAULT不会影响现有表。 -
这对我有用,在架构中的所有表上授予选择如何 base_layers;
标签: postgresql