segunda-feira, 2 de dezembro de 2013

Banco de Dados SQL: Oracle - COMMIT , ROLLBACK e SAVE POINT

Boa Tarde.

Mano preciso de uma força, tecnicamente é simples ou talvez não mas como não manjo muito de Oracle eu não sei. Quando faço um insert como consigo verificar se estes dados foram realmente incluidos? E como consigo capturar o tamanho de um cursor no oracle?

Att.

Julio

quinta-feira, 12 de setembro de 2013

Classe para manipulação do Microsoft Active Directory

Pessoal estou inserindo no blog uma classe para manipulação do MS Active directory é bem simples e funcional, depois que criei não preciso mais ficar esquentando a cabeça com login e permissão de grupo na minha aplicação. Qualquer duvida só postar.

<?php
class adLDAP{

protected static $permissao_grupo = false;
protected static $pertence_grupo = false;

public static function Login($ldapdsn, $array_grupo = null)
{
if($ldapdsn['conexao']){

$filtro = "(&(objectCategory=person)(sAMAccountName=".$ldapdsn['usuario']."))";
$atributo = array('dn','mail','memberof');
$dados_login = adLDAP::search($ldapdsn['conexao'], $ldapdsn['basedn'], $filtro, $atributo);

if($dados_login){

if(!empty($array_grupo)){

if(!empty($dados_login[0]['memberof'])){

foreach ($dados_login[0]['memberof'] as $chave => $valor){

if($chave !== 'count'){

$cngrupo = explode(',',$valor);
$nomegrupo = explode('=',$cngrupo[0]);

if(in_array($nomegrupo[1], $array_grupo)){

adLDAP::$permissao_grupo = true;
}
}
}
if(adLDAP::$permissao_grupo){

return $dados_login;
}else{

return false;
}
}else{

return false;
}
}else{
return $dados_login;
}
}else{

return false;
}

}else{

return false;
}
}

public static function search($conexao, $basedn, $filtro, $atributo = null){

if(empty($atributo)){
$pesquisa = @ldap_search($conexao, $basedn, $filtro) or die(false);
}else{
$pesquisa = @ldap_search($conexao, $basedn, $filtro, $atributo) or die(false);
}

if($pesquisa){

$TotalReg = @ldap_get_entries($conexao, $pesquisa);
return $TotalReg;

}else{

return false;
}
}

public static function searchCustom($conexao, $basedn, $objectCategory, $objectProperties, $objectPropertiesValue, $atributo = null){
//$conexao: Conexão Ldap
//$basedn: Dn principal de busca, no caso do ad de exemplo é ou=outeste,dc=teste,dc=local
//$objectCategory: É a categoria de busca do objeto dentro do AD ex: groups(buscar por grupos), person(Pessoas), ou(Ou´s)
//$objectProperties: É a propriedade da categoria a ser pesquisada ex: para grupos pode ser name, para usuarios samAccountName e etc.
//$objectPropertiesValue: É o valor a ser pesquisado (*) pesquisa tudo, ou podemos especificar o valor referente ao $objectProperties como name a ser pesquisado ou o samAccountName.
//$atributo = Atributos de retorno da pequisa, esta variavel deve ser preenchida e separada por virgula;

if(!empty($objectCategory) && !empty($objectProperties) && !empty($objectPropertiesValue)){

$filtroBuscaAd = "(&(objectCategory=".$objectCategory.")(".$objectProperties."=".$objectPropertiesValue."))";
if(empty($atributoAd)){

$arrayAributos = explode(',',$atributo);
$pesquisa = ldap_search($conexao, $basedn, $filtroBuscaAd, $arrayAributos) or die(false);
}else{

$pesquisa = ldap_search($conexao, $basedn, $filtroBuscaAd) or die(false);
}
}else{
return false;
}

if($pesquisa){

$TotalReg = ldap_get_entries($conexao, $pesquisa);
return $TotalReg;
}else{

return false;
}
}

public function Logout()
{

}

public static function pesquisaMembrosGrupo($conexao, $basedn, $nomeGrupo){

$filtro = "(&(objectClass=group)(cn=".$nomeGrupo."))";
$atributo = array('dn','cn','member');
$membros = adLDAP::search($conexao, $basedn, $filtro, $atributo);

if($membros){
if(isset($membros[0]['member']) && !empty($membros[0]['member'])){
return $membros ;
}else{
return false;
}
}else{
return false;
}
}

public static function eMembroDoGrupo($conexao, $basedn, $nomeGrupo, $usuario){

$array_usuario = explode('@', $usuario);
$usuario = $array_usuario[0];

$filtro = "(&(objectCategory=person)(sAMAccountName=".$usuario."))";
$atributo = array('dn','mail','memberof');
$dados_login = adLDAP::search($conexao, $basedn, $filtro, $atributo);

if(!empty($dados_login[0]['memberof'])){

foreach ($dados_login[0]['memberof'] as $chave => $valor){
if($chave !== 'count'){
$cngrupo = explode(',',$valor);
$nomegrupo = explode('=',$cngrupo[0]);
if($nomegrupo[1] == $nomeGrupo){
adLDAP::$pertence_grupo = true;
}
}
}

if(adLDAP::$pertence_grupo){
return true;
}else{
return false;
}

}else{
return false;
}
}

public function CriarUsuarioAd($conexao, $dadosUsuario){

$usuarioAd = explode('@', $dadosUsuario['email']);
$ouUsuario = self::PesquisaOU($conexao, $dadosUsuario['basedn'], $dadosUsuario['instituto']);

if($ouUsuario)
{
$dn_ldap = 'cn='.$usuarioAd[0].',ou='.$dadosUsuario['instituto'].', '.$dadosUsuario['basedn'];
}
else
{
$dn_ldap = 'cn='.$usuarioAd[0].', '.$dadosUsuario['basedn'];
}

$testeSenha = self::converteSenhaPadraoAd($dadosUsuario['senha']);
$ldaprecord['objectclass'][0]     = "top"; //Obejto fixo e obrigatorio para criação de usuario
$ldaprecord['objectclass'][1]     = "person"; //Obejto fixo e obrigatorio para criação de usuario
$ldaprecord['objectclass'][2]     = "organizationalPerson"; //Obejto fixo e obrigatorio para criação de usuario
$ldaprecord['objectclass'][3]     = "user"; //Obejto fixo e obrigatorio para criação de usuario
$ldaprecord['pager']              = $dadosUsuario['cpf'];
$ldaprecord['company']            = $dadosUsuario['instituto']; ///Esse dado ainda não esta vindo do cadprof por isso esta comentado, quando disponivel apenas descomente a linha
$ldaprecord["displayName"]        = $dadosUsuario['nome']." ".$dadosUsuario['sobrenome'];
$ldaprecord["givenName"]          = $dadosUsuario['nome'];
$ldaprecord["mail"]               = $dadosUsuario['email'];
$ldaprecord["name"]               = $usuarioAd[0]; //igual a cn
$ldaprecord["sAMAccountName"]     = $usuarioAd[0]; //este nome deve ser unico assim como a cn
$ldaprecord["sn"]                 = $dadosUsuario['sobrenome'];
$ldaprecord["userPrincipalName"]  = $usuarioAd[0]."@".$dadosUsuario['dominio']; // este nome deve ser unico assim como a cn
$ldaprecord["userAccountControl"] = 66080;// Cria conta com usuario habilitado e a senha nunca expira
$ldaprecord["pwdLastSet"]         = -1;// sem troca de senha no proximo logon
$ldaprecord["unicodepwd"]= self::converteSenhaPadraoAd($dadosUsuario['senha']); //senha ja convertida para padrao AD

ldap_set_option($conexao, LDAP_OPT_REFERRALS, 0);
$resposta = @ldap_add($conexao, $dn_ldap, $ldaprecord) or die(false);
if($resposta){
return $resposta;
}else{
throw new Exception('Erro ao criar usuario no AD Classe Ldap');
}
}

static function DeletarUsuarioAd($conexao, $dadosUsuario){

$usuarioAd = explode('@', $dadosUsuario['email']);
$ouUsuario = self::PesquisaOU($conexao, $dadosUsuario['basedn'], $dadosUsuario['instituto']);

if($ouUsuario)
{
$dn_ldap = 'cn='.$usuarioAd[0].',ou='.$dadosUsuario['instituto'].', '.$dadosUsuario['basedn'];
}
else
{
$dn_ldap = 'cn='.$usuarioAd[0].', '.$dadosUsuario['basedn'];
}

$retorno = @ldap_delete($conexao, $dn_ldap);

if($retorno){
return $retorno;
}else{
throw new Exception('erro ao remover usuario do AD');
}
}

static function alteraSenhaAd($conexao, $cn, $senha)
{
ldap_set_option($conexao, LDAP_OPT_REFERRALS, 0);
$Arraysenha['unicodepwd'] = self::converteSenhaPadraoAd($senha);
$resultado = @ldap_modify($conexao, $cn, $Arraysenha);

if($resultado){
return true;
}else{
return false;
}
}

static function converteSenhaPadraoAd($senha){
if(!empty($senha)){
//$senha_padrao_ad = null;
//codigo para alteração de senha no AD em versões anteriores a win2003 server
/*
$len = strlen($senha);
for($i=0;$i<$len;$i++){
$senha_padrao_ad .= "{$senha{$i}}\000";
}*/

$senha = "\"". $senha . "\"";
$senha_padrao_ad = mb_convert_encoding($senha, "UTF-16LE");
return $senha_padrao_ad;
}else{
return false;
}
}

static function PesquisaOU($conexao, $basedn, $instituto){

$filtro = '(&(objectClass=organizationalUnit)(ou='.$instituto.'))';
$atributo = "";
$ou = self::search($conexao, $basedn, $filtro, $atributo);

if($ou){
if(!empty($ou['count'])){
return $ou;
}else{
return false;
}
}else{
return false;
}
}
}

?>

Saudações

Fala pessoal meu nome é Julio e sou programador e especialista em integração com Microsoft Active Directory.
Este blog tem como objetivo compartilhar conhecimento tanto pessoal quanto profissional, acho que é interessante compartilhar todo conhecimento que adquiri durante meus anos trabalhando com T.I espero que seja útil e se tiver alguma duvida é só postar.

Julio