FRM-10256
Como resolver o problema de FRM-10256 em aplicações Forms/Reports 6i no banco de dados.Olá,
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 se 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 vêm 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 contéudo do script, caso, estejam com esse problema e não conseguem 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