Grant *.* to usuário……
Publicado por joaocosme em Julho 4, 2008
Ontem lá pelas tantas da madruga, dando um rolé pelos sites me deparei com o site do depesz Fazia um tempinho que eu não acessava o site do cara, meu irmão o cara é #”!$%% !!! Pra quem conhece o blog do cara sabe que ele manda muito bem !!!!
Bom…. já rasguei a seda…….. Um dos artigos ,o cara comentava da dificuldades dos novos dbas postgresql em dar um GRANT/REVOKE em todas as tabelas do banco de dados.
A Saga do Guerreio Paulo César (PC Boy) !!
Me lembrei do cabra aqui do trampo, grande amigo meu que trabalha aqui detentor da seguinte fala “Deixa eu chegar chegando pra não ficar ficando , aproveitar o embalo e passar batido”
.
Um dos bancos aqui tem umas 400 tabelas e ele ia uma por uma, em uma luta infernal.
Grant select,insert,update,delete on tabela1 to usuario;
Grant select,insert,update,delete on tabela2 to usuario;
……
Grant select,insert,update,delete on tabela400 to usuario;
hehehheheehehee engraçado! Mas eu já passei por isso e pode até parecer uma coisa simples ou idiota, mas….
AAAAAAA mais o pgadmin faz isso, automaticamente!!!!
É mesmo!!! Faz, mas e se você por necessidade só tem um “SIMPLES” shell hehehe?? KD o seu pgadmin? Tipo o servidor de Banco de dados não tem ambiente gráfico e tal…
No site do DESPEZ ele tinha bolado uma stored procedure que dava um grant all *.*, muito legal, vale a pena da uma olhada!!!
Eu sempre tinha resolvido esse tipo de problema fazendo um shell scriptzinho, mas como eu nunca salvo as coisas tinha que fazer toda vez que era necessário!!
PG_grantall
Eu não vou negar, shell script RuleZ!!! Gosto do bash, me sinto acolhido naquele lugar escuro e quentinho hehehhee. Tava meio enferrujadão de shell script e resolvi escrever um script para automatizar esses grants , na verdade não foi nem muito pra ajudar o jovem PC, foi pra relembrar algumas coisas mesmo hehehhe, coloquei o nome dele de pg_grantall.
# pg_grantall -h
pg_grantall [OPTIONS]
OPTIONS
-T GRANT on tables on database
-S GRANT on sequences on database
-U login user
-H Hostname
-R Role to grant
Por exemplo: Quero dar os todos os privilegios nas tabelas do banco de dados banco1, para o jovem paulo.
pg_grantall -T -U postgres -H localhost -R paulo banco1
Por exemplo: Quero dar os todos os privilegios nas sequences do banco de dados banco1, para o jovem paulo novamente.
pg_grantall -S -U postgres -H localhost -R paulo banco1
Por exemplo: Quero dar os todos os privilegios nas sequences e também nas tabelas do banco de dados banco1, para o jovem paulo
pg_grantall -ST -U postgres -H localhost -R paulo banco1
Pra quem quizer da uma olhada, sinta-se a vontade, inclusive para adaptá-lo.
Como sempre ando meio cansado, e reconheço que o código não está essa coca-cola toda, poderia estar melhor mas ta aí.
pg_grantall
#!/bin/bash
MENSAGEM=" $(basename "$0") [OPTIONS]
OPTIONS:
-T Grant tables in database
-S Grand sequences in database
-U login user
-H hostname
-R role to grant. "
while getopts ":TSU:H:hR:" opcao
do
case $opcao in
T) TABLES="r";;
S) SEQUENCES="S";;
U) USERDB=$(echo "$OPTARG");;
H) HOST=$(echo "$OPTARG");;
R) ROLE=$(echo "$OPTARG");;
h) echo "$MENSAGEM";exit;;
\?) echo "Invalid Option!!";exit;;
: ) echo "Argument missing!!;exit";;
esac
done
shift $((OPTIND -1))
if [ -z "$TABLES" -a -z "$SEQUENCES" ]
then
echo "Missing option T or S"
exit
fi
if [ -z "$USERDB" ]
then
USERDB="postgres"
fi
if [ -z "$HOST" ]
then
HOST="localhost"
fi
if [ -z "$ROLE" ]
then
echo "what role should i give the privilleges?"
exit;
fi
if [ -z "$*" ]
then
echo "What database should i connect ??"
exit;
fi
echo "Password for user $USERDB: "
read -s PASSWD
PGPASSWORD=$(echo "$PASSWD")
export PGPASSWORD
psql -U $USERDB -h $HOST -t -c "select relname from pg_class where relkind
in ('$TABLES','$SEQUENCES') and relname !~ '^(pg_|sql)';" $* | grep -v "^$" |
while read linha
do
psql -U $USERDB -h $HOST -c "grant all on $linha to $ROLE;" $*
done
Eu coloquei esse script no meu /usr/local/pgsql/bin e ficou legalzin!!
Fernando Ike disse
Bem que você poderia colocar uma licença no seu script mágico. Tipo, GPL.
Joaocosme disse
GRAAAAAAAAAAAAAAAAAAnde ike boy!!! Com certeza!!! Farei-oo