sql - 是否有特定查询可以在 postgressql 中找到 trigger_owner 和 constraint_owner?
问题描述
例如:- 触发器名称可以从 pg_trigger 派生,但该触发器可以由具有访问权限并可以创建触发器的其他用户创建。constraint_name 的类似问题。对于表 emp( user_id varchar(20), emp_name varchar(20), emp_salary integer); 假设 user1 创建此表,user2 创建触发器和约束名称。那么有没有办法知道谁创建了触发器和约束名称,因为在 pg_trigger 表和 information_schema.columns 中,user1 将显示为 trigger_owner 和表所有者。
解决方案
触发器与 PostgreSQL 的权限系统无关,因此不需要记录触发器的创建者/所有者。这同样适用于表上的约束。过程/函数需要权限,以便 DBA 可以限制谁调用/运行该过程;触发器只是在对表进行更改时调用过程的东西(因此基本上任何对表具有写访问权限的人都应该有权触发触发器)。
虽然所有权实际上只与权限相关,但如果您想了解创建者以进行审计,我建议您使用%u
标志log_line_prefix
并设置log_statement = ddl
orlog_statement = all
以便您可以查看哪个用户创建了触发器/约束。
推荐阅读
- c# - 在 Grid 列转换器中使用 GridUnitType.Star
- sql - 在存储过程中使用 CASE 语句
- android-studio - Android Studio:手势识别致命错误:找不到“ext/atomicity.h”文件
- java - HashSet 无法使用 instanceof 运算符转换为 String 错误
- javascript - 在 IBM BPM 中动态创建 TW 对象
- eigen - 如何获得置换矩阵在 Eigen3 中交换两行矩阵?
- scala - 在单子上调用“getOrElse”的通用方法
- php - Laravel Eloquent 'where' 查询不适用于给定的 id
- json - 使用 shell 在 JSON 对象中动态添加键值对
- java - 读取大文件的最有效方法