createuser.sh
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:5k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. #!/bin/sh
  2. #-------------------------------------------------------------------------
  3. #
  4. # createuser.sh--
  5. #    utility for creating a user in the POSTGRES database
  6. #
  7. # Copyright (c) 1994, Regents of the University of California
  8. #
  9. #
  10. # IDENTIFICATION
  11. #    $Header: /usr/local/cvsroot/pgsql/src/bin/createuser/createuser.sh,v 1.11 1999/01/31 05:04:25 scrappy Exp $
  12. #
  13. # Note - this should NOT be setuid.
  14. #
  15. #-------------------------------------------------------------------------
  16. CMDNAME=`basename $0`
  17. SYSID=
  18. CANADDUSER=
  19. CANCREATE=
  20. if [ -z "$USER" ]; then
  21.     if [ -z "$LOGNAME" ]; then
  22. if [ -z "`whoami`" ]; then
  23.     echo "$CMDNAME: cannot determine user name"
  24.     exit 1
  25. fi
  26.     else
  27. USER=$LOGNAME
  28. export USER
  29.     fi
  30. fi
  31. while [ -n "$1" ]
  32. do
  33.     case $1 in 
  34. -a) AUTHSYS=$2; shift;;
  35.         -h) PGHOST=$2; shift;;
  36.         -p) PGPORT=$2; shift;;
  37.         -d) CANCREATE=t;;
  38.         -D) CANCREATE=f;;
  39.         -u) CANADDUSER=t;;
  40.         -U) CANADDUSER=f;;
  41.         -i) SYSID=$2; shift;;
  42.          *) NEWUSER=$1;;
  43.     esac
  44.     shift;
  45. done
  46. if [ -z "$AUTHSYS" ]; then
  47.   AUTHOPT=""
  48. else
  49.   AUTHOPT="-a $AUTHSYS"
  50. fi
  51. if [ -z "$PGHOST" ]; then
  52.   PGHOSTOPT=""
  53. else
  54.   PGHOSTOPT="-h $PGHOST"
  55. fi
  56. if [ -z "$PGPORT" ]; then
  57.   PGPORTOPT=""
  58. else
  59.   PGPORTOPT="-p $PGPORT"
  60. fi
  61. PARGS="-tq $AUTHOPT $PGHOSTOPT $PGPORTOPT"
  62. #
  63. # generate the first part of the actual monitor command
  64. #
  65. PSQL="psql $PARGS"
  66. #
  67. # see if user $USER is a superuser
  68. #
  69. QUERY="select usesuper from pg_user where usename = '$USER' "
  70. #echo $QUERY
  71. ADDUSER=`$PSQL -c "$QUERY" template1`
  72. if [ $? -ne 0 ]
  73. then
  74.     echo "$CMDNAME: database access failed." 1>&2
  75.     exit 1
  76. fi
  77. if [ -n "$ADDUSER" ]
  78. then
  79. if [ $ADDUSER != "t" ]
  80. then
  81.     echo "$CMDNAME: $USER cannot create users." 1>&2
  82.     exit 1
  83. fi
  84. fi
  85. #
  86. # get the user name of the new user.  Make sure it doesn't already exist.
  87. #
  88. if [ -z "$NEWUSER" ]
  89. then
  90.     echo PG_OPT_DASH_N_PARAM "Enter name of user to add ---> PG_OPT_BACKSLASH_C_PARAM"
  91.     read NEWUSER
  92. fi
  93. QUERY="select usesysid from pg_user where usename = '$NEWUSER' "
  94. RES=`$PSQL -c "$QUERY" template1`
  95. if [ $? -ne 0 ]
  96. then
  97.     echo "$CMDNAME: database access failed." 1>&2
  98.     exit 1
  99. fi
  100. if [ -n "$RES" ]
  101. then
  102.     echo "$CMDNAME: user ""$NEWUSER"" already exists" 1>&2
  103.     exit 1
  104. fi
  105. done=0
  106. #
  107. # get the system id of the new user.  Make sure it is unique.
  108. #
  109. while [ $done -ne 1 ]
  110. do
  111.     DEFSYSID=`pg_id $NEWUSER 2>/dev/null`
  112.     if [ $? -eq 0 ]; then
  113. DEFMSG=" or RETURN to use unix user ID: $DEFSYSID"
  114.     else
  115. DEFMSG=
  116. DEFSYSID=
  117.     fi
  118.     while  [ -z "$SYSID" ]
  119.     do
  120. echo PG_OPT_DASH_N_PARAM "Enter user's postgres ID$DEFMSG -> PG_OPT_BACKSLASH_C_PARAM"
  121. read SYSID
  122. [ -z "$SYSID" ] && SYSID=$DEFSYSID;
  123. SYSIDISNUM=`echo $SYSID | egrep '^[0-9]+$'`
  124. if [ -z "$SYSIDISNUM" ]
  125. then
  126. echo "$CMDNAME: the postgres ID must be a number"
  127. SYSID=
  128. fi
  129.     done
  130.     QUERY="select usename from pg_user where usesysid = '$SYSID'::int4"
  131.     RES=`$PSQL -c "$QUERY" template1`
  132.     if [ $? -ne 0 ]
  133.     then
  134. echo "$CMDNAME: database access failed."
  135. exit 1
  136.     fi
  137.     if [ -n "$RES" ]
  138.     then
  139. echo 
  140. echo "$CMDNAME: $SYSID already belongs to $RES, pick another"
  141. DEFMSG= DEFSYSID= SYSID=
  142.     else
  143. done=1
  144.     fi
  145. done
  146. #
  147. # get the rest of the user info...
  148. #
  149. #
  150. # can the user create databases?
  151. #
  152. if [ -z "$CANCREATE" ]
  153. then
  154. yn=f
  155. while [ "$yn" != y -a "$yn" != n ]
  156. do
  157. echo PG_OPT_DASH_N_PARAM "Is user "$NEWUSER" allowed to create databases (y/n) PG_OPT_BACKSLASH_C_PARAM"
  158. read yn
  159. done
  160. if [ "$yn" = y ]
  161. then
  162. CANCREATE=t
  163. else
  164. CANCREATE=f
  165. fi
  166. fi
  167. #
  168. # can the user add users?
  169. #
  170. if [ -z "$CANADDUSER" ]
  171. then
  172. yn=f
  173. while [ "$yn" != y -a "$yn" != n ]
  174. do
  175. echo PG_OPT_DASH_N_PARAM "Is user "$NEWUSER" a superuser? (y/n) PG_OPT_BACKSLASH_C_PARAM"
  176. read yn
  177. done
  178. if (test "$yn" = y)
  179. then
  180. CANADDUSER=t
  181. else
  182. CANADDUSER=f
  183. fi
  184. fi
  185. QUERY="insert into pg_shadow 
  186.         (usename, usesysid, usecreatedb, usetrace, usesuper, usecatupd) 
  187.        values 
  188.          ('$NEWUSER', $SYSID, '$CANCREATE', 't', '$CANADDUSER','t')"
  189. RES=`$PSQL -c "$QUERY" template1`
  190. #
  191. # Wrap things up.  If the user was created successfully, AND the user was
  192. # NOT allowed to create databases, remind the DBA to create one for the user.
  193. #
  194. if [ $? -ne 0 ]
  195. then
  196.     echo "$CMDNAME: $NEWUSER was NOT added successfully"
  197. else
  198.     echo "$CMDNAME: $NEWUSER was successfully added"
  199.     if [ "$CANCREATE" = f ]
  200.     then
  201. echo PG_OPT_DASH_N_PARAM "Shall I create a database for "$NEWUSER" (y/n) PG_OPT_BACKSLASH_C_PARAM"
  202. read yn
  203. if [ "$yn" = y ]
  204. then
  205. createdb $NEWUSER
  206. else
  207.          echo "don't forget to create a database for $NEWUSER"
  208.      fi
  209. fi
  210. fi