Arquivo de setembro, 2012

Usuários padrões do Oracle Database

Publicado: setembro 26, 2012 em Oracle

Uma das grandes dúvidas que muitos iniciantes tem quando quando começa a trabalhar com Oracle, é saber qual a função de cada usuário padrão do Oracle Server e também como se proteger deles.

Muitos DBAs, não deixam a conta de usuários padrões travada “Locked”, com isso, qualquer outro que conheça um usuário padrão e saiba a senha dele inicial, poderá acessar seu banco de dados com privilégios de DBA e fazer o que bem entender no banco de dados. E isso é ruim para nós.

Abaixo, vou mostrar uma lista com esses usuários, sua função e sua senha padrão.

Username : CTXSYS

Password : CTXSYS

Descrição : Usuário proprietário do produto Oracle Text.

Username : SYS

Password : change_on_install

Descrição : Usuário utilizado para realizar todas as tarefas de administração do banco de dados e proprietário do dicionário do banco de dados.

Username : SYSTEM

Password : manager

Descrição : Usuário de administração do banco de dados. Funciona como se fosse um gerente.

Username : SYSMAN

Password : change_on_install

Descrição : Usuário administrativo para realizar as tarefas pelo Oracle Enterprise Manager

Username : SI_INFORMTN_SCHEMA

Password : si_informtn_schema

Descrição : Essa conta armazena informações das views do SQL/MM, utilizado pelo Oracle InterMedia.

Username : OUTLN

Password : outln

Descrição : Utilizado para o recurso de OUTLINE VIEW, ou seja, o Oracle permite que você armazena informações de plano de execução para suas instruções SQL, esse owner que é o responsável por armazenar essas informações.

Username : ORDSYS

Password : ordsys

Descrição : Usuário administrativo do Oracle InterMedia.

Username : ORDPLUGINS

Password : ordplugins

Descrição : Usuário para os plugins de outras aplicações que utiliza o InterMedia.

Username : OLAPSYS

Password : manager

Descrição : Usuário utilizado para criar a estrutura do metadata OLAP.

Username : DMSYS

Password : dmsys

Descrição : Usuário administrativo do Data Mining.

Username : MDSYS

Password : mdsys

Descrição : Usuário administrativo para Oracle Spatial e Locator do InterMedia.

Username : MDDATA

Password : mddata

Descrição : Usuário utilizado pelo Oracle Spatial para armazenar dados do Geocoder e rotas.

Username : DBSNMP

Password : dbsnmp

Descrição : Usuário utilizado pelo Agent Management do Oracle Enterprise Manager e gerenciar o banco de dados.

Agora que você conhece os principais owners que estão presentes na instalação do Oracle Database, cabe a você bloquear os usuários que não utiliza para aumentar a segurança do banco de dados, por exemplo, tenho um banco de dados que trabalhar somente com os componentes padrão do PL/SQL e SQL. Então, em minha base não é necessário eu ter owners como CTXSYS, DBSNMP, MDDATA, MDSYS, OLAPSYS, ORDPLUGINS, então eu posso bloquear sem problemas, pois meu banco de dados não utiliza tais produtos como Data Mining, OLAP, Spatial e InterMedia.

De onde vêm muitos desses usuários?

Caso, você tenha feito a instalação de um banco de dados pelo DBCA (DataBase Create Assistent), e escolheu pela instalação padrão (DEFAULT – ou NEXT, NEXT e FINISH), ele irá instalar esses usuários, principalmente se está instalando a versão Enterprise.

Se escolher a opção INSTALL ADVANCED, terá a oportunidade de escolher quais produtos serão instalados no seu banco de dados e esses usuários não serão criados.

Caso o Oracle Enterprise Manager parar de funcionar mediante alguma alteração feita no servidor você pode tentar recriar o repositório usando:

emca -config dbcontrol db -repos recreate

Caso não de certo tente o seguinte:

emca -deconfig dbcontrol db -repos drop
emca -config dbcontrol db -repos create

Recentemente tivemos um problema onde de uma maneira inesperada os sistemas que realizavam conexão com o Banco Oracle não estavam acessíveis, e o erro original não era retornado por falta de tratamento na aplicação.

