-
Notifications
You must be signed in to change notification settings - Fork 0
/
mysql_user_create.sh
243 lines (203 loc) · 6.15 KB
/
mysql_user_create.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
#! /bin/sh
# ./read.sh
#
# Autor: Damian Ulanowicz.
# Descripción: Script que permite crear usuarios de MySQL con sus respectivos permisos.
#
#
SERVER_HOST=192.168.0.49
SERVER_USER=root
CLIENT_HOST=192.168.0.49
CLIENT_USER=linux_admin
PATH1=/dev/shm/
PATH2=~/
LOG=/tmp/batch_create_user.log
read_password()
{
fg_retry_pass=1
while [ $fg_retry_pass -eq 1 ];
do
printf "Ingrese el password del usuario "$CLIENT_USER"@"$CLIENT_HOST": "
stty -echo
read pass
stty echo
printf '\n'
printf "Verifique el password del usuario "$CLIENT_USER"@"$CLIENT_HOST": "
stty -echo
read pass2
stty echo
printf '\n'
if [ "$pass" != "$pass2" ]
then
echo "Verificacion incorrecta!\n"
else
fg_retry_pass=0
fi
done
if [ "$pass" = "" ]
then
echo "Error: El password no puede estar vacio!\n"
exit 1
fi
}
check_path()
{
if [ ! -w "$PATH1" ]
then
PATH1=$PATH2
if [ ! -w "$PATH1" ]
then
if [ -d "$PATH1" ]
then
if [ `whoami` != root ]; then
echo "Permiso denegado. Ejecute este script como usuario root!" 1>&2
else
printf "Error: No es posible escribir en el directorio: %s\n" "$PATH1" 1>&2
fi
else
printf "Error: No existe el directorio: %s\n" "$PATH1" 1>&2
fi
exit 1
fi
fi
}
create_random_filename()
{
r_num=$(echo |awk '{print int(1 + rand() * 100000)}') 2>/dev/null
FILE=$PATH1$r_num$(date +%Y%m%d%H%M%S)
}
create_script()
{
if ! touch $FILE 2>/dev/null
then
printf "Error: No se puede escribir archivo: %s\n" "$FILE" 1>&2
exit 1
fi
printf "CREATE USER '%s'@'%s' IDENTIFIED BY '***';\n" "$CLIENT_USER" "$CLIENT_HOST" > $FILE
printf "GRANT ALL PRIVILEGES ON * . * TO '%s'@'%s' IDENTIFIED BY '***' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 ;\n" "$CLIENT_USER" "$CLIENT_HOST" >> $FILE
printf "SET PASSWORD FOR '%s'@'%s' = PASSWORD( '%s' );\n" "$CLIENT_USER" "$CLIENT_HOST" "$pass" >> $FILE
printf "GRANT ALL PRIVILEGES ON \`%s\_%%\` . * TO '%s'@'%s';\n" "$CLIENT_USER" "$CLIENT_USER" "$CLIENT_HOST" >> $FILE
printf "FLUSH PRIVILEGES;\n" >> $FILE
}
run_script()
{
echo
printf "Login Server: "$SERVER_USER"@"$SERVER_HOST"\n"
if mysql -h $SERVER_HOST -u $SERVER_USER -p -f -vvv <$FILE 1>/dev/null
then
echo
echo "* El usuario se creó con éxito!"
else
echo
echo "* Se produjo un error al crear el usuario!" 1>&2
fi
echo
}
delete_script()
{
rm $FILE 2>/dev/null
}
ayuda ()
{
(
echo "Uso: $0 -s server-host -u server-user -c client-host -l client-user -p privileges [-d database] "
echo
echo " -s server-host Nombre del host o la direccion ip del servidor MySQL el cual se le asignara los privilegios al nuevo usuario."
echo " -u server-user Nombre del usuario del servidor MySQL al cual se desea conectar para crear el nuevo usuario."
echo " -c client-host Nombre del host o la direccion ip desde el cual el nuevo usuario podra conectarse al servidor."
echo " -l client-user Nombre del nuevo usuario a crear."
echo " -p privileges Determina que privilegios tendra el nuevo usuario."
echo " Se podran especificar las siguientes opciones:"
echo " [Adm] - Perfil de usuario Administrador (control total)."
echo " [App] - Perfil de usuario para una aplicacion (Solo se abilitaran los permisos de acceso a datos. Las tareas de administracion, y las modificaciones en la estructura de las bases de datos no estaran permitidas)."
echo " [-d database] Especifica el nombre de la base de datos a la cual el usuario tendra permisos de acceso. En caso de no utilizar esta opcion el usuario tendra permisos para todas las bases de datos del servidor."
echo " -h Muestra esta ayuda."
echo ""
) 1>&2
exit 2
}
set +e
args=`getopt suclp:dh $*`
if [ $? -ne 0 ] ; then
ayuda
exit 2
fi
set -e
set -- $args
SHARED_WITH_HOST=false
for i
do
case "$i"
in
-s)
SERVER_HOST=$2
shift
# shift
;;
-u)
SERVER_USER="$2"
shift
# shift
;;
-c)
shift
CLIENT_HOST="$1"
shift
# shift
;;
-l)
CLIENT_USER="$1"
shift
shift
;;
-h)
ayuda
shift
;;
--)
shift
break
esac
done
echo $SERVER_HOST
echo $SERVER_USER
echo $CLIENT_HOST
echo $CLIENT_USER
usage ()
{
(
echo "Usage: $0 [-s] -i FreeNAS-full.img"
echo " -i filename FreeNAS file image path"
echo " -s Enable a shared LAN with Qemu host"
echo " -h Display this help"
echo ""
) 1>&2
# exit 2
}
#if [ $# -lt 0 ]
#then
# echo "Cantidad de parámetros incorrecto." 1>&2
# echo "Sintaxis: $0 [Server_Host] [Server_User] [Client_Host] [Client_User] [Privileges]"
# echo
# echo "[Server_Host] Esta opcion especifica el nombre del host o la direccion ip del Servidor MySQL el cual se le asignara #los privilegios al nuevo usuario."
# echo
# echo "[Server_User] Indica el nombre del usuario del Servidor MySQL al cual se desea conectar para crear el nuevo usuario."
# echo
# echo "[Client_Host] Esta opcion especifica el nombre del host o la direccion ip desde el cual el nuevo usuario podra #conectarse al servidor."
# echo
# echo "[Client_User] Indica el nombre del nuevo usuario a crear."
# echo
# echo "[Privileges] Determina que privilegios tendra el nuevo usuario."
# echo " Se podran especificar las siguientes opciones:"
# echo " Adm - Perfil de usuario Administrador (control total)."
# echo " App - Perfil de usuario para una aplicacion (Solo se abilitaran los permisos de acceso a datos. Las #tareas de administracion, y las modificaciones en la estructura de las bases de datos no estaran permitidas)."
# exit 1
#fi
# -h -u -c -n
read_password
check_path
create_random_filename
create_script
run_script
delete_script
# GRANT ALL PRIVILEGES ON `DY\_Caja`.* TO 'prueba'@'192.168.0.49' WITH GRANT OPTION;