{"id":2317,"date":"2016-11-04T11:30:28","date_gmt":"2016-11-04T13:30:28","guid":{"rendered":"http:\/\/www.dbarj.com.br\/?page_id=2317"},"modified":"2020-01-17T07:01:16","modified_gmt":"2020-01-17T10:01:16","slug":"oratotp-oracle-time-based-one-time-password","status":"publish","type":"page","link":"https:\/\/www.dbarj.com.br\/pt-br\/oratotp-oracle-time-based-one-time-password\/","title":{"rendered":"OraTOtP ( Oracle Time-based One-time Password )"},"content":{"rendered":"<h1><strong>OraTOtP<\/strong><\/h1>\n<p><strong>OraTOtP<\/strong> ( Oracle Time-based One-time Password ) \u00e9 uma ferramenta gratuita que adiciona uma camada de seguran\u00e7a extra de <strong>Autentica\u00e7\u00e3o em 2 Etapas<\/strong>\u00a0ao conceder as permiss\u00f5es a um usu\u00e1rio de executar qualquer instru\u00e7\u00e3o em sua Base de Dados\u00a0Oracle.<\/p>\n<p>Exemplos de uso do OraTOtP:<\/p>\n<ul>\n<li>Adicionar uma camada extra de seguran\u00e7a aos usu\u00e1rio do BD, tornando as senhas por si s\u00f3 menos importantes.<\/li>\n<li>Caso algu\u00e9m descubra a senha se algum usu\u00e1rio da base, ele ter\u00e1 acesso limitado ou nenhum acesso aos objeto do BD.<\/li>\n<li>Voc\u00ea precisa estar em compilance com alguma norma de seguran\u00e7a (ex:\u00a0PCI DSS Requirement 8.3)<\/li>\n<\/ul>\n<p>Testada em todas as vers\u00f5es de BD Oracle (SE e EE) de <strong>10gR2 at\u00e9 a \u00faltima 12c.<\/strong><\/p>\n<h1><strong>1. Como funciona<\/strong><\/h1>\n<p>Depois que o usu\u00e1rio se conecta, as suas roles ser\u00e3o desativadas e a \u00fanica maneira de habilit\u00e1-las \u00e9 digitando o token correto de 6 d\u00edgitos que \u00e9 gerado usando um aplicativo de celular. O DBA pode definir facilmente quais destas roles necessitam da <strong>Autentica\u00e7\u00e3o em 2 Etapas<\/strong> antes de serem ativadas por algu\u00e9m.<\/p>\n<p>A ferramenta OraTOtP \u00e9 muito f\u00e1cil de configurar e utilizar, n\u00e3o exigindo grandes habilidades para que qualquer um possa habilit\u00e1-lo.<\/p>\n<p>Voc\u00ea n\u00e3o deve habilitar a Autentica\u00e7\u00e3o em 2 Etapas para roles usadas por usu\u00e1rios com acesso aut\u00f4nomo (programas, tarefas em lote, etc) a menos que haja alguma interface de aplicativo para digitar o token. Tamb\u00e9m <strong>n\u00e3o<\/strong> \u00e9 recomendado habilit\u00e1-lo para roles default (DBA, RESOURCE, etc) pois pode impactar processos internos do pr\u00f3prio Oracle, o mais indicado \u00e9 que se clone estas roles com outro nome para ativar a prote\u00e7\u00e3o.<\/p>\n<h1><strong>2. Recursos<\/strong><\/h1>\n<ul>\n<li>Se voc\u00ea sempre se conectar a partir da mesma aplica\u00e7\u00e3o e m\u00e1quina, voc\u00ea pode solicitar a ferramenta que &#8220;confie&#8221; na sua origem por 7 dias. Desta forma, n\u00e3o ser\u00e1 necess\u00e1rio digitar o token novamente caso se conecte no banco de dados a partir do mesmo local.<\/li>\n<li>O usu\u00e1rio pode reconfigurar o 2-Factor se trocar de telefone ou aplicativo.<\/li>\n<li>Prote\u00e7\u00e3o contra ataques de for\u00e7a bruta de tokens.<\/li>\n<li>A chave geradora do token \u00e9 armazenada criptografada dentro da base de dados. O usu\u00e1rio pode fornecer opcionalmente uma senha de criptografia para torn\u00e1-la irrevers\u00edvel por qualquer pessoa (nem mesmo eu).<\/li>\n<\/ul>\n<h1><strong>3. Instru\u00e7\u00f5es<\/strong><\/h1>\n<p>1- Baixe um aplicativo de Authenticator para o seu celular. Eu recomendo o &#8220;<strong>Google Authenticator<\/strong>&#8220;, por ser de gra\u00e7a, simples e est\u00e1vel:<\/p>\n<ul>\n<li><strong>Android<\/strong>:\u00a0https:\/\/play.google.com\/store\/apps\/details?id=com.google.android.apps.authenticator2<\/li>\n<li><strong>iOS<\/strong>:\u00a0https:\/\/itunes.apple.com\/br\/app\/google-authenticator\/id388497605<\/li>\n<li><strong>Windows Phone<\/strong>:\u00a0https:\/\/www.microsoft.com\/en-us\/store\/p\/authenticator\/9wzdncrfj3rj<\/li>\n<\/ul>\n<p style=\"padding-left: 30px;\">Existem dezenas\u00a0de outros aplicativos baseados no algoritmo TOTP. Sinta-se \u00e0 vontade para escolher o de sua prefer\u00eancia.<\/p>\n<p>2- Instale a ferramenta OraTOtP em seu BD (verifique a se\u00e7\u00e3o &#8220;<strong>Instala\u00e7\u00e3o<\/strong>&#8221; para mais detalhes).<\/p>\n<p>3- CRIE ou ALTERE qualquer ROLE para poder ser ativada apenas ap\u00f3s a autentica\u00e7\u00e3o em 2 Etapas ter sido conclu\u00edda (verifique a se\u00e7\u00e3o &#8220;<strong>Exemplos de Uso<\/strong>&#8221; para alguns casos).<\/p>\n<p><strong><span style=\"color: #800000;\">OBS: Certifique-se que a hora do seu servidor est\u00e1 sincronizada com o UTC e na timezone correta.<\/span><\/strong><\/p>\n<h1><strong>4. Objetos Criados<\/strong><\/h1>\n<p>O OraTOtP ir\u00e1 criar 1 novo schema (cujo nome \u00e9 definido durante a instala\u00e7\u00e3o) para manter as packages e tabelas que possuir\u00e3o as configura\u00e7\u00f5es do\u00a0Time-based One-time Password. Esse usu\u00e1rio ser\u00e1 lockado e com senha expirada e n\u00e3o \u00e9 para ser utilizado por qualquer um.<\/p>\n<p>A ferramenta consiste em:<\/p>\n<ul>\n<li>1 Novo Schema com:\n<ul>\n<li>3 Packages e seus Bodys<\/li>\n<li>1 Procedure<\/li>\n<li>1 Trigger<\/li>\n<li>3 Tabelas e suas Constraints e \u00cdndices<\/li>\n<\/ul>\n<\/li>\n<li>2 Sin\u00f4nimos P\u00fablicos (para evitar a necessidade de digitar o nome do schema)<\/li>\n<li>1 Context (para controlar Autentica\u00e7\u00e3o em 2 Etapas)<\/li>\n<\/ul>\n<p>Caso o seu Banco de Dados seja <strong>Enterprise Edition<\/strong>, o script tamb\u00e9m criar\u00e1 1 fun\u00e7\u00e3o e 4 Policies de VPD para proteger as tabelas do schema.<\/p>\n<p>Caso possua o <strong>Database Vault Option<\/strong>, o script tamb\u00e9m ir\u00e1 criar um realm para proteger todos os objetos do schema.<\/p>\n<h3><span style=\"text-decoration: underline;\">Existem apenas 3 objetos que precisam ser conhecidos:<\/span><\/h3>\n<p>&nbsp;<\/p>\n<ol>\n<li>Package <strong>TWOFACTOR<\/strong> (utilizado para efetuar todas as tarefas relacionadas ao 2-Factor. Privil\u00e9gios de execu\u00e7\u00e3o concedidos ao PUBLIC).<\/li>\n<li>Package <strong>TWOFACTOR_ADMIN<\/strong> (utilizado para efetuar todas as tarefas de administra\u00e7\u00e3o relacionadas ao 2-Factor. Privil\u00e9gios de execu\u00e7\u00e3o devem ser concedidos apenas aos DBAs).<\/li>\n<li>Procedure <strong>ENABLE_ROLE<\/strong> (utilizada para ativar qualquer role protegida pelo 2-Factor. Privil\u00e9gios de execu\u00e7\u00e3o concedidos ao PUBLIC).<\/li>\n<\/ol>\n<p>Esses 3 objetos acima est\u00e3o mais detalhados na se\u00e7\u00e3o &#8220;<strong>Documenta\u00e7\u00e3o<\/strong>&#8220;.<\/p>\n<h1><strong>5. Instala\u00e7\u00e3o<\/strong><\/h1>\n<p>Fa\u00e7a o download do arquivo ZIPADO (verifique a se\u00e7\u00e3o &#8220;<strong>Download<\/strong>&#8221; para maiores informa\u00e7\u00f5es) e extraia todos os arquivos.<\/p>\n<p>Abra <strong>SQL*Plus<\/strong> e execute o INSTALL.sql.<\/p>\n<h4><strong>Exemplo 1:<\/strong><\/h4>\n<ul>\n<li>Instalar para um BD local.<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">[oracle@mydbserver ~]$ sqlplus \/nolog\r\n\r\nSQL*Plus: Release 12.1.0.2.0 Production on Tue Oct 18 13:54:08 2016\r\n\r\nCopyright (c) 1982, 2014, Oracle.  All rights reserved.\r\n\r\nSQL&gt; @INSTALL\r\nSchema Name for 2-Factor [TOTP]: TOTP\r\nString to connect as SYS [\/ as sysdba]: \/ as sysdba\r\nConnected.\r\nDB Vault Users script skipped - Database Vault not enabled.\r\nConnected.\r\nUser created.\r\nConnected.\r\nUser privs granted.\r\nConnected.\r\nObjects created.\r\nPolicies created.\r\nConnected.\r\nDB Vault Realms script skipped - Database Vault not enabled.\r\n=&gt; SCRIPT EXECUTED SUCCESSFULLY! &lt;=<\/pre>\n<h4><strong>Exemplo 2:<\/strong><\/h4>\n<ul>\n<li>Instalar para um BD remoto usando TNS Names.<\/li>\n<li>Note que neste caso o DB Vault est\u00e1 ativo. Neste caso, o script solicita algumas informa\u00e7\u00f5es extras.<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">[oracle@mydbserver ~]$ sqlplus \/nolog\r\n\r\nSQL*Plus: Release 12.1.0.2.0 Production on Tue Oct 18 11:20:13 2016\r\n\r\nCopyright (c) 1982, 2014, Oracle.  All rights reserved.\r\n\r\nSQL&gt; @INSTALL\r\nSchema Name for 2-Factor [TOTP]:\r\nString to connect as SYS [\/ as sysdba]: sys\/Oracle.123@orcl as sysdba\r\nConnected.\r\nOracle Database Vault Detected.\r\nString to connect as DV Acct Mgr [\/ as sysdba]: dvacctmgr\/Oracle.123@orcl\r\nString to connect as DV Owner [\/ as sysdba]: dvowner\/Oracle.123@orcl\r\nString to connect as DBA [\/ as sysdba]: system\/Oracle.123@orcl\r\nConnected.\r\nUser created.\r\nConnected.\r\nUser privs granted.\r\nConnected.\r\nObjects created.\r\nPolicies created.\r\nConnected.\r\nRealm created.\r\n=&gt; SCRIPT EXECUTED SUCCESSFULLY! &lt;=<\/pre>\n<h4><strong>Exemplo 3:<\/strong><\/h4>\n<ul>\n<li>Instalar para um BD remoto usando EZ Connect.<\/li>\n<li>Note que aqui o nome do Schema \u00e9 definido como GAUTH em vez de TOTP.<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">[oracle@mydbserver ~]$ sqlplus \/nolog\r\n\r\nSQL*Plus: Release 12.1.0.2.0 Production on Tue Oct 18 11:20:13 2016\r\n\r\nCopyright (c) 1982, 2014, Oracle.  All rights reserved.\r\n\r\nSQL&gt; @INSTALL\r\nSchema Name for 2-Factor [TOTP]: GAUTH\r\nString to connect as SYS [\/ as sysdba]: sys\/Oracle.123@10.1.1.5\/orcl as sysdba\r\nConnected.\r\nDB Vault Users script skipped - Database Vault not enabled.\r\nConnected.\r\nUser created.\r\nConnected.\r\nUser privs granted.\r\nConnected.\r\nObjects created.\r\nPolicies created.\r\nConnected.\r\nDB Vault Realms script skipped - Database Vault not enabled.\r\n=&gt; SCRIPT EXECUTED SUCCESSFULLY! &lt;=<\/pre>\n<h1><strong>6.Documenta\u00e7\u00e3o<\/strong><\/h1>\n<h4><strong>TWOFACTOR:<\/strong><\/h4>\n<p><strong>Este pacote deve ser concedido a cada usu\u00e1rio do BD e \u00e9 respons\u00e1vel por permitir ao usu\u00e1rio configurar e autenticar no 2-Fator. S\u00f3 depois disso ele ser\u00e1 capaz de HABILITAR qualquer role protegida com 2-Factor.<\/strong><\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\"><strong>SETUP<\/strong>;<\/span><br \/>\nConfigurar\u00e1 o usu\u00e1rio conectado e gerar\u00e1 uma URL com um QR Code. Este \u00e9 o primeiro passo que deve ser feito por qualquer pessoa. Scaneie o c\u00f3digo gerado com o seu aplicativo para celular. Antes de executar esta procedure, n\u00e3o se esque\u00e7a de ativar SERVEROUTPUT.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\"><strong>VALIDATE\u00a0<\/strong>(PCODE IN VARCHAR2);<\/span><br \/>\nDepois que o usu\u00e1rio estiver configurado, voc\u00ea deve valid\u00e1-lo fornecendo um c\u00f3digo que \u00e9 gerado pelo seu aplicativo. A valida\u00e7\u00e3o prova que voc\u00ea configurou o aplicativo para celular corretamente e o c\u00f3digo que est\u00e1 sendo gerado \u00e9 v\u00e1lido. Somente depois que o usu\u00e1rio \u00e9 validado que ele ser\u00e1 capaz de autenticar e habilitar roles que s\u00e3o protegidos pela Autentica\u00e7\u00e3o em 2 Etapas.<\/p>\n<p style=\"padding-left: 30px;\">Par\u00e2metro:<\/p>\n<p style=\"padding-left: 90px;\">PCODE &#8211; Forne\u00e7a o c\u00f3digo gerado pelo aplicativo para celular.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\"><strong>AUTHENTICATE\u00a0<\/strong>(PCODE IN VARCHAR2);<\/span><br \/>\nAgora que o usu\u00e1rio est\u00e1 configurado e o gerador de c\u00f3digo validado, ap\u00f3s cada novo login voc\u00ea precisar\u00e1 autentic\u00e1-lo para ser capaz de ativar as roles e seus privil\u00e9gios.<\/p>\n<p style=\"padding-left: 30px;\">Par\u00e2metro:<\/p>\n<p style=\"padding-left: 90px;\">PCODE &#8211; Forne\u00e7a o c\u00f3digo gerado pelo aplicativo para celular.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\"><strong>DECONFIG\u00a0<\/strong>(PCODE IN VARCHAR2 DEFAULT NULL);<\/span><br \/>\nDesfaz e limpa qualquer configura\u00e7\u00e3o do usu\u00e1rio. \u00datil se voc\u00ea alterar de aplicativo ou de telefone ou quiser reconfigurar seu gerador de c\u00f3digos. \u00c9 necess\u00e1rio fornecer um c\u00f3digo v\u00e1lido caso o usu\u00e1rio j\u00e1 tiver sido validado. Se voc\u00ea perdeu seu aplicativo de gera\u00e7\u00e3o de c\u00f3digo e n\u00e3o consegue executar a DECONFIG, solicite suporte ao administrador da ferramenta.<\/p>\n<p style=\"padding-left: 30px;\">Par\u00e2metro:<\/p>\n<p style=\"padding-left: 90px;\">PCODE &#8211; Forne\u00e7a o c\u00f3digo gerado pelo aplicativo para celular caso o usu\u00e1rio j\u00e1 tenha sido validado.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\"><strong>REMEMBER\u00a0<\/strong>(PCODE IN VARCHAR2);<\/span><br \/>\nEssa procedure lembrar\u00e1 as informa\u00e7\u00f5es da m\u00e1quina, aplicativo e usu\u00e1rios de origem da sua conex\u00e3o por 7 dias. Desta forma, esse local ser\u00e1 definido como &#8220;confi\u00e1vel&#8221;. Durante esse per\u00edodo, quando voc\u00ea estabelecer uma nova conex\u00e3o desta localidade voc\u00ea j\u00e1 ser\u00e1 automaticamente autenticado. Precisar\u00e1 apenas ativar a role.<\/p>\n<p style=\"padding-left: 30px;\">Par\u00e2metro:<\/p>\n<p style=\"padding-left: 90px;\">PCODE &#8211; Forne\u00e7a o c\u00f3digo gerado pelo aplicativo para celular.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\"><strong>FORGET<\/strong>;<\/span><br \/>\nRemover\u00e1 todas as conex\u00f5es de origem marcadas como confi\u00e1veis e associadas ao seu usu\u00e1rio.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\"><strong>SETSECRETPASS\u00a0(PPASS IN VARCHAR2);<\/strong><\/span><br \/>\nOpcionalmente, voc\u00ea pode adicionar uma senha para tornar a &#8220;shared secret&#8221; da gera\u00e7\u00e3o de c\u00f3digo irrevers\u00edvel por qualquer pessoa.<\/p>\n<p style=\"padding-left: 30px;\">Par\u00e2metro:<\/p>\n<p style=\"padding-left: 90px;\">PPASS &#8211; Voc\u00ea pode definir qualquer senha com at\u00e9 30 caracteres. Aten\u00e7\u00e3o, isso n\u00e3o tem nada a ver com a senha de sua conta de usu\u00e1rio, esta aqui \u00e9 usada para proteger e criptografar sua gera\u00e7\u00e3o de c\u00f3digo. Caso definido antes do SETUP inicial, sera necess\u00e1rio executar esta procedure sempre antes de passar o PCODE como par\u00e2metro de qualquer outra procedure.<\/p>\n<h4><strong>TWOFACTOR_ADMIN:<\/strong><\/h4>\n<p><strong>Essa package \u00e9 muito semelhante \u00e0 TWOFACTOR, exceto que tamb\u00e9m \u00e9 poss\u00edvel gerenciar outros usu\u00e1rios com esta. Desta forma, ela deve ser concedida apenas para administradores do 2-Factor (ou DBA&#8217;s). Basicamente, todas as subprocedures s\u00e3o as mesmos adicionando os par\u00e2metros &#8220;PUSER&#8221; e &#8220;PPASS&#8221;.<\/strong><\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\"><strong>SETUP<\/strong> (PUSER IN VARCHAR2, PPASS IN VARCHAR2 DEFAULT NULL, PGAP IN NUMBER DEFAULT NULL);<\/span><br \/>\nSemelhante \u00e0\u00a0TWOFACTOR.SETUP, exceto que ele ir\u00e1 configurar o usu\u00e1rio especificado pelo par\u00e2metro PUSER (n\u00e3o o usu\u00e1rio da sess\u00e3o).<\/p>\n<p style=\"padding-left: 30px;\">Par\u00e2metro:<\/p>\n<p style=\"padding-left: 90px;\">PUSER &#8211; Nome do usu\u00e1rio afetado pela procedure.<\/p>\n<p style=\"padding-left: 90px;\">PPASS &#8211; Opcionalmente, voc\u00ea pode adicionar uma senha para tornar a gera\u00e7\u00e3o de c\u00f3digo irrevers\u00edvel por qualquer pessoa.<\/p>\n<p style=\"padding-left: 90px;\">PGAP &#8211; Intervalo de tempo em segundos para tamb\u00e9m aceitar c\u00f3digos com base em erros de rel\u00f3gio. Um novo c\u00f3digo \u00e9 gerado a cada 30 segundos, no entanto, para evitar problemas, por padr\u00e3o (se a entrada for nula), adicionamos um intervalo de 480 segundos (8 minutos) = 4 minutos para cima e para baixo. Isso significa que se o rel\u00f3gio do seu aplicativo marcar 12h00 e o rel\u00f3gio do servidor for 12h04, o c\u00f3digo gerado ainda estar\u00e1 v\u00e1lido. O limite aceito \u00e9 de 1200 segundos (20 minutos) = 10 minutos para cima e para baixo.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\"><strong>VALIDATE<\/strong> (PUSER IN VARCHAR2, PCODE IN VARCHAR2, PPASS IN VARCHAR2 DEFAULT NULL);<\/span><br \/>\nSemelhante \u00e0\u00a0TWOFACTOR.VALIDATE, exceto que ele ir\u00e1 validar o usu\u00e1rio especificado pelo par\u00e2metro PUSER (n\u00e3o o usu\u00e1rio da sess\u00e3o).<\/p>\n<p style=\"padding-left: 30px;\">Par\u00e2metro:<\/p>\n<p style=\"padding-left: 90px;\">PUSER &#8211; Nome do usu\u00e1rio afetado pela procedure.<\/p>\n<p style=\"padding-left: 90px;\">PCODE &#8211; Forne\u00e7a o c\u00f3digo gerado pelo aplicativo para celular.<\/p>\n<p style=\"padding-left: 90px;\">PPASS &#8211; Se o usu\u00e1rio tiver feito a configura\u00e7\u00e3o inicial com uma senha, digite-a aqui para decodificar os c\u00f3digos.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\"><strong>AUTHENTICATE<\/strong> (PCODE IN VARCHAR2, PPASS IN VARCHAR2 DEFAULT NULL);<\/span><br \/>\nSemelhante \u00e0\u00a0TWOFACTOR.AUTHENTICATE. N\u00e3o \u00e9 poss\u00edvel autenticar para outro usu\u00e1rio.<\/p>\n<p style=\"padding-left: 30px;\">Par\u00e2metro:<\/p>\n<p style=\"padding-left: 90px;\">PCODE &#8211; Forne\u00e7a o c\u00f3digo gerado pelo aplicativo para celular.<\/p>\n<p style=\"padding-left: 90px;\">PPASS &#8211; Se voc\u00ea tiver feito a configura\u00e7\u00e3o inicial com uma senha, digite-a aqui para decodificar os c\u00f3digos.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\"><strong>DECONFIG<\/strong> (PUSER IN VARCHAR2, PCODE IN VARCHAR2 DEFAULT NULL, PPASS IN VARCHAR2 DEFAULT NULL, PISADMIN IN BOOLEAN DEFAULT TRUE);<\/span><br \/>\nSemelhante \u00e0\u00a0TWOFACTOR.DECONFIG, exceto que ele ir\u00e1 desconfigurar o usu\u00e1rio especificado pelo par\u00e2metro PUSER (n\u00e3o o usu\u00e1rio da sess\u00e3o).<\/p>\n<p style=\"padding-left: 30px;\">Par\u00e2metro:<\/p>\n<p style=\"padding-left: 90px;\">PUSER &#8211; Nome do usu\u00e1rio afetado pela procedure.<\/p>\n<p style=\"padding-left: 90px;\">PCODE &#8211; Forne\u00e7a o c\u00f3digo gerado pelo aplicativo para celular. Ignorado caso o PISADMIN for true (comportamento padr\u00e3o).<\/p>\n<p style=\"padding-left: 90px;\">PPASS &#8211; Se o usu\u00e1rio tiver feito a configura\u00e7\u00e3o inicial com uma senha, digite-a aqui para decodificar os c\u00f3digos.<\/p>\n<p style=\"padding-left: 90px;\">PISADMIN &#8211; Quando este par\u00e2metro \u00e9 true (comportamento padr\u00e3o), voc\u00ea n\u00e3o precisa fornecer um c\u00f3digo para desconfigurar usu\u00e1rios j\u00e1 validados.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\"><strong>REMEMBER<\/strong> (PCODE IN VARCHAR2, PPASS IN VARCHAR2 DEFAULT NULL, PINT IN INTERVAL DAY TO SECOND DEFAULT NULL);<\/span><br \/>\nSemelhante \u00e0\u00a0TWOFACTOR.REMEMBER. N\u00e3o \u00e9 poss\u00edvel lembrar as informa\u00e7oes de logins para outro usu\u00e1rio.<\/p>\n<p style=\"padding-left: 30px;\">Par\u00e2metro:<\/p>\n<p style=\"padding-left: 90px;\">PCODE &#8211; Forne\u00e7a o c\u00f3digo gerado pelo aplicativo para celular.<\/p>\n<p style=\"padding-left: 90px;\">PPASS &#8211; Se o usu\u00e1rio tiver feito a configura\u00e7\u00e3o inicial com uma senha, digite-a aqui para decodificar os c\u00f3digos.<\/p>\n<p style=\"padding-left: 90px;\">PINT &#8211; Intervalo de dias para lembrar as credenciais. Se n\u00e3o for especificado, o padr\u00e3o \u00e9 7 dias.<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\"><strong>FORGET<\/strong> (PUSER IN VARCHAR2);<\/span><br \/>\nSemelhante \u00e0\u00a0TWOFACTOR.FORGET, exceto que ele ir\u00e1 remover as conex\u00f5es confi\u00e1veis do usu\u00e1rio especificado pelo par\u00e2metro PUSER (n\u00e3o do usu\u00e1rio da sess\u00e3o).<\/p>\n<p style=\"padding-left: 30px;\">Par\u00e2metro:<\/p>\n<p style=\"padding-left: 90px;\">PUSER &#8211; Nome do usu\u00e1rio afetado pela procedure.<\/p>\n<h4><strong>ENABLE_ROLE:<\/strong><\/h4>\n<p><strong>Essa procedure \u00e9 usada para ativar uma role protegida.<\/strong><\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\"><strong>ENABLE_ROLE<\/strong> (ROLE_NAME IN VARCHAR2);<br \/>\n<\/span>Adicionar\u00e1 a role protegida passada como par\u00e2metro \u00e0 sua lista de roles ativadas, executando &#8220;SET ROLE&#8221;. Voc\u00ea deve estar autenticado no 2-Factor para poder executar esta procedure.<\/p>\n<p style=\"padding-left: 30px;\">Par\u00e2metro:<\/p>\n<p style=\"padding-left: 60px;\">ROLE_NAME &#8211; Nome da role protegida que voc\u00ea deseja ativar em sua sess\u00e3o.<\/p>\n<h3><strong>TABELAS e COLUNAS:<br \/>\n<\/strong>Verifique os coment\u00e1rios nas pr\u00f3prias tabelas e colunas.<\/h3>\n<h1><strong>7. Exemplos de Uso<\/strong><\/h1>\n<p>O primeiro passo \u00e9 criar uma ROLE que voc\u00ea quer que seja protegida pela autentica\u00e7\u00e3o em 2 etapas:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"oracledb\">SQL&gt; CREATE ROLE APPOBJACCESS IDENTIFIED USING TOTP.ENABLE_ROLE;\r\n\r\nRole created.\r\n\r\nSQL&gt;<\/pre>\n<p><em>OBS: Voc\u00ea pode opcionalmente alterar as roles existentes a serem habilitadas somente depois que o usu\u00e1rio estiver autenticado pelo 2-Factor.<\/em><\/p>\n<p>Agora, vamos criar um novo usu\u00e1rio para demonstrar como o sistema funciona:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"oracledb\">SQL&gt; CREATE USER USER1 IDENTIFIED BY \"User1\";\r\n\r\nUser created.\r\n\r\nSQL&gt; GRANT CREATE SESSION TO USER1;\r\n\r\nGrant succeeded.\r\n\r\nSQL&gt; GRANT APPOBJACCESS TO USER1;\r\n\r\nGrant succeeded.\r\n\r\nSQL&gt;<\/pre>\n<p>A role foi criada e concedida ao USER1, vamos tentar conectar e ativar a fun\u00e7\u00e3o:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"oracledb\">SQL&gt; conn User1\/User1\r\nConnected.\r\nSQL&gt; select * from session_roles;\r\n\r\nno rows selected\r\n\r\nSQL&gt; set role APPOBJACCESS;\r\nset role APPOBJACCESS\r\n*\r\nERROR at line 1:\r\nORA-01924: role 'APPOBJACCESS' not granted or does not exist\r\n\r\nSQL&gt; exec enable_role('APPOBJACCESS');\r\nBEGIN enable_role('APPOBJACCESS'); END;\r\n*\r\nERROR at line 1:\r\nORA-20000: User not authenticated in 2Factor.\r\nORA-06512: at \"TOTP.ENABLE_ROLE\", line 14\r\nORA-06512: at line 1\r\n\r\nSQL&gt;<\/pre>\n<p>Como voc\u00ea pode ver, a fun\u00e7\u00e3o n\u00e3o pode ser ativada atrav\u00e9s do comando set. O caminho certo \u00e9 usar a procedure <strong>enable_role<\/strong>, no entanto, o usu\u00e1rio deve autenticar primeiro. Como este usu\u00e1rio ainda n\u00e3o est\u00e1 configurado, vamos configur\u00e1-lo:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"oracledb\">SQL&gt; set serveroutput on\r\nSQL&gt; set lines 1000\r\nSQL&gt; exec twofactor.setup;\r\nhttps:\/\/www.google.com\/chart?chs=200x200&chld=M|0&cht=qr&chl=%6F%74%70%61%75%74%68%3A%2F%2F%74%6F%74%70%2F%55%53%45%52%31%40%4F%52%43%4C%3F%73%65%63%72%65%74%3D%56%53%4D%34%50%52%35%41%4B%56%44%52%47%59%55%35%26%69%73%73%75%65%72%3D%44%42%20%53%65%72%76%65%72%20%2D%20%6F%72%63%6C%2E%75%73%2E%6F%72%61%63%6C%65%2E%63%6F%6D\r\n\r\nPL\/SQL procedure successfully completed.\r\n\r\nSQL&gt;<\/pre>\n<p><em>OBS: Se voc\u00ea esquecer de habilitar o serveroutput antes de executar o procedimento SETUP, basta executar o DECONFIG, habilit\u00e1-lo e, em seguida, executar a configura\u00e7\u00e3o novamente.<\/em><\/p>\n<p>Abra o endere\u00e7o do link retornado em um navegador e scaneie o QR Code usando o &#8220;Google Authenticator&#8221; (ou qualquer outro aplicativo do TOTP que voc\u00ea preferir):<\/p>\n<p id=\"WTcrSot\"><img loading=\"lazy\" decoding=\"async\" width=\"641\" height=\"299\" class=\"size-full wp-image-2291 aligncenter\" src=\"http:\/\/www.dbarj.com.br\/wp-content\/uploads\/2016\/10\/img_57fecd47862d5.png\" alt=\"\" srcset=\"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2016\/10\/img_57fecd47862d5.png 641w, https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2016\/10\/img_57fecd47862d5-300x140.png 300w\" sizes=\"auto, (max-width: 641px) 100vw, 641px\" \/><\/p>\n<p>Depois que seu aplicativo estiver configurado, ele come\u00e7ar\u00e1 a gerar os c\u00f3digos conforme abaixo:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2292\" src=\"http:\/\/www.dbarj.com.br\/wp-content\/uploads\/2016\/10\/WhatsApp-Image-2016-10-12-at-20.47.41-169x300.jpeg\" alt=\"\" width=\"169\" height=\"300\" srcset=\"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2016\/10\/WhatsApp-Image-2016-10-12-at-20.47.41-169x300.jpeg 169w, https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2016\/10\/WhatsApp-Image-2016-10-12-at-20.47.41-576x1024.jpeg 576w, https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2016\/10\/WhatsApp-Image-2016-10-12-at-20.47.41.jpeg 720w\" sizes=\"auto, (max-width: 169px) 100vw, 169px\" \/><br \/>\nAgora \u00e9 poss\u00edvel validar:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"oracledb\">SQL&gt; exec twofactor.validate(682286);\r\n\r\nPL\/SQL procedure successfully completed.\r\n\r\nSQL&gt;<\/pre>\n<p>Com o 2-Factor\u00a0validado, de agora em diante tudo que \u00e9 preciso ap\u00f3s estabelecer novas conex\u00f5es \u00e9 autenticar e ativar a role:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"oracledb\">SQL&gt; select * from session_roles;\r\n\r\nno rows selected\r\n\r\nSQL&gt; exec twofactor.authenticate(390564);\r\n\r\nPL\/SQL procedure successfully completed.\r\n\r\nSQL&gt; exec enable_role('APPOBJACCESS');\r\n\r\nPL\/SQL procedure successfully completed.\r\n\r\nSQL&gt; select * from session_roles;\r\n\r\nROLE\r\n------------------------------\r\nAPPOBJACCESS\r\n\r\nSQL&gt;<\/pre>\n<p>Opcionalmente, voc\u00ea pode solicitar ao sistema de Autentica\u00e7\u00e3o em 2 Etapas para confiar na sua localidade pelos pr\u00f3ximos 7 dias, desta forma n\u00e3o ser\u00e1 necess\u00e1rio reautenticar ap\u00f3s cada novo login vindo desta vindo da mesma m\u00e1quina, terminal, IP, programa e usu\u00e1rio de SO:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"oracledb\">SQL&gt; conn User1\/User1\r\nConnected.\r\nSQL&gt; exec enable_role('APPOBJACCESS');\r\nBEGIN enable_role('APPOBJACCESS'); END;\r\n*\r\nERROR at line 1:\r\nORA-20000: User not authenticated in 2Factor.\r\nORA-06512: at \"TOTP.ENABLE_ROLE\", line 14\r\nORA-06512: at line 1\r\n\r\nSQL&gt; exec twofactor.authenticate(388648);\r\n\r\nPL\/SQL procedure successfully completed.\r\n\r\nSQL&gt; exec enable_role('APPOBJACCESS');\r\n\r\nPL\/SQL procedure successfully completed.\r\n\r\nSQL&gt; exec twofactor.remember(471508);\r\n\r\nPL\/SQL procedure successfully completed.\r\n\r\nSQL&gt; conn User1\/User1\r\nConnected.\r\nSQL&gt; exec enable_role('APPOBJACCESS');\r\n\r\nPL\/SQL procedure successfully completed.\r\n\r\nSQL&gt;\r\n<\/pre>\n<h1><strong>8. Download<\/strong><\/h1>\n<p><a href=\"https:\/\/github.com\/dbarj\/OraTOtP\/archive\/master.zip\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/dbarj\/OraTOtP\/archive\/master.zip<\/a><\/p>\n<blockquote>\n<p style=\"padding-left: 30px;\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nChecksum information<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nName: OraTOtP-1.00.zip<br \/>\nSize: 30248 bytes (0 MB)<br \/>\nCRC32: 9532060D<br \/>\nCRC64: F95F37109D5196B1<br \/>\nSHA256: 2339020753EE758969E2E500D5A4A29DD3D1FDFD9B14844EFD272567D4F54A4F<br \/>\nSHA1: C458801D32AC2B192ABD7AF2FC74099B08E5C269<br \/>\nBLAKE2sp: DF7E1399F2912244A02DEC6EFECEC617277321E0FD35AAB66AD7625F8DB3EA7F<\/p>\n<\/blockquote>\n<b>Gostou? N\u00e3o deixe de comentar ou deixar um \ud83d\udc4d!<\/b>\n<div class='watch-action'><div class='watch-position align-left'><div class='action-like'><a class='lbg-style2 like-2317 jlk' href='javascript:void(0)' data-task='like' data-post_id='2317' data-nonce='de4404f630' rel='nofollow'><img class='wti-pixel' src='https:\/\/www.dbarj.com.br\/wp-content\/plugins\/wti-like-post\/images\/pixel.gif' title='Like' \/><span class='lc-2317 lc'>+1<\/span><\/a><\/div><\/div> <div class='status-2317 status align-left'><\/div><\/div><div class='wti-clear'><\/div>","protected":false},"excerpt":{"rendered":"<p>OraTOtP OraTOtP ( Oracle Time-based One-time Password ) \u00e9 uma ferramenta gratuita que adiciona uma camada de seguran\u00e7a extra de Autentica\u00e7\u00e3o em 2 Etapas\u00a0ao conceder as permiss\u00f5es a um usu\u00e1rio de executar qualquer instru\u00e7\u00e3o em sua Base de Dados\u00a0Oracle. Exemplos de uso do OraTOtP: Adicionar uma camada extra de seguran\u00e7a aos usu\u00e1rio do BD, tornando &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/www.dbarj.com.br\/pt-br\/oratotp-oracle-time-based-one-time-password\/\">Continue lendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2317","page","type-page","status-publish","hentry","nodate","item-wrap"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>OraTOtP ( Oracle Time-based One-time Password ) - DBA - Rodrigo Jorge - Oracle Tips and Guides<\/title>\n<meta name=\"description\" content=\"OraTOtP ( Oracle Time-based One-time Password ) \u00e9 uma ferramenta gratuita que adiciona uma camada de seguran\u00e7a extra de Autentica\u00e7\u00e3o em 2 Etapas no Oracle.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbarj.com.br\/pt-br\/oratotp-oracle-time-based-one-time-password\/\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"14 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/oratotp-oracle-time-based-one-time-password\\\/\",\"url\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/oratotp-oracle-time-based-one-time-password\\\/\",\"name\":\"OraTOtP ( Oracle Time-based One-time Password ) - DBA - Rodrigo Jorge - Oracle Tips and Guides\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/oratotp-oracle-time-based-one-time-password\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/oratotp-oracle-time-based-one-time-password\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2016\\\/10\\\/img_57fecd47862d5.png\",\"datePublished\":\"2016-11-04T13:30:28+00:00\",\"dateModified\":\"2020-01-17T10:01:16+00:00\",\"description\":\"OraTOtP ( Oracle Time-based One-time Password ) \u00e9 uma ferramenta gratuita que adiciona uma camada de seguran\u00e7a extra de Autentica\u00e7\u00e3o em 2 Etapas no Oracle.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/oratotp-oracle-time-based-one-time-password\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/oratotp-oracle-time-based-one-time-password\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/oratotp-oracle-time-based-one-time-password\\\/#primaryimage\",\"url\":\"http:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2016\\\/10\\\/img_57fecd47862d5.png\",\"contentUrl\":\"http:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2016\\\/10\\\/img_57fecd47862d5.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/oratotp-oracle-time-based-one-time-password\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OraTOtP ( Oracle Time-based One-time Password )\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#website\",\"url\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/\",\"name\":\"DBA - Rodrigo Jorge - Oracle Tips and Guides\",\"description\":\"Blog about Databases, Security and High Availability\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/pt-br\\\/#\\\/schema\\\/person\\\/28a44ca3a6633fe4156ad1ea209d40a9\",\"name\":\"DBA RJ\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\",\"url\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\",\"contentUrl\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\",\"width\":712,\"height\":712,\"caption\":\"DBA RJ\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.dbarj.com.br\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/RodrigoJorgePOUG19.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OraTOtP ( Oracle Time-based One-time Password ) - DBA - Rodrigo Jorge - Oracle Tips and Guides","description":"OraTOtP ( Oracle Time-based One-time Password ) \u00e9 uma ferramenta gratuita que adiciona uma camada de seguran\u00e7a extra de Autentica\u00e7\u00e3o em 2 Etapas no Oracle.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbarj.com.br\/pt-br\/oratotp-oracle-time-based-one-time-password\/","twitter_misc":{"Est. tempo de leitura":"14 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.dbarj.com.br\/pt-br\/oratotp-oracle-time-based-one-time-password\/","url":"https:\/\/www.dbarj.com.br\/pt-br\/oratotp-oracle-time-based-one-time-password\/","name":"OraTOtP ( Oracle Time-based One-time Password ) - DBA - Rodrigo Jorge - Oracle Tips and Guides","isPartOf":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/oratotp-oracle-time-based-one-time-password\/#primaryimage"},"image":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/oratotp-oracle-time-based-one-time-password\/#primaryimage"},"thumbnailUrl":"http:\/\/www.dbarj.com.br\/wp-content\/uploads\/2016\/10\/img_57fecd47862d5.png","datePublished":"2016-11-04T13:30:28+00:00","dateModified":"2020-01-17T10:01:16+00:00","description":"OraTOtP ( Oracle Time-based One-time Password ) \u00e9 uma ferramenta gratuita que adiciona uma camada de seguran\u00e7a extra de Autentica\u00e7\u00e3o em 2 Etapas no Oracle.","breadcrumb":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/oratotp-oracle-time-based-one-time-password\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbarj.com.br\/pt-br\/oratotp-oracle-time-based-one-time-password\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.dbarj.com.br\/pt-br\/oratotp-oracle-time-based-one-time-password\/#primaryimage","url":"http:\/\/www.dbarj.com.br\/wp-content\/uploads\/2016\/10\/img_57fecd47862d5.png","contentUrl":"http:\/\/www.dbarj.com.br\/wp-content\/uploads\/2016\/10\/img_57fecd47862d5.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbarj.com.br\/pt-br\/oratotp-oracle-time-based-one-time-password\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dbarj.com.br\/pt-br\/"},{"@type":"ListItem","position":2,"name":"OraTOtP ( Oracle Time-based One-time Password )"}]},{"@type":"WebSite","@id":"https:\/\/www.dbarj.com.br\/pt-br\/#website","url":"https:\/\/www.dbarj.com.br\/pt-br\/","name":"DBA - Rodrigo Jorge - Oracle Tips and Guides","description":"Blog about Databases, Security and High Availability","publisher":{"@id":"https:\/\/www.dbarj.com.br\/pt-br\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbarj.com.br\/pt-br\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":["Person","Organization"],"@id":"https:\/\/www.dbarj.com.br\/pt-br\/#\/schema\/person\/28a44ca3a6633fe4156ad1ea209d40a9","name":"DBA RJ","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png","url":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png","contentUrl":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png","width":712,"height":712,"caption":"DBA RJ"},"logo":{"@id":"https:\/\/www.dbarj.com.br\/wp-content\/uploads\/2019\/09\/RodrigoJorgePOUG19.png"}}]}},"_links":{"self":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/pages\/2317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/comments?post=2317"}],"version-history":[{"count":1,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/pages\/2317\/revisions"}],"predecessor-version":[{"id":4377,"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/pages\/2317\/revisions\/4377"}],"wp:attachment":[{"href":"https:\/\/www.dbarj.com.br\/pt-br\/wp-json\/wp\/v2\/media?parent=2317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}