栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

只允许从触发器内插入

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

只允许从触发器内插入

是的,完全有可能。

1.一般不允许
UPDATe
A

我将特权运行:

REVOKE ALL ON TABLE A FROM public;  -- and from anybody else who might have it

这就使得诸如

postgres
忽略这些低限制的超级用户。抓住那些你的触发功能上里面
A
pg_has_role()

IF pg_has_role('postgres', 'member') THEN   RETURN NULL;END IF;

postgres
实际的超级用户在哪里。注意:这也捕获其他超级用户,因为它们是每个角色的成员,甚至其他超级用户也是如此。

您可以采用类似的方式(替代该

REVOKE
方法)来捕获非超级用户。

2.允许
UPDATE
守护程序角色

创建一个非登录角色,该角色可以更新

A

CREATE ROLE a_update NOLOGIN;-- GRANT USAGE ON SCHEMA xyz TO a_update;  -- may be needed, tooGRANT UPDATE ON TABLE A TO a_update;

表上创建触发器的功能

B
C
拥有 此守护进程的作用,并用
SECURITY DEFINER
。细节:

  • 有没有一种方法可以禁用更新/删除,但仍允许触发器执行更新/删除?

添加到的触发功能

A

IF pg_has_role('postgres', 'member') THEN   RETURN NULL;ELSIF pg_has_role('a_update', 'member') THEN   RETURN NEW;END IF;

对于简单的1:1依赖关系,您还可以使用来处理外键约束(附加)

ON UPDATECASCADE



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/612104.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号