LAB – Compreendendo o SQLNET.ORA

03 dez

LAB – Compreendendo o SQLNET.ORA

Design sem nome (2)

Introdução

O arquivo "sqlnet.ora”, encontrado em servidores de banco de dados e máquinas clientes, além de ser
responsável por definir os métodos de nomeação do Oracle abrange também diversos outros parâmetros de
configuração.
Incluindo algumas informações, destacadas abaixo, pode-se determinar por exemplo uma verificação para
conferir se as conexões cliente/servidor estão ativas e até mesmo permitir acesso ao banco de dados de um único IP
da rede.

Parâmetros sqlnet.ora Oracle Database Release 18

ACCEPT_MD5_CERTS
ACCEPT_SHA1_CERTS
ADD_SSLV3_TO_DEFAULT
BEQUEATH_DETACH
EXADIRECT_FLOW_CONTROL
EXADIRECT_RECVPOLL
DEFAULT_SDU_SIZE
DISABLE_OOB
HTTPS_SSL_VERSION
IPC.KEYPATH
NAMES.DEFAULT_DOMAIN
NAMES.DIRECTORY_PATH
NAMES.LDAP_AUTHENTICATE_BIND
NAMES.LDAP_CONN_TIMEOUT
NAMES.LDAP_PERSISTENT_SESSION
NAMES.NIS.META_MAP
RECV_BUF_SIZE
SDP.PF_INET_SDP
SEC_USER_AUDIT_ACTION_BANNER
SEC_USER_UNAUTHORIZED_ACCESS_BANNER
SEND_BUF_SIZE
SQLNET.ALLOWED_LOGON_VERSION_CLIENT
SQLNET.ALLOWED_LOGON_VERSION_SERVER
SQLNET.AUTHENTICATION_SERVICES
SQLNET.CLIENT_REGISTRATION
SQLNET.COMPRESSION
SQLNET.COMPRESSION_LEVELS
SQLNET.COMPRESSION_THRESHOLD
SQLNET.CRYPTO_CHECKSUM_CLIENT
SQLNET.CRYPTO_CHECKSUM_SERVER
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER
SQLNET.DBFW_PUBLIC_KEY
SQLNET.DOWN_HOSTS_TIMEOUT
SQLNET.ENCRYPTION_SERVER
SQLNET.ENCRYPTION_TYPES_CLIENT
SQLNET.ENCRYPTION_TYPES_SERVER
SQLNET.EXPIRE_TIME
SQLNET.INBOUND_CONNECT_TIMEOUT
SQLNET.KERBEROS5_CC_NAME
SQLNET.KERBEROS5_CLOCKSKEW
SQLNET.KERBEROS5_CONF
SQLNET.KERBEROS5_CONF_LOCATION
SQLNET.KERBEROS5_KEYTAB
SQLNET.KERBEROS5_REALMS
SQLNET.KERBEROS5_REPLAY_CACHE
SQLNET.OUTBOUND_CONNECT_TIMEOUT
SQLNET.RADIUS_ALTERNATE
SQLNET.RADIUS_ALTERNATE_PORT
SQLNET.RADIUS_ALTERNATE_RETRIES
SQLNET.RADIUS_AUTHENTICATION
SQLNET.RADIUS_AUTHENTICATION_INTERFACE
SQLNET.RADIUS_AUTHENTICATION_PORT
SQLNET.RADIUS_AUTHENTICATION_RETRIES
SQLNET.RADIUS_AUTHENTICATION_TIMEOUT
SQLNET.RADIUS_CHALLENGE_RESPONSE
SQLNET.RADIUS_SECRET
SQLNET.RADIUS_SEND_ACCOUNTING
SQLNET.RECV_TIMEOUT
SQLNET.SEND_TIMEOUT
SQLNET.WALLET_OVERRIDE
SSL_CERT_REVOCATION
SSL_CERT_FILE
SSL_CERT_PATH
SSL_CIPHER_SUITES
SSL_EXTENDED_KEY_USAGE
SSL_SERVER_DN_MATCH
SSL_VERSION
TCP.CONNECT_TIMEOUT
TCP.EXCLUDED_NODES
TCP.INVITED_NODES
TCP.NODELAY
TCP.QUEUESIZE
TCP.VALIDNODE_CHECKING
TNSPING.TRACE_DIRECTORY
TNSPING.TRACE_LEVEL
USE_CMAN
USE_DEDICATED_SERVER
WALLET_LOCATION

