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/