PostgreSQL 中有哪些钩子函数
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,PostgreSQL 中有哪些钩子函数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、需求删除数据库pg12db时,只能使用pg1
千家信息网最后更新 2024年09月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安全错误
数据库的锁怎样保障安全
荆州计算机软件开发企业
静安区网络软件开发程序
暗黑2重制pc版服务器连接不上
淮南工程管理软件开发公司哪家好
上海期智研究院机房服务器采购
陕西浪潮服务器虚拟化操作云主机
服务器行业基础知识
南京智力网络技术有限公司
服务器怎么造的
服务器不能解压压缩包
浙江服务器代理商
数据库中显示的复选框作用
数据库使用库代码
广州旺青网络技术公司
两台服务器中转vpn
海洋生物博物数据库
sr588服务器raid1
360在网络安全方面实力如何
网络安全维护管理员穿的衣服
网络安全等级划分为几个
富士通和IBM服务器
四川项目软件开发报价
网络安全学习难不难
互联网技术属于科技发明吗
为什么要用网络服务器
医院设备网络安全标准
上海系统软件开发报价
watch显示服务器连接有误
网络安全法何时实施的
沃达丰网络安全管理