search
HomeDatabaseMysql Tutorial非superuser管理会话
非superuser管理会话Jun 07, 2016 pm 04:04 PM
interruptsessionCancelusermanage

在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-
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Laravel扩展包管理:轻松集成第三方代码和功能Laravel扩展包管理:轻松集成第三方代码和功能Aug 25, 2023 pm 04:07 PM

Laravel扩展包管理:轻松集成第三方代码和功能引言:在Laravel开发中,我们经常使用第三方代码和功能来提高项目的效率和稳定性。而Laravel扩展包管理系统允许我们轻松地集成这些第三方代码和功能,使得我们的开发工作更加便捷和高效。本文将介绍Laravel扩展包管理的基本概念和使用方法,并通过一些实际的代码示例来帮助读者更好地理解和应用。什么是Lara

如何在麒麟操作系统上进行网络服务器的设置和管理?如何在麒麟操作系统上进行网络服务器的设置和管理?Aug 04, 2023 pm 09:25 PM

如何在麒麟操作系统上进行网络服务器的设置和管理?麒麟操作系统是中国自主开发的一种基于Linux的操作系统。它具有开源、安全、稳定等特点,在国内得到了广泛的应用。本文将介绍如何在麒麟操作系统上进行网络服务器的设置和管理,帮助读者更好地搭建和管理自己的网络服务器。一、安装相关软件在开始设置和管理网络服务器之前,我们需要先安装一些必要的软件。在麒麟操作系统上,可以

如何在麒麟操作系统上进行硬盘空间的管理和清理?如何在麒麟操作系统上进行硬盘空间的管理和清理?Aug 04, 2023 am 09:49 AM

如何在麒麟操作系统上进行硬盘空间的管理和清理?麒麟操作系统是一个基于Linux的操作系统,相比其他操作系统,麒麟提供了更多的自由度和可定制性。在长期的使用过程中,我们经常会遇到硬盘空间不足的问题,这时候就需要进行硬盘空间的管理和清理。本文将介绍如何在麒麟操作系统上进行硬盘空间的管理和清理,包括查看硬盘空间使用情况、删除不必要的文件以及使用磁盘清理工具。首先,

MongoDB技术开发中遇到的事务管理问题解决方案分析MongoDB技术开发中遇到的事务管理问题解决方案分析Oct 08, 2023 am 08:15 AM

MongoDB技术开发中遇到的事务管理问题解决方案分析随着现代应用程序变得越来越复杂和庞大,对数据的事务处理需求也越来越高。作为一种流行的NoSQL数据库,MongoDB在数据管理方面有着出色的性能和扩展性。然而,MongoDB在数据一致性和事务管理方面相对较弱,给开发人员带来了挑战。在本文中,我们将探讨在MongoDB开发中遇到的事务管理问题,并提出一些解

ThinkPHP6中如何进行审核流程管理?ThinkPHP6中如何进行审核流程管理?Jun 12, 2023 am 09:31 AM

随着互联网的发展,越来越多的企业开始使用网络进行业务处理,这就要求企业必须有一套完善的审核流程管理系统来确保业务的安全和规范。在PHP开发中,ThinkPHP6框架提供了便捷的审核流程管理功能,本文将介绍如何在ThinkPHP6中实现审核流程管理。一、ThinkPHP6审核流程管理基本思路ThinkPHP6的审核流程管理基本思路是通过数据库记录来实现,一般需

如何在Linux中进行集群管理如何在Linux中进行集群管理Jun 19, 2023 am 08:21 AM

在高可用性(HA)的系统中,集群是不可或缺的一部分。当一个单一节点不能提供足够的可用性或性能时,集群是一种实用的解决方案。Linux是非常流行的集群环境,它通过多种途径来提供集群的实现和支持。在本文中,我们将学习如何在Linux中进行集群管理。集群管理软件Linux使用许多集群管理软件来帮助管理员轻松地管理多台服务器的集群实例。有许多工具可供选择,其

Vue应用中的HTTPS证书绑定管理Vue应用中的HTTPS证书绑定管理Jun 10, 2023 pm 05:33 PM

随着互联网技术的快速发展,越来越多的应用程序将安全性放在首位,其中HTTPS证书的管理绑定显得越来越重要。在Vue应用中,HTTPS证书的绑定管理也是至关重要的一环,本文将介绍Vue应用中如何进行HTTPS证书的绑定管理。一、HTTPS证书的基础知识HTTPS证书(SSL/TLS证书)的作用是在网站与用户之间建立加密通道,确保用户的数据安全。当用户在浏览器中

麒麟操作系统如何提供多屏幕工作环境的扩展和管理?麒麟操作系统如何提供多屏幕工作环境的扩展和管理?Aug 04, 2023 am 10:15 AM

麒麟操作系统如何提供多屏幕工作环境的扩展和管理?随着计算机技术的不断发展,多屏幕显示已经成为现代工作环境中的一个常见需求。为了满足用户对于多任务处理和工作效率的要求,麒麟操作系统提供了一套强大的多屏幕扩展和管理功能。本文将介绍麒麟操作系统如何实现多屏幕工作环境的扩展和管理,并附上相应的代码示例。多屏幕工作环境的扩展麒麟操作系统通过提供多屏幕工作环境的扩展功能

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Tools

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use