Por que “As SYSDBA” não funciona no SQL Developer?
-
29-09-2020 - |
Pergunta
Sou um desenvolvedor SQL Server/consultor DBA que está ajudando um cliente que recentemente perdeu seu DBA Oracle.Fiz desenvolvimento em Oracle, mas não trabalhei muito como DBA, e não em ambientes multi-homed como este.
O problema: Posso me conectar usando "SYS As SYSDBA" do SQL Plus, mas não do SQL Developer no mesmo sistema.No entanto, eu pode conecte-se usando "sistema" com SQL Plus ou Desenvolvedor SQL.
Detalhes:
Neste servidor, na minha conta Admin do Windows (também inserida como administrador do servidor no Oracle Admin Asst.), este comando DOS funciona:
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>sqlplus /@MyDb as sysdba
e, Select * from V$INSTANCE mostra que está em MyDb e que tanto a ferramenta quanto o banco de dados são 11.2.0.3
O mesmo acontece com este:
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>sqlplus sys/<pwd>@MyDb as sysdba
(TAMBÉM:entrando no errado a senha também funciona (!))
Usando a opção do menu iniciar do SQL-Plus do mesmo (servidor, conta e página inicial), eles também funcionam:
Enter user-name: /@MyDb as sysdba
Enter user-name: sys/<pwd>@MyDb as sysdba
Selecionar * em V$INSTANCE mostra que está no MyDb e que a ferramenta e o banco de dados são 11.2.0.3
Tentativa de acessar o MyDb a partir do mesmo com o SQL Developer, é bem-sucedida para o nome de usuário "sistema", mas falha para "sys" "como sysdba" com “ORA-01031: privilégios insuficientes”.No entanto, isso faz funcionam ao conectar-se a outros bancos de dados em outros servidores.
Eu pesquisei isso, e a maior parte da ajuda postada parece ser direcionada a casos em que nenhuma conexão pode ser feita, o que não é o caso aqui.Apenas para evitar alguns destes:
- O problema não é que a rede não esteja configurada, porque o SQL Developer funciona para o "sistema" local e remotamente.
- O problema não é que o banco de dados/instância não foi iniciado, porque, novamente, funciona para "sistema"
- Não é que eu esteja me conectando ao banco de dados errado, verifiquei se há "sistema"
- AFAIK, não estou usando a sintaxe errada no SQL Developer para conectar-me a um banco de dados "Como SYSDBA" porque funciona quando me conecto a outros servidores em outros bancos de dados.
Minha intuição é que também
- há alguma configuração que diz "não permita SYSDBA através de uma conexão de rede", ou
- há algum problema de configuração/autorização no ouvinte da rede Oracle que o impede de verificar minha conta de administrador do Windows e, além disso, a senha do sys não é o que me disseram que era e, finalmente, a Oracle está fornecendo uma mensagem de erro obtusa para isso.
Qualquer ajuda ou orientação sobre isso seria muito apreciada.
OK, usando as instruções do @BalasPapp, consegui encontrar mais o seguinte:
- Este banco de dados é atendido pelo segundo Home do Oracle 11g chamado OraDb11g_home3 com caminho para
D:\Oracle\app\product\11.2.0\dbhome_1D:\Oracle\app\product\11.2.0\dbhome_1
. - Serviços do Windows mostraram não parâmetros de inicialização para ele (exceto o nome do banco de dados, é claro).
- o comando
show parameter remote_login_passwordfile
mostra um valor de "EXCLUSIVO".
Conteúdo do Listener.ora:
# listener.ora Network Configuration File: D:\Oracle\app\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\Oracle\app\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\Oracle\app\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <SERVERNAME>.<networkname>.local)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = D:\Oracle\app
Conteúdo do sqlnet.ora:
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SQLNET.AUTHENTICATION_SERVICES = (NTS)
A saída de lsnrctl status
:
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>lsnrctl status
LSNRCTL for 64-bit Windows: Version 11.2.0.3.0 - Production on 23-DEC-2015 12:03:55
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<SERVERNAME>.<networkname>.local)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 64-bit Windows: Version 11.2.0.3.0 - Production
Start Date 02-DEC-2015 16:25:41
Uptime 20 days 19 hr. 38 min. 17 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File D:\Oracle\app\product\11.2.0\dbhome_1\network\admin\listener.ora
Listener Log File D:\Oracle\app\diag\tnslsnr\<SERVERNAME>\listener\alert\log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=<SERVERNAME>.<networkname>.local)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "<DBNAME>" has 1 instance(s).
Instance "<DBNAME>", status READY, has 1 handler(s) for this service...
The command completed successfully
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>
Parâmetros ao conectar-se do SQL Developer:
Username: system (or sys)
Password: <...>
Connection
Type: Basic
Role: Default (or SYSDBA)
Hostname: localhost
Port: 1521
SID (or Service name, both work/fail the same):
<dbname>
(Neither OS Authentication nor Kerberos is set)
Funciona para "sistema, padrão", falha para "sys, SYSDBA" com "privilégios insuficientes".Eu tentei muitas combinações de configurações de autenticação do sistema operacional e Keberos também, sem sucesso.
Finalmente, estes são os únicos dois .ora
arquivos no /database
diretório:
SNCF<DBNAME>.ORA (18MB)
SPFILE<DBNAME>.ORA (4kb)
Ambos parecem ser arquivos binários no Bloco de Notas.
TAMBÉM: select * from v$pwfile_users
não retorna nenhuma linha.
Solução
Para conectar usando 'as sysdba' de um cliente via sql*net você precisa ter o
- Parâmetro remote_login_passwordfile para ter 'exclusivo'
- arquivo de senha (orapw${ORACLE_SID}) presente para a instância à qual você tenta se conectar
- faça com que o usuário conceda sysdba no banco de dados (sys tem esse padrão e usa a senha do arquivo passwd.
O local padrão para o arquivo de senha é $ORACLE_HOME/dbs, mas desde o Oracle v12 ele também pode ser armazenado no ASM.Nesse caso você encontra usando srvctl