Conteúdo SQLNET.ORA

A localização padrão onde este arquivo fica gravado é:

  • Em ambiente Windows: %ORACLE_HOME%\network\admin;
  • Em ambiente UNIX: $ORACLE_HOME/network/admin;

Para verificar o conteúdo do sqlnet.ora, gerado pelo NETCA:

[oracle@ORCL oracle]$ vi $ORACLE_HOME/network/admin/sqlnet.ora

Arquivo sqlnet.ora:

# sqlnet.ora Network Configuration File: /u01/app/oracle/18.3.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

NAMES.DIRECTORY_PATH

Como foi visto anteriormente, o NETCA configura apenas os métodos de nomeação. Pode-se utilizar múltiplos
métodos apenas representando-os em uma lista separada por ponto e vírgula (;) e delimitadas por parênteses.
A ordem é da esquerda para a direita, ou seja, o Oracle irá usar o método TNSNAMES primeiro, caso não consiga
resolver, irá usar o EZCONNECT.

SQLNET_ALLOWED_LOGON_VERSION

Após a atualização para o Oracle Database 12c e versões superiores, é comum encontrar o seguinte erro:
ORA-28040: No matching authentication protocol.


Como solução, ajustamos o arquivo sqlnet.ora adicionando os parâmetros SQLNET_ALLOWED_LOGON_VERSION,
SQLNET.ALLOWED_LOGON_VERSION_CLIENT, SQLNET.ALLOWED_LOGON_VERSION_SERVER.

# sqlnet.ora Network Configuration File: /u01/app/oracle/18.3.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET_ALLOWED_LOGON_VERSION = (8,9,10,11)
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8

SQLNET.EXPIRE_TIME

Este parâmetro, definido no servidor, ativa a detecção de conexão inativa. Após o intervalo de tempo especificado,
expresso em minutos, o servidor verifica se o cliente ainda está conectado. Se identificado que o cliente não está
mais conectado, o processo no servidor será encerrado.
É aconselhado setar o valor entre 1 e 10 minutos.

# sqlnet.ora Network Configuration File: /u01/app/oracle/18.3.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET_ALLOWED_LOGON_VERSION = (8,9,10,11)
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.EXPIRE_TIME=10 

SQLNET.INBOUND_CONNECT_TIMEOUT

Setado este parâmetro, que deverá ser feito em segundos, irá limitar o tempo para um cliente se conectar ao
servidor de banco de dados e fornecer as informações de autenticação necessárias.
O valor padrão é de 60 segundos, portanto se o cliente não puder autenticar dentro de 60 segundos a conexão do
cliente será encerrada.

# sqlnet.ora Network Configuration File: /u01/app/oracle/18.3.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET_ALLOWED_LOGON_VERSION = (8,9,10,11)
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.EXPIRE_TIME=10
SQLNET.INBOUND_CONNECT_TIMEOUT=180

Adicionando este parâmetro no arquivo de configuração “sqlnet.ora” é interessante adicionar o parâmetro
INBOUND_CONNECT_TIMEOUT_LISTENER agora no arquivo de configuração “listener.ora” que pode ser localizado
no mesmo diretório. Vale ressaltar também que este valor deverá ser menor do que o adicionado no sqlnet.ora.

# listener.ora Network Configuration File: /u01/app/oracle/18.3.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

