📄 destroyuser.sh
字号:
#!/bin/sh#-------------------------------------------------------------------------## destroyuser.sh--# utility for destroying a user from the POSTGRES database.## Copyright (c) 1994, Regents of the University of California### IDENTIFICATION# $Header: /usr/local/cvsroot/pgsql/src/bin/destroyuser/destroyuser.sh,v 1.11 1999/03/14 16:00:55 momjian Exp $## Note - this should NOT be setuid.##-------------------------------------------------------------------------CMDNAME=`basename $0`if [ -z "$USER" ]; then if [ -z "$LOGNAME" ]; then if [ -z "`whoami`" ]; then echo "$CMDNAME: cannot determine user name" exit 1 fi else USER=$LOGNAME export USER fifiwhile (test -n "$1")do case $1 in -a) AUTHSYS=$2; shift;; -h) PGHOST=$2; shift;; -p) PGPORT=$2; shift;; *) DELUSER=$1;; esac shift;doneif [ -z "$AUTHSYS" ]; then AUTHOPT=""else AUTHOPT="-a $AUTHSYS"fiif [ -z "$PGHOST" ]; then PGHOSTOPT=""else PGHOSTOPT="-h $PGHOST"fiif [ -z "$PGPORT" ]; then PGPORTOPT=""else PGPORTOPT="-p $PGPORT"fiPARGS="-tq $AUTHOPT $PGHOSTOPT $PGPORTOPT"## generate the first part of the actual monitor command#PSQL="psql $PARGS"## see if user $USER is allowed to create new users. Only a user who can# create users can delete them.#QUERY="select usesuper from pg_user where usename = '$USER'"ADDUSER=`$PSQL -c "$QUERY" template1`if [ $? -ne 0 ]then echo "$CMDNAME: database access failed." exit 1fiif [ x$ADDUSER != xt ]then echo "$CMDNAME: $USER cannot delete users." exit 1fi## get the user name of the user to delete. Make sure it exists.#if [ -z "$DELUSER" ]then echo PG_OPT_DASH_N_PARAM "Enter name of user to delete ---> PG_OPT_BACKSLASH_C_PARAM" read DELUSERfiQUERY="select usesysid from pg_user where usename = '$DELUSER'"RES=`$PSQL -c "$QUERY" template1`if [ $? -ne 0 ]then echo "$CMDNAME: database access failed." exit 1fiif [ ! -n "$RES" ]then echo "$CMDNAME: user "\"$DELUSER\"" does not exist." exit 1fiSYSID=`echo $RES | sed 's/ //g'`## destroy the databases owned by the deleted user. First, use this query# to find out what they are.#QUERY="select datname from pg_database where datdba = '$SYSID'::oid" ALLDBS=`$PSQL -c "$QUERY" template1`if [ $? -ne 0 ]then echo "$CMDNAME: database access failed - exiting..." exit 1fi## don't try to delete template1!#for i in $ALLDBSdo if [ $i != "template1" ] then DBLIST="$DBLIST $i" fidoneif [ -n "$DBLIST" ]then echo "User $DELUSER owned the following databases:" echo $DBLIST echo## Now we warn the DBA that deleting this user will destroy a bunch of databases# yn=f while [ "$yn" != y -a "$yn" != n ] do echo PG_OPT_DASH_N_PARAM "Deleting user $DELUSER will destroy them. Continue (y/n)? PG_OPT_BACKSLASH_C_PARAM" read yn done if [ $yn = n ] then echo "$CMDNAME: exiting" exit 1 fi # # now actually destroy the databases # for i in $DBLIST do echo "destroying database $i" QUERY="drop database $i" $PSQL -c "$QUERY" template1 if [ $? -ne 0 ] then echo "$CMDNAME: drop database on $i failed - exiting" exit 1 fi donefiQUERY="delete from pg_shadow where usename = '$DELUSER'"$PSQL -c "$QUERY" template1if [ $? -ne 0 ]then echo "$CMDNAME: delete of user $DELUSER was UNSUCCESSFUL"else echo "$CMDNAME: delete of user $DELUSER was successful."fiexit 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -