No Oracle Database, o arquivo sqlnet.ora é o responsável por implementar o profile responsável por habilitar e configurar features do Oracle Net Services. Através dele podem ser especificados quais naming methods podem ser usados para a conexão com o banco de dados, habilitar logging e tracing, e inclusive controlar o acesso ao banco de dados, que é o foco desse artigo.
Como habilitar
Por padrão, o Oracle não realiza o controle de acesso das conexões do banco de dados. Para que seja possível controlar o acesso, o parâmetro TCP.VALIDNODE_CHECKING precisa ser configurado com o valor YES no sqlnet.ora.
Além disso, outros dois parâmetros devem ser configurados para excluir ou incluir IPs (IPv4 ou IPv6) e/ou hostnames nas regras de acesso ao banco de dados:
- TCP.EXCLUDED_NODES: contém a lista de IPs e/ou hostnames que terão acesso negado ao tentar se conectar ao banco de dados;
- TCP.INVITED_NODES: contém a lista de IPs e/ou hostnames que terão acesso permitido ao tentar se conectar ao banco de dados. Este parâmetro tem precedência sobre a lista especificada em TCP.EXCLUDED_NODES, caso ambos estejam configurados;
Para ambos os parâmetros, são permitidos múltiplos valores, inclusive com o uso de wildcards ou blocos CIDR, como no exemplo abaixo:
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) TCP.VALIDNODE_CHECKING=YES TCP.INVITED_NODES=(192.168.1.10,192.168.100.*,appserver.mydomain) TCP.EXCLUDED_NODES=(192.168.101.*,192.168.1.13,appserver2.mydomain)
Lembrando que após as alterações serem feitas no sqlnet.ora, um reload é necessário no listener para que as alterações entrem em vigor (lsnrctl reload), pois é ele quem irá permitir ou negar o acesso ao banco de dados, realizando a validação da origem antes da criação do server process para a sessão.
Comportamento do acesso negado
Caso um client que esteja presente na lista do parâmetro TCP.EXCLUDED_NODES tente realizar uma conexão com o banco de dados, ele receberá o erro ORA-17002: I/O error:

Conclusão
Esse controle de acesso é parecido com o controle feito pelo firewall, com a diferença que o firewall consegue gerir o permissionamento de qualquer protocolo e porta, enquanto o sqlnet.ora controla apenas as conexões via Oracle Net. Sendo assim, esse tipo de configuração a nível de profile pode ser usado quando não existe um controle do firewall por parte do DBA, adicionando uma camada extra de segurança ao ambiente.
