martes, 14 de agosto de 2012

Un usuario tipo proxy y su gran uso para un DBA

El RDBMS de Oracle tiene dentro de sus métodos de autenticación una manera llamada usuario proxy, este usuario lo que te permite hacer es poder conectarte con las credenciales que tu tienes (usuario y contraseña que tu ya conoces) y ejercer acciones en un usuario en el que tu no tienes contraseña.

Y te vas a preguntar, pues para que me sirve esto si ya soy un super usuario, bueno una de las primeras cosas que se me viene a la mente es crear un database link privado, ya que la unica manera de crearlo es si estas conectado como el usuario que requiere el database link :)

Aquí te voy a dar un ejemplo de como crear un usuario proxy y como usarlo, ya tu te divertirás con las cosas que puedes hacer con este método de autenticación.

Lo primero que voy a hacer es crear un llamado usuario_princi y un usuario llamado usuario_proxy, después de crear el usuario proxy, vas a ver que altero al usuario para darle un grant connect through, esto es lo que nos va a permitir conectarnos como un usuario proxy

TESTDB> create user usuario_princi identified by 1234;

User created.

TESTDB> create user usuario_proxy identified by proxy1234;

User created.

TESTDB> grant create session, create table to usuario_princi;

Grant succeeded.

TESTDB> alter user usuario_princi grant connect through usuario_proxy;

User altered.

Una vez que creamos al usuario proxy, nos conectamos de la siguiente manera, vas a ver que aunque estoy usando el usuario y contraseña de usuario_proxy, mi esquema de contexto es usuario_princi

TESTDB> connect usuario_proxy[usuario_princi]/proxy1234
Connected.
USER: USUARIO_PRINCI
SESSION ID: 45
CURRENT_SCHEMA: USUARIO_PRINCI
INSTANCE NAME: TESTDB
DATABASE ROLE: PRIMARY
OS USER: oracle
CLIENT IP ADDRESS:
SERVER HOSTNAME: servidor1
CLIENT HOSTNAME: servidor1.oracleenespanol.blogspot.com

PL/SQL procedure successfully completed.

TESTDB> select sys_context('userenv','current_user') from dual;

SYS_CONTEXT('USERENV','CURRENT_USER')
--------------------------------------------------------------------------------
USUARIO_PRINCI

TESTDB> select sys_context('userenv','proxy_user') from dual;

SYS_CONTEXT('USERENV','PROXY_USER')
--------------------------------------------------------------------------------
USUARIO_PROXY

Ahora como ejemplo, vamos a crear una tabla y vas a ver que esta tabla se crea en el usuario_princi, no en el usuario_proxy que fue con el que nos conectamos

TESTDB> create table prueba (id number);

Table created.


TESTDB> select owner from all_tables where table_name='PRUEBA';

OWNER
---------------
USUARIO_PRINCI

Ya nada mas para verificar , audite a la sesión y las acciones de crear una tabla para los usuarios y el resultado es este

TESTDB> AUDIT CREATE TABLE BY usuario_proxy ON BEHALF OF usuario_princi;

Audit succeeded.

TESTDB> AUDIT CREATE TABLE BY usuario_princi BY ACCESS;

Audit succeeded.

TESTDB> SELECT
  2  tr2.username PROXY,
  3  tr1.username USERNAME,
  4  tr1.extended_timestamp,
  5  tr1.owner,
  6  tr1.obj_name,
  7  tr1.action_name,
  8  tr1.returncode ,
  9  tr1.SESSIONID,
 10  tr1.PROXY_SESSIONID
 11  FROM dba_audit_trail tr1,
 12  dba_audit_trail tr2
 13  WHERE tr1.obj_name not in ( 'DUAL','SQLPLUS_PRODUCT_PROFILE','PRODUCT_PRIVS')
 14  AND tr1.proxy_sessionid=tr2.sessionid
 15  AND tr2.action_name='PROXY AUTHENTICATION ONLY' and tr2.username='USUARIO_PROXY' and tr1.owner='USUARIO_PRINCI'
 16  ORDER BY tr1.timestamp;

PROXY           USERNAME        EXTENDED_TIMESTAMP        OWNER           OBJ_NAME   ACTION_NAME     RETURNCODE  SESSIONID PROXY_SESSIONID
--------------- --------------- ------------------------- --------------- ---------- --------------- ---------- ---------- ---------------
USUARIO_PROXY   USUARIO_PRINCI  14-AUG-12 04.31.30.650906 USUARIO_PRINCI  PRUEBA     CREATE TABLE             0   14900441        14900440
                                 AM -07:00

Como te puedes dar cuenta este método te puede ayudar para crear un database link en el usuario o de igual manera le puede ayudar a tu desarrollador para que se conecte a un usuario y no tener que crear sinónimos.

miércoles, 1 de agosto de 2012

RMAN : Como emular una libreria de SBT a Disco

El otro día me tope con una situación en donde migre una base de datos, pero al migrarla todavía apuntaba a respaldos obsoletos que se encontraban en SBT, pero como ya estaba en el nuevo servidor, no podía borrar esta información, así que una manera de hacerlo es emular que tienes una librería de SBT, esto funciona para borrar o para hacer un respaldo, cualquiera de los dos, espero y te sirva este tip y lo uses para sacarle algún provecho.

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle
oracle $ rman target /
Recovery Manager: Release 11.2.0.3.0 - Production on Wed Aug 1 06:10:02 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
connected to target database: TESTDB (DBID=1229390655)
RMAN> @backup_tape.rmn
RMAN> 
RMAN> run {
2>     allocate channel t1 device type 'sbt'
3>     parms='SBT_LIBRARY=oracle.disksbt, ENV=(BACKUP_DIR=/backup)';
4>     backup database;
5> }

using target database control file instead of recovery catalog
allocated channel: t1
channel t1: SID=31 device type=SBT_TAPE
channel t1: WARNING: Oracle Test Disk API
Starting backup at 01-AUG-12
channel t1: starting full datafile backup set
channel t1: specifying datafile(s) in backup set
input datafile file number=00002 name=+DATA/testdb/datafile/sysaux01.dbf
input datafile file number=00001 name=+DATA/testdb/datafile/system01.dbf
input datafile file number=00004 name=+DATA/testdb/datafile/users01.dbf
input datafile file number=00003 name=+DATA/testdb/datafile/undotbs01.dbf
input datafile file number=00005 name=+DATA/testdb/datafile/example01.dbf
input datafile file number=00006 name=+DATA/testdb/datafile/APEX_1930613455248703.dbf
channel t1: starting piece 1 at 01-AUG-12
channel t1: finished piece 1 at 01-AUG-12
piece handle=03nhhf26_1_1 tag=TAG20120801T061014 comment=API Version 2.0,MMS Version 8.1.3.0
channel t1: backup set complete, elapsed time: 00:02:37
channel t1: starting full datafile backup set
channel t1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel t1: starting piece 1 at 01-AUG-12
channel t1: finished piece 1 at 01-AUG-12
piece handle=04nhhf73_1_1 tag=TAG20120801T061014 comment=API Version 2.0,MMS Version 8.1.3.0
channel t1: backup set complete, elapsed time: 00:00:01
Finished backup at 01-AUG-12
released channel: t1

RMAN> **end-of-file**