Compartilhando conhecimento com o mundo

Com tecnologia do Blogger.

Pesquisa

Download

Blogger Tricks

Blogger Themes

Visitas

Assuntos

Script Completo - Usuários com Acesso no Banco mais Sem Acesso no Sistema Operacional

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

1 comentário:

  1. Fiz uma melhora nesse script, não testei

    #!/bin/bash

    # ==========================================================================================================
    # Autor original: Claudemar Martins
    # Versão Refatorada: 2025
    # Função: Identifica usuários no Informix que não existem no S.O. e gera scripts de REVOKE.
    # ==========================================================================================================

    # Configurações de Cores e Ambiente
    DATA_ATUAL=$(date +%d_%m_%Y_%H%M)
    REVOKE_LOG="REVOKE_$DATA_ATUAL.sql"
    GRANTS_LOG="GRANTS_$DATA_ATUAL.sql"
    TEMP_USERS="users_list.tmp"

    header() {
    clear
    echo "------------------------------------------------------------------------"
    echo "$(date "+%d/%m/%Y %T") ***** INFORMIX CLEANER SERVICES *****"
    echo "------------------------------------------------------------------------"
    }

    header
    echo -n "Digite o NOME DO BANCO DE DADOS: "
    read -r DATABASE

    if [ -z "$DATABASE" ]; then
    echo "Erro: Nome do banco não pode ser vazio."
    exit 1
    fi

    echo -e "\n[*] Aguarde, analisando permissões e Sistema Operacional...\n"

    # 1. Coletar todos os usuários com permissão de CONNECT no banco
    # O awk captura o 4º campo (username) e remove as aspas, se existirem.
    USERS_IN_DB=$(dbschema -d "$DATABASE" -p all | grep -E ' connect to ' | awk '{print $4}' | tr -d '"')

    if [ -z "$USERS_IN_DB" ]; then
    echo "Nenhum usuário com acesso CONNECT encontrado no banco $DATABASE."
    exit 0
    fi

    # Limpar arquivos de saída caso já existam
    > "$GRANTS_LOG"
    > "$REVOKE_LOG"

    # 2. Processar cada usuário encontrado
    for USERNAME in $USERS_IN_DB; do
    # Ignorar o usuário 'public'
    if [[ "$USERNAME" == "public" ]]; then continue; fi

    # Verificar se o usuário NÃO existe no Sistema Operacional
    if ! id "$USERNAME" &>/dev/null; then

    # Coletar permissões específicas do usuário (Grants)
    # Filtramos para pegar apenas as linhas de permissão e ignorar cabeçalhos do dbschema
    USER_PERMS=$(dbschema -d "$DATABASE" -p "$USERNAME" | grep -Ei 'grant|connect' | grep -v "public")

    if [ ! -z "$USER_PERMS" ]; then
    # Salva o backup do GRANT
    echo "-- User: $USERNAME" >> "$GRANTS_LOG"
    echo "$USER_PERMS" >> "$GRANTS_LOG"

    # Converte GRANT para REVOKE
    # Troca 'grant' por 'revoke' e 'to' por 'from'
    REVOKE_CMD=$(echo "$USER_PERMS" | sed -e 's/grant/revoke/Ig' -e 's/ to / from /Ig')

    echo "-- User: $USERNAME (Not in OS)" >> "$REVOKE_LOG"
    echo "$REVOKE_CMD" >> "$REVOKE_LOG"
    echo "[!] Usuário '$USERNAME' não existe no S.O. - Adicionado ao REVOKE."
    fi
    fi
    done

    header
    echo " Processamento Concluído!"
    echo "------------------------------------------------------------------------"
    echo " Banco de Dados: $DATABASE"
    echo "------------------------------------------------------------------------"
    echo " [✓] Backup de Grants: $GRANTS_LOG"
    echo " [✓] Script de Revoke: $REVOKE_LOG"
    echo "------------------------------------------------------------------------"
    echo " Verifique os arquivos gerados antes de executar os comandos no banco."

    ResponderEliminar