propagação de identidades

Post on 06-Jun-2015

632 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Propagação de identidades do browser até o banco de dados em ambientes n camadas

TRANSCRIPT

<Insert Picture Here>

Propagação de Identidades em Ambientes N Camadas

alexandre.viana@oracle.com

MCSO 1.086/10

Agenda.

• Rastreabilidade com Pool de Conexões• Propagação de Credenciais

• CLIENT_IDENTIFIER• PROXY USER• ENTERPRISE USER

• Restrições• Perguntas e Respostas

Rastreabilidade com pool de conexões ?

• Quem é o usuário real ?• O usuário do pool possui privilégios em excesso ?• Posso evitar que os usuários acessem os dados

diretamente ? • Como/Quem devo auditar ?

Client A

Client A, B, or C?Client B

Client C

DatabaseDatabaseApplication Application

ServerServer

Propagação de Credenciais

• Oracle Database possui vários mecanismos para propagação de credenciais a partir de um pool de conexões

• CLIENT_IDENTIFIER • Proxy User• Enterprise User

• Disponível em várias linguagens• PL/SQL• C/C++• .NET e VB• Java

CLIENT_IDENTIFIER

• Viabiliza a propagação da credencial do usuário através de variável de contexto

• Aplicação é responsável pelo valor da variável de contexto CLIENT_IDENTIFER

• Variável de contexto CLIENT_IDENTIFIER é propagada para as trilhas de auditoria do Oracle Database

• Compatível com aplicações client/server ou n-tier

CLIENT_IDENTIFIER

• PL/SQL• DBMS_SESSION.SET_IDENTIFIER

CREATE OR REPLACE TRIGGER LOGON_TRIGGERAFTER LOGON ON DATABASEDECLARE

UID VARCHAR2(64);BEGIN

  SELECT SYS_CONTEXT('USERENV', 'OS_USER')  INTO UID  FROM DUAL;  DBMS_SESSION.SET_IDENTIFIER(UID);DBMS_SESSION.SET_IDENTIFIER(UID);

END LOGON_TRIGGER;

CLIENT_IDENTIFIER

• C/C++• OCIAttrSet()• OCI_ATTR_CLIENT_IDENTIFIER

• Exemplos• Oracle® Call Interface Programmer's Guide,

10g Release 2 (10.2)

• Capítulo 8

CLIENT_IDENTIFIER

• ODP.NET• OracleConnection• Pool de Conexões

OracleConnection con = new OracleConnection();con.ConnectionString = “UserId=scott; Password=tiger; DataSource=oracle;” + “ClientId=AVIANAClientId=AVIANA"; con.Open();

CLIENT_IDENTIFIER

• JDBC 10g e 11g• OracleConnection.setClientIdentifier();• OracleConnection.clearClientIdentifier();

Context ctx = new InitialContext(); ds = (OracleDataSource) ctx.lookup("jdbc/HRCoreDS"); conn = (OracleConnection) ds.getConnection(); conn.setClientIdentifier(conn.setClientIdentifier(““AVIANAAVIANA””);); … conn.clearClientIdentifier(conn.clearClientIdentifier(““AVIANAAVIANA””););

D E M O N S T R A Ç Ã O

CLIENT_IDENTIFIER

• Baixo impacto• Fácil implementação• Não permite o controle de privilégios, somente

propagação das credenciais• Habilita recursos avançados do Oracle Database

• Virtual Private Database• Label Security• Log Miner

Proxy User

• Aplicação estabelece pool de conexão através de um usuário proxy com privilégios restritos

• Durante execução aplicação conecta o usuário real através do usuário proxy

• Privilégios podem ser configurados pela aplicação no momento da conexão do usuário real

• Proxy Connections podem ser reutilizadas pelo mesmo usuário real

• Informações sobre o usuário real são propagadas para as trilhas de auditoria do Oracle Database.

Proxy User

• C/C++• OCIAttrSet()• OCI_ATTR_USERNAME• OCI_ATTR_PROXY_CREDENTIALS• OCI_ATTR_INITIAL_CLIENT_ROLES

• Exemplos• Oracle® Call Interface Programmer's Guide,

10g Release 2 (10.2)

• Capítulo 8

Proxy User

• ODP.NET• OracleConnection• Pool de Conexões

OracleConnection con = new OracleConnection();con.ConnectionString = "User Id=sinesio;Password=welcome1;" + "Data Source=oracle;Proxy User Id=proxy;Proxy Password=welcome1; "; con.Open();

Proxy User

• JDBC Pré 10g• OracleOCIConnectionPool

• JDBC 10g e 11g• OracleConnection.openProxySession();

Context ctx = new InitialContext(); ds = (OracleDataSource) ctx.lookup("jdbc/HRCoreDS"); conn = (OracleConnection) ds.getConnection(); Properties prop = new Properties(); prop.put(OracleConnection.PROXY_USER_NAME,username); conn.openProxySessionconn.openProxySession (OracleConnection.PROXYTYPE_USER_NAME, prop);(OracleConnection.PROXYTYPE_USER_NAME, prop);

D E M O N S T R A Ç Ã O

Proxy User

• Implementação mais trabalhosa• Requer alteração nas aplicações• Requer alteração no banco de dados

• Viabiliza o controle de privilégios via aplicação• Habilita recursos avançados do Oracle Database

• Virtual Private Database• Label Security• Log Miner

Enterprise User

• Usuário e privilégios administrados partir de um diretório LDAP.

APP_GUESTAPP_GUESTSHARED SCHEMASHARED SCHEMA

HR_SCHEMAHR_SCHEMA

EO_SCHEMAEO_SCHEMA

FREDEnterprise User

HR_MGREnterprise Role

MaryEnterprise User

OE_MGREnterpise Role

LDAPLDAP

Enterprise UsersEnterprise UsersEnterprise RolesEnterprise Roles

Global RolesGlobal Roles

Global RolesGlobal Roles

D E M O N S T R A Ç Ã O

Enterprise User

• Implementação mais trabalhosa• Requer alteração nas aplicações• Requer alteração no banco de dados• Requer implantação do Oracle Internet Directory

• Ganhos significativos de administração• Usuários• Privilégios• Administração Unificada a partir de um LDAP

• Habilita recursos avançados do Oracle Database• Virtual Private Database• Label Security• Log Miner

Observações e Restrições

• Pool de Conexões• Gerenciado pelo Servidor

• Servidor deve suporta driver nativo oracle

• Gerenciado pela Aplicação

• Simples customização

• EJB• Implementação viável somente para BMP

• Frameworks de Persistência• Oracle TopLink (EclipseLink)

• Suporte Nativo

• Hibernate

• Via customização do ConnectionProvider

Sugestão de ImplementaçãoOracle Identity Manager + Enterprise Users

HRMS Reconciliação

Regras WorkflowGruposMeta-diretório

Auto Atendimento

Gestor Aprovador

Solicitação Eletrônica

ColaboradorExterno

Active Directory

ExchangeServidor ANS

OID

RP&

top related