INBOUND_CONNECT_TIMEOUT_LISTENER = 120

TCP.VALIDNODE_CHECKING
TCP.INVITED_NODES
TCP.EXCLUDED_NODES

Como uma simples e eficiente medida de segurança é possível restringir as máquinas que podem acessar o banco de
dados.
Para isso basta adicionar os seguintes parâmetros no arquivo “sqlnet.ora”:

  • TCP.VALIDNODE_CHECKING ativa ou desativa os outros 2 recursos.
  • TCP.INVITED_NODES lista todos os clientes que têm permissão para acessar o banco de dados.
  • TCP.EXCLUDED_NODES especifica quais clientes não têm permissão para acessar o banco de dados. Na
    verdade, nem mesmo o ouvinte (TNSPING).

Obs.: Todos os nomes dos hosts, ou IPs, devem necessariamente serem resolvidos ou então o listener não será
iniciado.

# sqlnet.ora Network Configuration File: /u01/app/oracle/18.3.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET_ALLOWED_LOGON_VERSION = (8,9,10,11)
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.EXPIRE_TIME=10
TCP.VALIDNODE_CHECKING = YES
TCP.INVITED_NODES = (127.0.0.1, 10.150.0.2, 169.254.169.254)
TCP.EXCLUDED_NODES = (192.168.249.203)

Na configuração acima, informamos quais as máquinas que podem acessar o banco de dados, e qual a máquina não
poderá se conectar.
Tentativa de conexão por meio da máquina de IP 192.168.249.203

PS C:\Windows\system32> sqlplus system/Oracle123@"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=temp02
)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))"

SQL*Plus: Release 11.2.0.1.0 Production on Qua Nov 28 23:26:00 2018

Copyright (c) 1982, 2010, Oracle. All rights reserved.

ERROR:
ORA-12537: TNS:conexÒo fechada


Informe o nome do usußrio:

SQLNET.AUTHENTICATION_SERVICES

Este parâmetro é responsável por habilitar um ou mais serviços de autenticação.

  • NONE - para nenhum método de autenticação.
  • ALL - para todos os métodos de autenticação.
  • NTS - para autenticação do sistema operacional nativo do Windows.

No sqlnet.ora adicionamos o parâmetro SQLNET.AUTHENTICATION_SERVICES= (NONE) conforme abaixo.

# sqlnet.ora Network Configuration File: /u01/app/oracle/18.3.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET_ALLOWED_LOGON_VERSION = (8,9,10,11)
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.EXPIRE_TIME=10
SQLNET.AUTHENTICATION_SERVICES= (NONE)

Como utilizamos o método NONE, vamos tentar conectar no banco de dados como SYS sem utilização da senha.

[oracle@ORCL oracle]$sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Qua Nov 28 23:40:30 2018
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle. All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied


Informe o nome do usu▒rio:

Podemos perceber conforme acima que ocorreu erro ao tentar conectar.
Vamos conectar com o login e senha.

[oracle@ORCL oracle]$sqlplus sys/Oracle123 as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Qua Nov 28 23:43:42 2018
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle. All rights reserved.


Conectado a:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0

SQL> 

Conforme acima com o ajuste todos os usuários deverão acessar com o login e senha obrigatoriamente.

Referências

Oracle Help Center - Net Services Reference
https://docs.oracle.com/en/database/oracle/oracle-database/18/netrf/parameters-for-the-sqlnet-ora-file.html#GUID-28040885-6832-4FFC-9258-0EF19FE9A3AC

DBI SERVICES - Oracle 12cR2 – DataGuard and TCP.VALID_NODE_CHECKING
https://blog.dbi-services.com/oracle-12cr2-dataguard-and-tcp-valid_node_checking/

TwelveC
https://twelvec.com/tag/sqlnet-allowed_logon_version_client/

PRASHANT ATRI DBA
https://prashantatridba.wordpress.com/tag/inbound_connect_timeout/