非super user管理会话
在gp中取消或者中断某个用户的超长时间或者SQL存在问题的会话。假设无法拥有超级用户将无法运行该类操作。
首先我们创建两个用户t1、t2,而且使用t1登录到数据库。
[gpadmin@wx60 ~]$ psql gtlions
psql (8.2.15)
Type "help" for help. gtlions=# select version();
version
------------------------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 8.2.15 (Greenplum Database 4.2.7.2 build 1) on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.4.2 compiled on Feb 25 2014 18:05:04
(1 row) gtlions=# \du
List of roles
Role name | Attributes | Member of
-----------+-----------------------------------+-----------
gpadmin | Superuser, Create role, Create DB | gtlions=# \dn
List of schemas
Name | Owner
--------------------+---------
gp_toolkit | gpadmin
information_schema | gpadmin
pg_aoseg | gpadmin
pg_bitmapindex | gpadmin
pg_catalog | gpadmin
pg_toast | gpadmin
public | gpadmin
(7 rows) gtlions=# create user t1 ;
NOTICE: resource queue required -- using default resource queue "pg_default"
CREATE ROLE
gtlions=# create user t2;
NOTICE: resource queue required -- using default resource queue "pg_default"
CREATE ROLE
gtlions=# \c gtlions t1
You are now connected to database "gtlions" as user "t1".
接下来我们使用用户t2登录到数据库。检查当前会话并尝试取消或者中断用户t1的会话。
[gpadmin@wx60 ~]$ psql -U t2 gtlions
psql (8.2.15)
Type "help" for help. gtlions=> select * from pg_stat_activity ;
datid | datname | procpid | sess_id | usesysid | usename | current_query | waiting | query_start | backend_start
| client_addr | client_port | application_name | xact_start
-------+---------+---------+---------+----------+---------+----------------------------------+---------+-------------------------------+-------------------------------
+-------------+-------------+------------------+-------------------------------
16992 | gtlions | 3395 | 13 | 25881 | t2 | select * from pg_stat_activity ; | f | 2014-10-11 09:25:56.197394+08 | 2014-10-11 09:25:43.293684+08
| | -1 | psql | 2014-10-11 09:25:56.197394+08
16992 | gtlions | 3384 | 12 | 25880 | t1 | <insufficient privilege> | | |
| | | psql |
(2 rows) gtlions=> select pg_cancel_backend(3384);
ERROR: must be superuser to signal other server processes
gtlions=>
会发现非超级用户无法运行取消或者中断其它用户的会话操作。
解决的方法是自己定义一个函数,并授权给t2用户运行权限。这样就能够实现上述操作了。
create or replace function session_mgr(procpid integer, opertype character)
returns boolean
as
$BODY$
declare
ret boolean;
begin
if opertype = 'c' then
ret := (select pg_catalog.pg_cancel_backend(procpid));
elsif opertype = 'k' then
ret := (select pg_catalog.pg_terminate_backend(procpid));
end if;
return ret;
end;
$BODY$
LANGUAGE plpgsql security definer; gtlions=# grant execute on function session_mgr(integer, character) to t2;
GRANT
gtlions=# \c gtlions t1
You are now connected to database "gtlions" as user "t1".
gtlions=>
接着使用用户t2进行相关操作。
[gpadmin@wx60 ~]$ psql -U t2 gtlions
psql (8.2.15)
Type "help" for help. gtlions=> select * from pg_stat_activity ;
datid | datname | procpid | sess_id | usesysid | usename | current_query | waiting | query_start | backend_start
| client_addr | client_port | application_name | xact_start
-------+---------+---------+---------+----------+---------+----------------------------------+---------+-------------------------------+-------------------------------
+-------------+-------------+----------------------------+-------------------------------
16992 | gtlions | 4034 | 19 | 25881 | t2 | select * from pg_stat_activity ; | f | 2014-10-11 09:48:53.767859+08 | 2014-10-11 09:48:51.285594+08
| | -1 | psql | 2014-10-11 09:48:53.767859+08
16992 | gtlions | 3678 | 15 | 10 | gpadmin | <insufficient privilege> | | |
| | | pgAdmin III - ????? ? ??? |
16992 | gtlions | 3704 | 16 | 10 | gpadmin | <insufficient privilege> | | |
| | | pgAdmin III - ? ? ?????? ? ? ?? |
16992 | gtlions | 4023 | 18 | 25880 | t1 | <insufficient privilege> | | |
| | | psql |
(4 rows)
gtlions=> select session_mgr(4023,'c');
session_mgr
-------------
t
(1 row) gtlions=> select * from pg_stat_activity ;
datid | datname | procpid | sess_id | usesysid | usename | current_query | waiting | query_start | backend_start
| client_addr | client_port | application_name | xact_start
-------+---------+---------+---------+----------+---------+----------------------------------+---------+-------------------------------+-------------------------------
+-------------+-------------+----------------------------+-------------------------------
16992 | gtlions | 4034 | 19 | 25881 | t2 | select * from pg_stat_activity ; | f | 2014-10-11 09:52:03.279186+08 | 2014-10-11 09:48:51.285594+08
| | -1 | psql | 2014-10-11 09:52:03.279186+08
16992 | gtlions | 4065 | 20 | 10 | gpadmin | <insufficient privilege> | | |
| | | pgAdmin III - ? ? ??? ?? ??? ? ? |
16992 | gtlions | 3678 | 15 | 10 | gpadmin | <insufficient privilege> | | |
| | | pgAdmin III - ?????? ??? |
16992 | gtlions | 3704 | 16 | 10 | gpadmin | <insufficient privilege> | | |
| | | pgAdmin III - ??? ?? ?? ??? ?? |
16992 | gtlions | 4023 | 18 | 25880 | t1 | <insufficient privilege> | | |
| | | psql |
(5 rows) gtlions=> select session_mgr(4023,'k');
session_mgr
-------------
t
(1 row) gtlions=> select * from pg_stat_activity ;
datid | datname | procpid | sess_id | usesysid | usename | current_query | waiting | query_start | backend_start
| client_addr | client_port | application_name | xact_start
-------+---------+---------+---------+----------+---------+----------------------------------+---------+-------------------------------+-------------------------------
+-------------+-------------+----------------------------+-------------------------------
16992 | gtlions | 4034 | 19 | 25881 | t2 | select * from pg_stat_activity ; | f | 2014-10-11 09:52:28.473137+08 | 2014-10-11 09:48:51.285594+08
| | -1 | psql | 2014-10-11 09:52:28.473137+08
16992 | gtlions | 4065 | 20 | 10 | gpadmin | <insufficient privilege> | | |
| | | pgAdmin III - ? ??? ? ? ?????? |
16992 | gtlions | 3678 | 15 | 10 | gpadmin | <insufficient privilege> | | |
| | | pgAdmin III - ? ? ? ??? ?? ? |
16992 | gtlions | 3704 | 16 | 10 | gpadmin | <insufficient privilege> | | |
| | | pgAdmin III - ? ??????????? |
16992 | gtlions | 4189 | 21 | 25880 | t1 | <insufficient privilege> | | |
| | | psql |
(5 rows) gtlions=>
最后检查下t1当前进程。
gtlions=> select version();
FATAL: terminating connection due to administrator command
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.
-EOF-
非super user管理会话的更多相关文章
- Shiro经过Redis管理会话实现集群(转载)
原文:http://www.myexception.cn/software-architecture-design/1815507.html Shiro通过Redis管理会话实现集群 写在前面 1.在 ...
- spring security 管理会话 多个用户不可以使用同一个账号登录系统
多个用户不能使用同一个账号同时登陆系统. 1. 添加监听器 在web.xml中添加一个监听器,这个监听器会在session创建和销毁的时候通知Spring Security. <listener ...
- iOS非ARC内存管理摘要 - 实践型
关于ios内存管理.在开发过程中,内存管理很重要,我简单说明一下. 1.正确用法 UIView *v = [[UIView alloc] init]; //分配后引用计数为1 [self.view a ...
- IT兄弟连 JavaWeb教程 Servlet 状态管理 会话跟踪
HTTP协议是无状态的,我们的客户端与服务器的每一次请求与响应,我们服务器都没有记忆能力将客户端与服务器的多次交互数据进行存储与管理共有两种技术实现: ● 基于客户端实现:Cookie,将状态保存在 ...
- Supervisor安装与配置(非守护进程管理工具)
http://blog.csdn.net/xyang81/article/details/51555473
- MySql(二)_NHibernateHelper管理会话工厂
1.定义接口的好处: (1) 清楚的看到里面有哪些方法: ( 2 ) 可以更换实现类:Nhibernate实现件可以更换: Manger文件夹(另外两个是Model.Mappings文件夹) 首先M ...
- OWASP WEB会话管理备忘单 阅读笔记
https://www.owasp.org/index.php/Session_Management_Cheat_Sheet#Session_ID_Properties 会话简介 HTTP是一种无状态 ...
- 不要使用 JWT 进行会话管理
英文原文地址:Stop using JWT for sessions 最近我发现越来越多的人推荐使用 JWT 来在 Web 应用中管理会话(Session),这是一个非常非常糟糕的主意,在这篇文章中我 ...
- Servlet会话管理一(URL重写和表单隐藏域)
会话可以简单的理解为客户端用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器的整个过程称为一个会话.即一个客户端用户和服务器端进行通讯的过程,也是客户端和服务器端之间的数据传 ...
随机推荐
- Jetty开发指导:WebSocket介绍
WebSocket是一个新的基于HTTP的双向通讯的协议. 它是基于低级别的框架协议.使用UTF-8 TEXT或者BINARY格式传递信息. 在WebSocket中的单个信息能够是不论什么长度(然而底 ...
- A电脑的gho还原到B电脑上的驱动解决方案
近来给B笔记本做系统,我有一个gho,是A电脑的,我想直接把系统复制过去,我的这个gho有50G,里面已经配置好了java,安卓,cocos2dx的各种环境变量,安卓开发的朋友都知道这个有多恶心,我就 ...
- appium+python自动化24-滑动方法封装(swipe)
swipe介绍 1.查看源码语法,起点和终点四个坐标参数,duration是滑动屏幕持续的时间,时间越短速度越快.默认为None可不填,一般设置500-1000毫秒比较合适. swipe(self, ...
- 对于矩阵的理解-- by 孟岩老师
“如果不熟悉线性代数的概念,要去学习自然科学,现在看来就和文盲差不多.” --瑞典数学家Lars Garding名著<Encounter with Mathematics>. 1. 矩阵的 ...
- unity3d-地图制作之暗光
最近看了暗黑破坏神3的视频,看到游戏里面的场景画面,颇有感触. 画面可谓做的极好的,虽然我审美观不是那么滴好,但是这游戏就让我看的赏心悦目,就让我好想来撸那么一把. 看完暗黑视频后,我就开始研究里面的 ...
- LaTex 制作表格 合并行\multirow 合并列\multicolumn
在latex文件最前面用这个包\usepackage{multirow} multirow 宏包提供了 \multirow 命令可以在表格中排版横跨两行以上的文本.命令的格式如下: \multirow ...
- vim/vi的文件内、跨文件复制粘贴操作、替换操作
vi/vim 中可以使用 :s 命令来替换字符串 1.s/vivian/sky/ 替换当前行第一个 vivian 为 sky 2.:s/vivian/sky/g 替换当前行所有 vivian 为 sk ...
- Ubuntu 所需要的中文字体美化操作步骤
中文字体美化是个很讨厌的事情,无数初学者在这里面浪费了无数时间,做了无数没有意义的事情.但这也是不得不做的,我把 Debian/Ubuntu 所需要的中文字体美化操作步骤详细记录在这里,希望能节约大家 ...
- go语言基础之普通参数列表
1.普通参数列表 (备注:只有一个参数) 示例1: package main //必须有一个main包 import "fmt" //有参无返回值函数的定义,普通参数列表 //定义 ...
- invalidate和requestLayout方法源码分析
invalidate方法源码分析 在之前分析View的绘制流程中,最后都有调用一个叫invalidate的方法,这个方法是啥玩意?我们来看一下View类中invalidate系列方法的源码(ViewG ...