首页 数据库 mysql教程 非superuser管理会话

非superuser管理会话

Jun 07, 2016 pm 04:04 PM
中断 会话 取消 用户 管理

在gp中取消或者中断某个用户的超长时间或者SQL存在问题的会话,如果无法拥有超级用户将无法执行该类操作。 首先我们创建两个用户t1、t2,并且使用t1登录到数据库。 [gpadmin@wx60 ~]$ psql gtlionspsql (8.2.15)Type help for help. gtlions=# select version

在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 = &#39;c&#39; then
		ret := (select pg_catalog.pg_cancel_backend(procpid));
	elsif opertype = &#39;k&#39; 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,&#39;c&#39;);
 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,&#39;k&#39;);
 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-
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1662
14
CakePHP 教程
1418
52
Laravel 教程
1311
25
PHP教程
1261
29
C# 教程
1234
24
如何用小红书号查找用户?能查到手机号吗? 如何用小红书号查找用户?能查到手机号吗? Mar 22, 2024 am 08:40 AM

随着社交媒体的迅速发展,小红书已经成为了备受青睐的社交平台之一。用户可以通过创建小红书号来展示个人身份,并与其他用户交流互动。如果你需要查找某个用户的小红书号码,可以按照以下简单步骤进行操作。一、如何用小红书号查找用户?1.打开小红书APP,点击右下角的“发现”按钮,然后选择“笔记”选项。2.在笔记列表中,找到你想查找的用户发布的那篇笔记。点击进入笔记详情页。3.在笔记详情页中,点击用户头像下方的“关注”按钮,即可进入该用户的个人主页。4.在用户个人主页右上角,点击三个点按钮,然后选择“个人信息

美团取消订单怎么取消 美团取消订单怎么取消 Mar 07, 2024 pm 05:58 PM

用户在使用美团下单时可以选择不想要的订单取消,有很多用户不知道美团取消订单怎么取消,用户可以在我的页面中点击进入订单待收货选择需要取消的订单点击取消。美团取消订单怎么取消1、首先在美团我的页面中点击进入订单待收货。2、然后点击进入需要取消的订单。3、点击取消订单。4、点击确定取消订单。5、最后根据个人情况选择取消原因后点击提交即可。

以超级用户身份登录Ubuntu 以超级用户身份登录Ubuntu Mar 20, 2024 am 10:55 AM

在Ubuntu系统中,root用户通常是禁用状态的。要激活root用户,可以使用passwd命令设置密码,然后使用su-命令以root身份登录。根用户是具有系统管理权限且不受限制的用户。他拥有访问和修改文件、用户管理、软件安装和删除,以及系统配置更改等权限。根用户与普通用户有着明显的区别,根用户拥有系统中最高的权限和更广泛的控制权。根用户可以执行重要的系统命令和编辑系统文件,而普通用户则无法做到这一点。在本指南中,我将探讨Ubuntu根用户,如何以根用户身份登录,以及它与普通用户的不同之处。注意

芒果tv自动续费在哪取消 芒果tv自动续费在哪取消 Feb 28, 2024 pm 10:16 PM

许多用户在体验芒果TV这款视频软件时,为了享受更多的影视资源和更全面的服务,都会选择开通会员。而在使用芒果TV会员服务的过程中,部分用户会选择开启自动续费功能享受优惠,以确保不会错过任何精彩内容。然而,当用户不再需要会员服务或希望更改支付方式时,取消自动续费功能就是保护财产安全非常重要的一件事,究竟该如何取消芒果tv的自动续费服务呢,想要了解的用户们就快来跟着本文一起详细了解一下吧!芒果tv怎么取消会员自动续费?1、首先进入芒果tv手机APP里面的【我的】,再选择【VIP会员】。2、然后找到【管

微信取消耳朵的符号的详细步骤 微信取消耳朵的符号的详细步骤 Mar 25, 2024 pm 05:01 PM

1、耳朵符号是语音听筒模式,首先我们打开微信。2、点击右下角的我。3、点击设置。4、找到聊天点击进入。5、取消勾选使用听筒播放语音即可。

爱奇艺怎么取消自动续费 爱奇艺取消自动续费怎么操作 爱奇艺怎么取消自动续费 爱奇艺取消自动续费怎么操作 Feb 22, 2024 pm 04:46 PM

可以在我的黄金VIP会员界面打开管理自动续费功能进行取消。教程适用型号:华为P50系统:HarmonyOS2.0版本:爱奇艺12.1.0解析1打开手机上的爱奇艺app,接着进入我的页面。2然后在我的页面点击上方的黄金VIP会员,接着点击管理自动续费选项。3在弹出的窗口中点击取消自动续费,不感兴趣,继续取消。4最后确认关闭自动续费并点击我知道了,残忍拒绝即可。补充:苹果手机爱奇艺怎么取消自动续费功能1打开手机上的设置,接着在设置界面点击顶部的【AppleID】。2在AppleID界面点击【订阅】选

微信取消订阅付款的操作步骤 微信取消订阅付款的操作步骤 Mar 26, 2024 pm 08:21 PM

1、在手机设置中点击【iTunesStore与AppStore】选项。2、点击【查看AppleID】,然后输入登录密码。3、进入【帐户设权置】界面,点击【付款信息】。4、将付款方式勾选为【无】,点击【完成】。完成后,返回微信界面,此时将会收到【解约成功通知】的信息,微信就再也不会自动扣除费用。

支付宝怎么取消刷脸支付?支付宝取消刷脸支付教程 支付宝怎么取消刷脸支付?支付宝取消刷脸支付教程 Mar 16, 2024 pm 03:07 PM

  支付宝是一款很实用的生活服务平台,这个软件的功能非常强大,它为用户们提供了生活支付、旅游、医保等等功能,给大家的生活带来了方便。支付宝这个平台有很多功能等着大家来解锁,那么支付宝怎么取消刷脸支付呢?支付宝取消刷脸支付详细教程:  1、首先打开支付宝  2、点击右下角我的  3、点击右上角的设置  4、点击支付设置  5、点击生物支付  6、找到手机刷脸支付  7、取消勾选即可软件特色  1、支持各种场景关系,群聊群付更方便;  2、为子女父母建立亲情账户;  3、免费异地跨行转账,信用卡还款

See all articles