Tabela só permitir consulta após determinada hora?

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
ffkraemer
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Seg, 10 Out 2011 4:38 pm

Boa tarde!

Gostaria de saber como posso limitar as consultas em uma tabela? Esta limitação seria para que a partir de um certo horário, ela permita consultas. Antes do horário estipulado, não permitir nenhum select.

Desde já, agradeço pela ajuda!
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Você pode criar uma VIEW baseada na sua tabela.
Daí dentro da VIEW, você coloca uma restrição de horário. Algo assim:

Selecionar tudo

SELECT *
FROM sua_tabela
WHERE blablabla
  AND TO_CHAR( SYSDATE, 'HH24') IN ( 11,12,13 )
Dessa forma, os dados só vão aparecer das 11:00 até 13:59.
É uma idéia.
ffkraemer
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Seg, 10 Out 2011 4:38 pm

Opa!

Primeiramente, muito obrigado pela atenção e ajuda.

Porém, acredito que não resolva exatamente...

No caso, eu necessito criar uma tabela e esta só deve permitir consultas a partir de 10h. Eu pensei em criar uma function ou uma trigger. Mas andei pesquisando e informaram que não é possível criar triggers para selects...

Aguardo uma luz... rsrs

Abraço!
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Pra que você quer fazer isso?

Porque não trata pela aplicação?

att
Diego
ffkraemer
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Seg, 10 Out 2011 4:38 pm

Olá, Diego.

Primeiramente, obrigado pela atenção.

Não há possibilidade de criar pela aplicação. Solicitaram que o banco cuidasse disto... entende?

Por isso necessito criar alguma restrição ou coisa do tipo mas já catei por tudo e nada...
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

certo, mas você não disse o porque?

quem vai estar conectando no banco e tentando gerar essa conexao?
uma pessoa?
um job?
enfim, talvez tenha algum jeito de filtrar isso..

talvez pode jogar esse processo que você quer restringir, pra que ele conecte com outro usuário, assim, numa trigger de logon poderia verificar se esta dentro do periodo permitido,..

diga como vai acontecer que a gente pode tentar sugerir alguma gambiarra, porque eu desconheco alguma feature que permita isso...

talvezzzzzzzz fine-Grained auditing http://www.oracle.com/technetwork/datab ... 83815.html
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

pensei em mais uma opção,

via grant/revoke, usando um job nos horarios,

as 10 ele roda o job e da revoke no privilegio de SELECT da tabela,
as 16 ele roda o job e da grant no privilegio de SELECT da tabela,

funcionaria...

mas na aplicação vai dar erro...

uma saida tambem seria uma view, onde um job crie ele dinamicamente,
ai quando não quer que resulet dados você coloca um where 1 = 2, =)

assim a aplicação consulta ela e não retorna nada, e depois o job recria sem o 1 = 2, voltando a trazer os dados...
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

ffkraemer,

Desculpe, mas eu concordo com as sugestões de dr_gori e diegolenhardt.

Acho que uma view para esta tabela que você vai criar seria a solução "mais elegante" para seu problema.

Motivos:

- Sua aplicação poderia ser configurada para acessar somente VIEW e não a TABELA;
- Você pode restringir (revoke) qualquer SELECT a esta TABELA, obrigando os usuários
(SQL*Plus/Aplicação) a acessar somente pela VIEW;

Abraços,

Sergio Coutinho
ffkraemer
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Seg, 10 Out 2011 4:38 pm

Pessoal, MUITO obrigado pela atenção.

A solução da view parece realmente ser a mais adequada. Irei implementar desta forma e retorno dizendo o resultado.

Fiquem com Deus.

Abraço!
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

beleza, se precisar de algo posta aí...

e não esquece de postar o resultado..

=)
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

se você quiser alguma solução mais profissional você pode usar o "Oracle Label Security" ou o "Oracle Database Vault" que deve ser um pouco dificil de configurar e eu nunca usei nenhum deles :D

se eu não me engano o label security filtra os dados que cada usuário pode ver e chega até nível de esconder as colunas dos usuários, como campo salário de uma tabela, que só pode ser visualizada pelo dono da empresa por exemplo ou os registros de vendas que só podem ser vistos pelos usuários de sua unidade.
Mais acho que o Label Security não deva ter esta opção de horario.

O Database Voult já deve fazer isso. O Database Voult eu não conhço muito mais eu sei que nele tem muitas opções de filtragem de dados, até de usuário que conectam no banco em tal horario ele filtra.

att...
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes