Use LDAP para procurar nomes com o Oracle Instant Client

14

Em parte devido a problemas com versões conflitantes ou à instalação completa do cliente Oracle, minha equipe de desenvolvimento (da qual eu sou membro) vem avançando no uso do Oracle Instant Client e evitando a instalação em nossas máquinas de desenvolvimento para a maioria novos projetos. Isso funcionou muito bem, até o ponto em que implantamos a produção com essa configuração. Como somos principalmente uma loja .NET, estamos usando o cliente nativo (com wrappers .NET), em vez do cliente Java.

Agora, um cliente exige que registremos o serviço de banco de dados em um servidor LDAP e utilizemos o servidor LDAP para procurar nomes. Eles têm fornecido sqlnet.orae ldap.oraarquivos (e um arquivo de configuração de criptografia de acompanhamento) que parecem estar corretas. Em particular, o sqlnet.oraarquivo especifica o LDAP como uma fonte possível para procurar nomes de serviços de rede:

names.directory_path=(tnsnames,ldap)

Estou confiante de que a máquina com a qual estou trabalhando pode usar o LDAP para acessar o serviço, pois consegui fazê-lo usando o SQL Developer (o que me permitiu inserir as informações LDAP diretamente). Supondo que eles estejam corretos, como posso fazer com que o Instant Client reconheça essa configuração e use LDAP para procurar o nome?

O que eu tentei até agora

Eu tentei definir o TNS_ADMIN variável de ambiente como o diretório que contém os arquivos fornecidos e, embora isso funcione bem para fazer o Instant Client reconhecer um tnsnames.oraarquivo, não parece suficiente para que ele comece a examinar o LDAP. Aqui estão os resultados (com caminhos, nomes de usuário e senhas alterados):

(Os comandos a seguir são o prompt de comando do Windows, mas imagino que algo semelhante seja possível no Linux. A sqlplusvista aqui também é a versão instantânea, com os binários do Instant Client que acompanham o mesmo diretório.)

C:\TEMP>SET TNS_ADMIN=C:\path\to\sqlnet\ldap\and\tnsnames\ora\files

C:\TEMP>echo %TNS_ADMIN%
C:\path\to\sqlnet\ldap\and\tnsnames\ora\files

C:\TEMP>sqlplus.exe USERNAME/PASSWORD@LOCALTNSNAME

SQL*Plus: Release 11.2.0.2.0 Production on Mon Jul 7 10:22:25 2014

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Produ
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

C:\TEMP>sqlplus.exe USERNAME/PASSWORD@LDAPTNSNAME

SQL*Plus: Release 11.2.0.2.0 Production on Mon Jul 7 10:24:21 2014

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

ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified

Nota

Existem tags para TNS, LDAP ou Instant Client (ou mesmo apenas o Oracle Client normal) que podem ser adicionadas a esta pergunta? Não consegui localizar nenhum.

jpmc26
fonte
É o executável correto? "where sqlplus"
Bjarte Brandt 07/07
@BjarteBrandt Sim, é o que eu espero que seja quando corro where( C:\TEMP\sqlplus.exe). Para ser mais específico, sqlplusnão está "instalado" na máquina. Está apenas no diretório atual, com os binários do cliente ao lado. Definitivamente, ele está captando o tnsnames.oraarquivo usando a TNS_ADMINvariável de ambiente, pois está desativado em um diretório completamente diferente.
Jpmc26 7/07
@BjarteBrandt Para confirmar que está usando os binários de cliente certos, fui adiante e corri where oci.dlltambém. Ele também dá o resultado esperado: C:\TEMP\oci.dll.
Jpmc26 07/07
pode ser um problema de domínio. Você também tentou com o nome FQ? (dbname_or_whatever.domainname)
ik_zelf
2
@ ora-600 Desculpe, esqueci essa pergunta. Acabou havendo problemas com os próprios arquivos de configuração, que foram fornecidos pelo nosso cliente. (Possivelmente, o arquivo de configuração Kerberos; não me lembro de imediato.) O engraçado é que eu estava trabalhando em um ambiente de desenvolvimento tentando fazer isso, era igualmente problemático fazê-lo funcionar na preparação, e ainda não é trabalhando em prod até onde eu sei. (Acabamos usando um nome local do TNS para fazer o aplicativo funcionar.) Definitivamente, desperdiçamos dinheiro com o projeto; mesmo que / quando funcione em prod, o retorno do investimento seria minúsculo em comparação com o custo.
jpmc26

Respostas:

1

Coloque os arquivos sqlnet.orae ldap.oraem seu $ORACLE_ADMINdiretório e certifique-se de definir as variáveis ​​de ambiente. Eu fiz o meu TNS_ADMINdiretório

(Linux) meu .bashrc

export TNS_ADMIN=/opt/oracle/instantclient_12_1/network/admin
export ORACLE_ADMIN=${TNS_ADMIN}

[ku14lts:/opt/oracle/instantclient_12_1/network/admin]
$ ls
ldap.ora  sqlnet.ora  tnsnames.ora

E consegui me conectar a um banco de dados que não está no meu tnsnames.ora

Marca
fonte