【问题标题】:Permissions inheritance on create table partition in postgresql在 postgresql 中创建表分区的权限继承
【发布时间】:2020-01-09 20:00:44
【问题描述】:

我已经设置了特殊权限的分区表:

CREATE TABLE public.paritioned_table (
    _time int8 NULL,
    ...
) PARTITION BY RANGE (_time);

-- 权限

GRANT ALL ON TABLE public.paritioned_table TO someuser;

我有一个创建分区的触发器:

_partition := 'paritioned_table_' || to_char(to_timestamp(_time),'YYYY_MM');

IF NOT EXISTS(SELECT relname FROM pg_class WHERE relname = _partition) THEN
    RAISE NOTICE 'A partition has been created %', _partition;

    select extract(epoch FROM date_trunc('month', to_timestamp(_time))) into _from;
    select extract(epoch FROM date_trunc('month', to_timestamp(_time)) + INTERVAL '1 MONTH') into _to;

    execute 'CREATE TABLE ' || _partition || ' PARTITION OF paritioned_table FOR VALUES FROM (' || _from || ') TO (' || _to || ')';

END IF;

问题是新创建的分区没有继承父故事权限。 所以我的问题 - 创建具有权限继承的分区的最佳做法是什么

【问题讨论】:

    标签: postgresql permissions partitioning


    【解决方案1】:

    使用在每个INSERT 运行的触发器来检查它是否需要创建分区会降低一些性能。另外,如果有人输入 -100000000000 的 _time,您是否希望创建一个分区?

    但是对于您的问题:分区是它们自己的表,并且没有关于继承权限或存储参数的规定。你有两个选择:

    • GRANT 语句添加到您的触发器。

    • 发出ALTER DEFAULT PRIVILEGE 语句,为所有新创建的表设置默认权限(可能仅限于架构)。

    【讨论】:

    • 谢谢劳伦兹。目前在创建分区后添加了 GRANT 语句。
    猜你喜欢
    • 2021-01-26
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    相关资源
    最近更新 更多