Propagação de Identidades
-
Upload
acsvianabr -
Category
Documents
-
view
632 -
download
0
description
Transcript of Propagação de Identidades
<Insert Picture Here>
Propagação de Identidades em Ambientes N Camadas
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&