Depois de realizar várias verificações identificamos que as senhas dos Schemas estavam para expirar.

O que acontece?

Quando se cria um usuário (schema) no Oracle temos as opções de criar um profile específico e personalizado para esse usuário ou utilizar o profile default.

No Oracle 11G r2 a opção PASSWORD_LIFE_TIME no profile default, que é a opção do tempo de vida da senha, geralmente está definida como 90 dias.

Para desabilitar a opção de expiração de senha dos usuários (default no Oracle 11G r2), basta alterar o profile default conforme abaixo:

Como resolver:

Conecte-se no servidor de banco de dados;
Abra o prompt do sqlplus: 
sqlplus /nolog

Conecte-se como SYS as SYSDBA: 
conn /as sysdba

Execute o comando: 
alter profile default limit PASSWORD_LIFE_TIME unlimited;

Backup: Utilizando Data Pump (EXPDP E IMPDP)

Publicado: setembro 26, 2012 em Oracle

O banco de dados Oracle fornece uma variedade de procedimentos e opções de backup que ajudam a proteger o banco. Não adianta ter ótimas ferramentas e não implementar de maneira adequada e que possa recuperá-los facilmente, com isso, devemos sempre efetuar testes de backup e restore regularmente.

Neste poste vou falar sobre o utilitário Data Pump (impdp e expdp) que realiza backup lógico de um banco de dados que envolve a leitura de um conjunto de registros do banco de dados e a gravação destes em um arquivo. Esses registros são lidos independente das suas localizações físicas.

Você pode exportar todo o banco de dados, tablespaces, usuários específicos (schemas), espaços de tabelas ou tabelas especificas. O arquivo gravado pelo Data Pump export conterá os comandos necessários para recriar completamente todos os objetos e dados escolhidos. Depois que os dados foram exportados por meio do Data Pump Export, eles poderão ser importados por meio do utilitário Data Pump Import. O Data Pump Import lê o arquivo dump criado pelo Data Pump Export e executa os comandos localizados ali. Por exemplo, esses comandos podem incluir um comando create table, create indice e vários inserts.

Vejamos alguns exemplos de como usar o Data Pump como backup.

Criando um diretório no Sistema Operacional Linux:

mkdir /u01/backup/

Logando no Oracle com sysdba:

sqlplus / as sysdba

Criando um objeto de pasta no Oracle:

CREATE OR REPLACE DIRECTORY funcionarios AS ‘/u01/backup/’;
Directory created.

Utilizando o utilitário EXPDP

Exportando todo o banco de dados:

expdp system DIRECTORY=funcionarios DUMPFILE=funcionario.dmp FULL=y LOGFILE=expfull.log

Exportando uma tablespace:

expdp system DIRECTORY=funcionarios DUMPFILE=funcionarios_TB.dmp TABLESPACES=USERS

Exportando um schema:

expdp system DIRECTORY=funcionarios DUMPFILE=funcionarios_schema.dmp SCHEMAS=hr

Exportando uma tabela:

expdp system tables=hr.employees directory=funcionarios dumpfile=funcionario_tabela.dmp logfile=FUNCIONARIO.log

 

Utilizando o utilitário IMPDP
Importando o banco de dados inteiro:

impdp system DIRECTORY=funcionarios DUMPFILE=funcionario.dmp FULL=y

Importando uma tablespace:

impdp system DIRECTORY=funcionarios DUMPFILE=funcionarios_TB.dmp TABLESPACES=USERS

Importando um schema, remapeando com um novo usuario (schema), chamado amanda:

impdp system DIRECTORY=funcionarios DUMPFILE=funcionarios_schema.dmp remap_schema=hr:amanda remap_tablespace=HR:USERS

Importando uma tabela

impdp system DIRECTORY=funcionarios DUMPFILE=funcionario_tabela.dmp TABLES=amanda.employees;

