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]

Responder a