PostgreSQL 中有哪些钩子函数
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,PostgreSQL 中有哪些钩子函数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、需求删除数据库pg12db时,只能使用pg1
千家信息网最后更新 2025年01月22日PostgreSQL 中有哪些钩子函数
PostgreSQL 中有哪些钩子函数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
一、需求
删除数据库pg12db时,只能使用pg12用户删除,其他用户(包括超级用户)均不能删除此数据库。
二、实现步骤
删除数据库的命令是drop database,属于Utility命令,而PG提供了ProcessUtility_hook钩子可供使用.
实现一个钩子函数,判断SQL语句是否为T_DropdbStmt,如是,则判断数据库名称和用户名称是否匹配,如不匹配,则报错,源码如下:
[pg12@localhost hookdemo_dbrestrict]$ cat hookdemo_dbrestrict.c/* * This is a hook demo. * */#include "postgres.h"#include "miscadmin.h"#include "tcop/utility.h"PG_MODULE_MAGIC;void _PG_init(void);void _PG_fini(void);static char *undroppabledb = "pg12db";static char *hooksuperuser = "pg12";static ProcessUtility_hook_type prev_utility_hook = NULL;static void hookdemodbrestrict_ProcessUtility(PlannedStmt *pstmt, const char *queryString, ProcessUtilityContext context, ParamListInfo params, QueryEnvironment *queryEnv, DestReceiver *dest, char *completionTag){ /* Do our custom process on drop database */ switch(nodeTag(pstmt->utilityStmt)) { case T_DropdbStmt: { DropdbStmt *stmt = (DropdbStmt *)pstmt->utilityStmt; char *username = GetUserNameFromId(GetUserId(),false); /* * only user pg12 can drop pg12db. */ if (strcmp(stmt->dbname, undroppabledb) == 0 && strcmp(username, hooksuperuser) != 0) ereport(ERROR,(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),errmsg("Only superuser \"%s\" can drop database \"%s\"",hooksuperuser,undroppabledb))); break; } default: break; } /*Standard process*/ standard_ProcessUtility(pstmt, queryString, context, params, queryEnv, dest, completionTag);}/* _PG_init */void_PG_init(void){ prev_utility_hook = ProcessUtility_hook; ProcessUtility_hook = hookdemodbrestrict_ProcessUtility;}/* Uninstall */void_PG_fini(void){ ProcessUtility_hook = prev_utility_hook;}[pg12@localhost hookdemo_dbrestrict]$
三、实际效果
创建超级用户superx,使用该用户登录,创建pg12db数据库,删除数据库,报错.
[local:/data/run/pg12]:5120 pg12@testdb=# create user superx with superuser password 'root';CREATE ROLE[local:/data/run/pg12]:5120 pg12@testdb=# \q[pg12@localhost pg122db]$ psql -U superxExpanded display is used automatically.psql (12.2)Type "help" for help.[local:/data/run/pg12]:5120 superx@testdb=# create database pg12db;CREATE DATABASE[local:/data/run/pg12]:5120 superx@testdb=# drop database pg12db;ERROR: Only superuser "pg12" can drop database "pg12db"[local:/data/run/pg12]:5120 superx@testdb=#
关于PostgreSQL 中有哪些钩子函数问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
数据
数据库
用户
钩子
函数
问题
名称
命令
更多
帮助
解答
易行
简单易行
内容
实际
小伙
小伙伴
效果
方法
步骤
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
国家电网网络安全规范
scum进服务器总是掉线
岳阳网络安全实战特训营收费标准
网络安全的安全技术有哪些
灌南智能网络技术
电脑网络技术应用考试成绩
最新的网络技术和应用有哪些
用二维码来表示的数据库
大星教师网络技术考试平台
怎么用数据玩我的世界服务器
色采软件开发工作室
数据库 大表
西安海荣集团软件开发招聘
小年网络安全教育图片
我的世界服务器管理员的家
医院网络安全专题通知
西方网络安全会议
部队如何搞好网络安全
南京哪个学校学软件开发
欧洲数据库着火
网络安全教育 保密上课
为什么很多人用云服务器
数据备份服务器
软件开发中应该需要哪些文档
ZG插件软件开发
it软件开发工作
读取数据库的数据并进行可视化
电竞经理服务器人数
软件开发进度支付账务处理
学生服务器10元一月