Abaixo esta o script que foi usado - foi usado o dbschema e alguns comandos de manipulação de arquivos do linux;
#!/bin/bash
# ==========================================================================================================
# Autor: Claudemar Martins
# Funcao: Pesquisa no banco de dados Informix os usuarios com acesso de CONNECT e compara com os usuarios
# cadastrados no sistema operacional - o final desta comparacao vai gerar dois arquivo:
#
# (*) As permissoes do banco dos usuarios que nao estao cadastrados no S.O;
# (*) O outro arquivo com os comandos de REVOKE dessas permissoes do banco.
#
# Este script criei para fazer uma faxina dos usuarios nos bancos Informix;
#
# Criado: 09/06/2014
# ==========================================================================================================
LOG1="usuarios_com_acesso_no_banco_1234_pode_deletar_1234_1.log"
LOG2="usuarios_com_acesso_no_banco_1234_pode_deletar_1234_2.log"
LOG3="usuarios_com_acesso_no_banco_1234_pode_deletar_1234_3.log"
LOG4="usuarios_com_acesso_no_banco_1234_pode_deletar_1234_4.log"
LOG5="usuarios_com_acesso_no_banco_1234_pode_deletar_1234_5.log"
LOG6="usuarios_com_acesso_no_banco_1234_pode_deletar_1234_6.log"
LOG7="usuarios_com_acesso_no_banco_1234_pode_deletar_1234_7.log"
LOG8="usuarios_com_acesso_no_banco_1234_pode_deletar_1234_8.log"
DATA_ATUAL=`date +%d_%m_%Y_%T`;
REVOKE_LOG="REVOKE_$DATA_ATUAL.sql"
GRANTS_LOG="GRANTS_$DATA_ATUAL.sql"
clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n " "
echo -n " ***** INFORMIX BASIC SERVICES ***** "
echo -n " "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo
echo
echo -n "Digite o NOME DO BANCO DE DADOS ..........: "
read DATABASE
# ==========================================================================================================
# Vamos pegar quem tem a permissao de CONNECT no banco
# ==========================================================================================================
clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n " "
echo -n " ***** INFORMIX BASIC SERVICES ***** "
echo -n " "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo
echo
echo " +---------------------------------------------------------+"
echo " | |"
echo " | aguarde alguns segundos ... |"
echo " | |"
echo " +---------------------------------------------------------+"
dbschema -d $DATABASE -p all | grep -E ' connect to ' > $LOG1
# ==========================================================================================================
# Gravando um arquivo com - FINGER USERNAME - para a gente saber quem esta cadastrado no SO
# ==========================================================================================================
cat $LOG1 | awk '{print "finger " $4 " " }' > $LOG2
# ==========================================================================================================
# Listando os usuarios que nao estao cadastrados no sistema operacional
# ==========================================================================================================
chmod 755 $LOG2
./$LOG2 >/dev/null 2> $LOG3 # jogo a saida STDOUT para a /dev/null e a STDERR em arquivo
# ==========================================================================================================
# Filtrando - vamos tirar o : do usuario
# ==========================================================================================================
cat $LOG3 | awk '{print $2}' > $LOG4
sed -i 's/://' $LOG4
# ==========================================================================================================
# Agora vamos ligar todas as permissoes dos usuarios nas tabelas
# ==========================================================================================================
# cat $LOG4 | awk '{print ("dbschema -d '$DATABASE' -p " $1 " | grep connect | grep grant \n" )}' > $LOG5
cat $LOG4 | awk '{print ("dbschema -d '$DATABASE' -p " $1 " \n" )}' > $LOG5
chmod 755 $LOG5
./$LOG5 > $LOG6
clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n " "
echo -n " ***** INFORMIX BASIC SERVICES ***** "
echo -n " "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo " Database $DATABASE"
echo
echo
echo " +---------------------------------------------------------------------------------------+"
echo " | |"
echo " | Usuarios com acesso no banco mais sem usuario cadatrado no Sistema Operacional. |"
echo " | |"
echo " +---------------------------------------------------------------------------------------+"
echo ""
echo " +---------------------------------------------------------+"
echo " | |"
echo " | Arquivo do GRANTS - $GRANTS_LOG |"
echo " | |"
echo " | Arquivo do REVOKES - $REVOKE_LOG |"
echo " | |"
echo " +---------------------------------------------------------+"
echo
# ==========================================================================================================
# Backup das permissoes antes de retirar os acessos
# Quero somente os 'CONNECT|GRANT' nao quero que me traga nada 'PUBLIC'
# ==========================================================================================================
cat $LOG6 | grep -E 'connect|grant' | grep -v 'public' > $LOG7
cp $LOG7 $GRANTS_LOG
# ==========================================================================================================
# Mostra os comandos para retirar acessos dos usuarios - este vai ser o comando REVOKE
# ==========================================================================================================
sed -i 's/grant/revoke/' $LOG7
# sed -i 's/grant update on /revoke update on /' $LOG7
# sed -i 's/grant insert on /revoke insert on /' $LOG7
# sed -i 's/grant delete on /revoke delete on /' $LOG7
# sed -i 's/grant select on /revoke select on /' $LOG7
# sed -i 's/grant update on /revoke update on /' $LOG7
# sed -i 's/grant index on /revoke index on /' $LOG1
sed -i 's/ to / from /' $LOG7
cp $LOG7 $REVOKE_LOG
rm $LOG1
rm $LOG2
rm $LOG3
rm $LOG4
rm $LOG5
rm $LOG6
rm $LOG7
echo
0 comentários:
Enviar um comentário