Bom dia a todos! Tenho uma situação interessante aqui, um gatilho de início de sessão criado no usuário SYS e usando sinônimos públicos. Ele foi removido por engano da homologação e recriado copiando a produção, mas agora dá problemas de compilação com permissões de acesso. Entretanto, o usuário SYS obviamente tem acesso a tudo!
Agradeço qualquer idéia, detalhes a seguir. Gatilho: CREATE OR REPLACE TRIGGER sys.tg_dss_server_alogon AFTER LOGON ON DATABASE DECLARE nCont BINARY_INTEGER; lpszGV VARCHAR2(30); bAtivo BOOLEAN; BEGIN bAtivo := FALSE; /* Política 1 — se usuário for executivo então poderá ver tudo. */ lpszGV := 'DSS_EXECUTIVO'; SELECT COUNT(*) INTO nCont FROM DBA_ROLE_PRIVS WHERE GRANTEE = USER AND GRANTED_ROLE = lpszGV; IF (nCont > 0) THEN INSERT INTO dss_alcada_visao (tipo, chave) SELECT 'CR', semel.codi_cc FROM dss_centro_custo semel WHERE codi_cc != 'GLOBAL' ; INSERT INTO dss_alcada_visao (tipo, chave) SELECT DECODE (LENGTH (codi_componente), 2, 'DR', 'AR'), semel.codi_componente FROM dss_estrutura_atech semel WHERE semel.codi_componente != '--'; INSERT INTO dss_alcada_visao (tipo, chave) VALUES ('**','*********'); bAtivo := TRUE; /* Política 2 — se usuário tiver algum tipo de associação com o centro de custo então monta a alçada de visão correta. */ ELSE lpszGV := 'DSS_RESPONSAVEL_CC'; SELECT COUNT(*) INTO nCont FROM DBA_ROLE_PRIVS WHERE GRANTEE = USER AND GRANTED_ROLE = lpszGV; IF (nCont > 0) THEN INSERT INTO dss_alcada_visao (tipo, chave) SELECT DISTINCT 'CR', semel.codi_cc FROM dss_colaborador colab INNER JOIN dss_mapa_responsabilidade mapa ON (colab.iden_colab = mapa.iden_colab) JOIN dss_centro_custo igual ON (mapa.codi_cc = igual.codi_cc) JOIN dss_centro_custo semel ON (semel.codi_cc LIKE (igual.codi_cc || '%')) WHERE colab.username = USER; INSERT INTO dss_alcada_visao (tipo, chave) SELECT DISTINCT DECODE(LENGTH(semel.codi_componente), 2, 'DR', 'AR'), semel.codi_componente FROM dss_colaborador colab JOIN dss_estrutura_atech igual ON (colab.iden_colab = igual.iden_colab_resp) JOIN dss_estrutura_atech semel ON (semel.codi_componente LIKE (igual.codi_componente || '%')) WHERE colab.username = USER; bAtivo := TRUE; END IF; END IF; /* Se o usuário for DBA então não registra o alerta de logon no DSS. */ SELECT COUNT(*) INTO nCont FROM DBA_ROLE_PRIVS WHERE GRANTEE = USER AND GRANTED_ROLE = 'DBA'; IF (nCont > 0) THEN bAtivo := FALSE; END IF; IF (bAtivo = TRUE) THEN SYS_DSS.DSS_ALERTA.registrarAlerta ('LOGIN', USER, 40005, USER || '%s' || lpszGV); END IF; END tg_dss_server_alogon; / Avertissement : Déclencheur créé avec erreurs de compilation. 10:43:19 SQL> SHOW ERR TRIGGER sys.tg_dss_server_alogon Erreurs pour TRIGGER SYS.TG_DSS_SERVER_ALOGON : LINE/COL ERROR -------- ----------------------------------------------------------------- 16/5 PL/SQL: SQL Statement ignored 16/17 PL/SQL: ORA-00942: table or view does not exist 24/5 PL/SQL: SQL Statement ignored 24/17 PL/SQL: ORA-00942: table or view does not exist 33/5 PL/SQL: SQL Statement ignored 33/17 PL/SQL: ORA-00942: table or view does not exist 48/7 PL/SQL: SQL Statement ignored 48/19 PL/SQL: ORA-00942: table or view does not exist 60/7 PL/SQL: SQL Statement ignored 60/19 PL/SQL: ORA-00942: table or view does not exist Entretanto: USER est "SYS" 11:02:23 SQL> SELECT COUNT(*) FROM DBA_ROLE_PRIVS; COUNT(*) ---------- 228 Ecoulé : 00 :00 :00.01 11:31:18 SQL> SELECT COUNT (*) FROM dss_centro_custo semel WHERE codi_cc != 'GLOBAL'; 11:31:26 COUNT(*) ---------- 957 Ecoulé : 00 :00 :00.19 11:31:27 SQL> 11:31:27 SQL> Agradeço antecipadamente! -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3040 7300 r155 gTalk: xmpp:[EMAIL PROTECTED] +55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803 +55 (11) 5685 2219 MSN: msnim:[EMAIL PROTECTED]