Alguns parâmetros:
EXPDP: comando para exportar
IMPDP: Comando para importar
SYSTEM: usuário que estou usando para exportar e importar.
TABLES: Informa qual vai ser a tabela importada e exportada.
TABLESPACES: Informa qual vai ser a tablespace que será exportada ou importada.
DIRECTORY: nome do objeto que criamos no oracle, ele aponta para o /u01/backup
DUMPFILE: informo qual será o nome do arquivo exportado.
FULL: informo que o backup é completo
LOGFILE: Nome do arquivo de log, fica localizado na pasta do directory.
TRANSPORT_FULL_CHECK: Especifica se os espaços de tabela sendo importados devem primeiro ser verificados como conjunto contido.
FULL: Opção de Y/N, utilizado para especificar que voce quer importar o arquivo por completo
REMAP_DATAFILE: Altera o nome do arquivo de dados de origem para o arquivo de dados alvo nos comandos create tablespace, create table, etc.
REMAP_SCHEMA: Altera o nome do schema de origem para o destino, separando por dois pontos (:).
REMAP_TABLESPACE: Altera o a tablespace de origem para o destino, separando por dois pontos.
REUSE_DATAFILES: Re-utiliza os datafiles, se já existirem.

 

Alguns GRANTs importantes, em caso de exportar ou importar com o usuário sem perfil de dba, conceda essas permissções
GRANT READ, WRITE ON DIRECTORY funcionarios TO amanda;
GRANT READ, WRITE ON DIRECTORY funcionarios TO hr;
GRANT IMP_FULL_DATABASE to amanda;
GRANT EXP_FULL_DATABASE to hr;

Limitando o uso de login como SYSDBA

Publicado: setembro 6, 2012 em Oracle

Abordagem de uma diretiva simples de segurança, para limitar o uso de logins como SYSDBA.

AS SYSDBA

Bem, sabemos que, dependendo do grupo ao qual estão inseridos, muitos usuários do sistema operacional podem efetuar ‘logon’ no banco de dados como SYSDBA, conforme abaixo:

PROMPT> sqlplus / as sysdba

Este procedimento é prático e elimina a preocupação do usuário em guardar e lembrar a senha do usuário SYS, ou ter que ficar digitando-a em todos os ‘logins’.

Só que isso pode criar uma vulnerabilidade no sistema, pois qualquer usuário que puder ‘logar’ como um membro do grupo DBA, por exemplo, poderia ‘logar’ no banco como SYS.

Neste caso, de nada adiantaria ter uma senha considerada ‘forte’ ou de ‘nível elevado’ para o usuário SYS.

Os procedimentos a seguir não eliminam os riscos de invasão, mas os reduzem consideravelmente.

 

AÇÃO

O processo é controlado pelo parâmetro SQLNET.AUTHENTICATION_SERVICES, no arquivo SQLNET.ORA. Se este parâmetro é ‘setado’ para NONE, então o autologin como SYSDBA é desabilitado.

Esta é a chave da questão: configurar este parâmetro no arquivo SQLNET.ORA.

O arquivo SQLNET.ORA está localizado no ORACLE_HOME/network/admin (ou ORACLE_HOME\network\admin, dependendo do sistema operacional).

Após localizado e aberto o arquivo SQLNET.ORA, basta adicionar a este a linha abaixo:

 

SQLNET.AUTHENTICATION_SERVICES=(NONE)

Assim, se um usuário tentar efetuar o ‘logon’ conforme abaixo:

 

PROMPT> sqlplus / as sysdba

Receberá um erro do tipo:

ERROR:

ORA-01031: insufficient privileges

Para conseguir efetuar o ‘logon’, será necessário informar a senha do usuário SYS:

PROMPT> sqlplus /nolog

SQL> connect sys/oracle as sysdba

Este procedimento faz com que um usuário que não tenha a senha do usuário SYS não possa se conectar ao banco como SYSDBA, e tenha acesso às contas DBA.

CUIDADOS

Com esta alteração, o maior impacto será no uso das senhas do usuário SYS, onde será necessário alterar os os scripts que se conectem ao banco com o usuário SYS, de acordo com as novas necessidades, de informar explicitamente a senha.

 

Por exemplo:

De / as sysdba alterar para sys/<SysPassword> as sysdba

Outro cuidado é referente à perda da senha do usuário SYS, o que pode invalidar todos os acessos deste usuário ao banco. Mas, neste caso, bastaria comentar a linha referente ao parâmetro SQLNET.AUTHENTICATION_SERVICES no arquivo SQLNET.ORA, para que os ‘logins’ sejam feitos da forma anterior: / as SYSDBA