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

PostgreSQL 中有哪些钩子函数

140次阅读
没有评论

共计 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字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 亚洲一级黄色片 | 久久精品亚洲中文字幕无码麻豆 | 亚洲精品www久久久久久久软件 | 成人精品一区二区三区中文字幕 | 国产台湾无码av片在线观看 | 国产人碰人摸人爱免费视频 | 国产系列欧美系列日韩系列在线 | 午夜在线观看免费高清在线播放 | 精品国产一二三区 | 国产图片区 | 欧美性猛交久久久乱大交小说 | 色综合久久久无码中文字幕 | 日韩国产欧美成人一区二区影院 | 亚洲老妇色熟女老太 | 综合精品一区 | 91精品国产高清久久久久久 | 免费a级黄色毛片 | 久久精品视频国产 | 亚洲干综合 | 毛片电影免费看 | 狠狠热精品免费视频 | 毛片免费全部无码播放 | 亚洲国产欧美精品一区二区三区 | 日本一区二区三区不卡在线看 | 草草线在成人免费视频 | 国产综合区 | 亚洲欧美日韩一区超高清 | 国产在线精品一区二区中文 | 色诱久久久久综合网ywww | 黄色一级片在线免费观看 | 无码国产伦一区二区三区视频 | 色噜噜亚洲精品中文字幕 | 成人午夜国产福到在线 | 久久久国产乱子伦精品作者 | 久草国产精品 | 中国国语毛片免费观看视频 | 一级做a爱过程免费视频日本 | 国产精品视频男人的天堂 | 免费国精产品wnw2544 | 亚洲狠狠色丁香婷婷综合 | 久久影院视频 |