O script do Unix/Linux gera um script que revoga os direitos de qualquer usuário a ROLE_USUARIO, exclui todos os direitos da role, cria se não existir e passa a ela os direitos de execução a todas as rotinas e de manipulação de todas as tabelas e por fim libera a role aos usuários cadastrados na tabela USUARIO.

 

Repare que o script role.sh é parametrizado. É necessário informar qual o banco de dados em que será criado a role e liberado o acesso.

 

/opt/interbase/script/role.sh


if [ ! $1 ]; then

   echo Informe o nome do banco de dados.

   exit

fi

 

if [ -f tmp_role.sql ]; then

   rm tmp_role.sql

fi

 

../bin/isql $1 -u sysdba -p masterkey -i role.sql

echo "commit;">>tmp_role.sql

cat tmp_role.sql|grep [aeiou]>tmp_role.sql

../bin/isql $1 -u sysdba -p masterkey -i tmp_role.sql


 

/opt/interbase/script/role.sql


output tmp_role.sql;

select 'revoke role_usuario from '||rdb$user||';' from rdb$user_privileges where rdb$relation_name='ROLE_USUARIO';

select distinct 'revoke all on '||rdb$relation_name||' from ROLE_USUARIO;' from rdb$user_privileges where rdb$user='ROLE_USUARIO' and rdb$object_type=0;

select 'revoke execute on procedure '||rdb$relation_name||' from ROLE_USUARIO;' from rdb$user_privileges where rdb$user='ROLE_USUARIO' and rdb$object_type=5;

select 'create role role_usuario;' from rdb$database where not exists (select * from rdb$roles where rdb$role_name='ROLE_USUARIO');

select 'grant all on '||rdb$relation_name||' to role_usuario;' from rdb$relations where rdb$flags=1;

select 'grant execute on procedure '||rdb$procedure_name||' to role_usuario;' from rdb$procedures;

output;

 

connect "/opt/interbase/database/corporativo.gdb" user sysdba password masterkey;

output tmp_role.sql;

select 'grant role_usuario to '||usuario||';' from usuario;

exit;