在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

PostgreSQL 中有哪些钩子函数

117次阅读
没有评论

共计 2288 个字符,预计需要花费 6 分钟才能阅读完成。

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 */
_PG_init(void)
 prev_utility_hook = ProcessUtility_hook;
 ProcessUtility_hook = hookdemodbrestrict_ProcessUtility;
/* Uninstall */
_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 superx
Expanded 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 中有哪些钩子函数问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计2288字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 欧美色综合94亚洲 | 久久精品福利视频在线观看 | 一道本在线免费观看 | 免费费很色视频大片 | 天堂视频在线免费观看 | 欧美老妇交乱视频在线观看 | 日本人一级毛片视频 | 一本久久精品一区二区 | 精品久久香蕉国产线看观看亚洲 | 午夜福利试看120秒体验区 | 中文国产成人精品久久水 | 日本一级片在线观看 | 成人看片黄a免费看那个网址 | 69天堂人成无码麻豆免费视频 | 2020国产成人精品视频 | 欧美在线一区二区三区不卡 | 欧美日韩日本国产 | 一个人免费观看在线视频www | 亚洲精品第1页 | 久久青青草原精品国产软件 | 久久99久久99小草精品免视看 | 一区二区亚洲精品国产精华液 | 亚洲成年人在线观看 | 欧美特级一级毛片 | 久久精品国产在热久久2019 | 午夜国产福利视频 | 正在播放老肥熟妇露脸 | 嫩草影院永久在线 | 99精品视频在线观看免费播放 | 亚洲欧美日韩精品专区卡通 | 免费的a级片 | 免费大香伊蕉在人线国产 | 18成人免费观看软件大全 | 国产91精品不卡在线 | 大地资源网在线观看免费官网 | 亚洲色成人网一二三区 | 欧美色88| 亚洲精品98久久久久久中文字幕 | 欧美国产一区二区三区激情无套 | 91久久国产青草亚洲 | 20201精品极品国产色在线 |