Olá, amigos. Recentemente, estou participando de uma migração de um banco de dados Oracle 8i para Oracle 10g, da plataforma 32-bits para 64-bits e uma aplicação Forms/Reports 6i (Oracle Developer 6i), e nos deparamos com um problema de Security após a criação e importação dos owners para o novo banco de dados.
Quando mandei o desenvolvedor conectar a aplicação no novo banco de dados, para fins de testes, conectividade e possíveis problemas do 10g (Pois é uma migração do 8i, e a aplicação está toda em REGRA), o Forms nos emitia um erro estranho, como mostra abaixo:
FRM-10256: User is not authorized to run Form Builder Menu.
Logo de início, pensei que poderia ser problemas no owner da aplicação (no banco de dados) ou o menu da aplicação, que utiliza outro owner para validar e construir o menu. Fiz todos os checks necessários, como:
- Analisar o “STATUS ACCOUNT” de todos os owners no banco de dados, que pode ser feito pela view dba_users
- Olhar qual perfil de banco de dados os owners estão usando, todos estavam com DEFAULT para início.
- Analisar com a base de produção, objetos inválidos, views e qualquer outro objeto que tenha relação com a construção dos menus, e também nada.
Então, resolvi, junto com o desenvolvedor, pesquisar sobre o assunto e esse erro específico, e encontramos a seguinte solução pelo Metalink.
Visão Geral
A segurança do Oracle Forms é baseada em roles (papéis) no banco de dados Oracle. Essas roles são um método de permitir o acesso as informações do banco de dados para os usuários, portanto, se nenhum usuário não tem acesso a qualquer coisa, essas roles podem ajudar a facilitar o acesso.
Desde que os usuários tenham essas roles definidas pelo DBA ou Administrador de aplicação, os módulos de MENU e ITENS DO MENU terão um controle de acesso feito internamento pelo menu da aplicação.
Solução
Para resolver esse problema, o DBA, conectado no banco de dados com o usuário SYS, deve executar um script de segurança que vem junto com o Developer 6i, que é o script abaixo:
Para ambiente Windows%ORACLE_HOME%\tools\dbtab\forms60\frm60sec.sql
Para ambiente Linux\Unix$ORACLE_HOME/forms60/admin/sql/frm60sec.sql
Esse script é pertecente ao ORACLE_HOME do Developer 6i, não confunda com o ORACLE_HOME do banco de dados. Execute ele com o usuário SYS e seus problemas vão terminar.
Abaixo, segue o conteúdo do script, caso estejam com esse problema e não consigam acessar o servidor de aplicação por motivo de segurança da empresa ou qualquer outro motivo.
FRM60sec.sql
create or replace view FRM50_ENABLED_ROLES as
select urp.granted_role role,
sum(distinct decode(rrp.granted_role,
'ORAFORMS$OSC',2,
'ORAFORMS$BGM',4,
'ORAFORMS$DBG',1,0)) flag
from sys.user_role_privs urp, role_role_privs rrp
where urp.granted_role = rrp.role (+)
and urp.granted_role not like 'ORAFORMS$%'
group by urp.granted_role;
create public synonym FRM50_ENABLED_ROLES for system.FRM50_ENABLED_ROLES;
create role ORAFORMS$OSC;
create role ORAFORMS$DBG;
create role ORAFORMS$BGM;PRONTO! Acho que agora vai resolver a vida! Caso tenha problemas, dê os grants de SELECT do SYNONYM para os usuários que precisa acessar a aplicação.
Abraços,







