Recentemente necessitei criar várias contas de usuários no Active Directory (AD) importando os dados de uma base de dados Mysql.
Ao importar o nome do usuário, os que possuíam acentos , eram criados no AD incompletos:
Exemplo :
Usuário : José Thomé de Araújo
era criado no Ad : Jos Thom de Ara jo
Este problema solucionei da seguite forma :
$nome_usuario=utf8_encode($nome_usuario);
Codificar a string em UTF 8
Exemplo de script em linguagem de programação PHP para criar automaticamente usuários no AD
/*
Script: cria_CN_professores.php
Desenvolvedora: Gisele Rodrigues Brugger – giselebrugger@gmail.com
Data: 17/05/2009
Descricao: script irá primeiramente fazer uma busca no banco de dados mysql (tabela professores) e localizar todas os professores e verificar a existência dos mesmos no Active Directory, e caso os mesmos não existam , eles serão criados.
*/
include(“includes/info_mysql.php”); // arquivo contendo informaçoes de conexao a base de dados myqsl
include(“includes/info_ad.php”); // arquivo contendo informcaoes de conexao com o AD
include(“includes/funcoes.php”); // arquivo contendo funcoes de manipulacao de strings
//conecta ao AD
$ds=ldap_connect($ip_ad ,$port_ad) or die(ldap_error()).”Nâo foi possível conectar ao AD”;
if ($ds){
//seta algumas variáveis
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
$r=ldap_bind($ds,$user_ad,$pass_ad);
$query1=mysql_query(“SELECT matricula_professor, nome_professor from professores “)or die (mysql_error());
echo “Cria CNS – CRIA CNs professores dentro da OU=Professores “;
$conta_novos_professores=0; // contador de nr de novos professores
$total_usuarios_encontrados=0; // contador de nr de professores verificados
while($row=mysql_fetch_array($query1)){
$matricula_professor=trim($row[“matricula_professor”]); // campo contendo o nr de matricula do professor na tabela professores
$nome_professor=trim($row[“nome_professor”]); // campo contendo o nome completo do professor na tabela professores
echo “antes->” . $nome_professor;
$nome_professor=FisrtToUpper($nome_professor);
$nome_professor=utf8_encode($nome_professor); // codifica a string em UTF8
echo “depois->” . $nome_professor;
//fazer busca no AD para verificar se existe a CN do professor selecionado
$justthese = array(“cn”);
$filter = “cn=”.$matricula_professor;
$sr=ldap_search($ds,$dn, $filter, $justthese,0,0,0);
$total_cn_encontrada=ldap_count_entries($ds,$sr);
if( $total_cn_encontrada == 0){
//não existe ainda a CN no AD e irá ser criada
//ps: a senha do usuario deverá ser trocada no primeiro login
//objectClass : top;person;organizationalPerson;user
$add[“cn”][0]=$matricula_professor;
$add[“sn”][0]=$matricula_professor;
$add[“userPrincipalName”][0]=$matricula_professor.$dominio;
$add[“DisplayName”][0]=$nome_professor;
$add[‘description’] =$nome_professor;
$add[‘sAMAccountName’] =$matricula_professor;
$add[“name”][0]=$matricula_professor;
// conta do usuario será criada já habilitada e sem senha(cod 544 = 512+32)
//explicacao: consulte ->
// Como usar os sinalizadores UserAccountControl para manipular as propriedades da conta de usuário http://support.microsoft.com/?id=305144
$add[“UserAccountControl”] = “544”;
//forcar usuario a trocar senha no primeiro acesso
$add[“pwdLastSet”]=”0″;
//Ps : você conseguira setar a senha do usuario apenas se o AD estiver rodando em conexao segura, ou seja , porta 636
//detalhes em : http://support.microsoft.com/?scid=kb%3Bpt-br%3B321051&x=15&y=12
//http://adldap.sourceforge.net/wiki/doku.php?id=ldap_over_ssl
//$add[‘userPassword’] =$senha_padrao_aluno;
$add[“objectclass”][0]=”top”;
$add[“objectclass”][1]=”person”;
$add[“objectclass”][2]=”organizationalPerson”;
$add[“objectclass”][3]=”user”;
// print_r($add); // exibe o vetor de objetos do usuario
/* Sintaxe no AD
dsadd user [-samid ] [-upn ] [-fn ] [-mi ] [-ln ] [-display ] [-empid ] [-pwd { | *}] [-desc ] [-memberof …] [-office ] [-tel ] [-email ] [-hometel ] [-pager ] [-mobile ] [-fax ] [-iptel ] [-webpg ] [-title ] [-company ] [-mgr ] [-hmdir ] [-hmdrv :][-profile ] [-loscr ] [-mustchpwd {yes | no}] [-canchpwd {yes | no}] [-reversiblepwd {yes | no}] [-pwdneverexpires {yes | no}] [-acctexpires ] [-disabled {yes | no}] [{-s | -d }] [-u ] [-p { | *}] [-q] [{-uc | -uco | -uci}]
Sintaxe no PHP
ldap_add ( resource $link_identifier , string $dn , array $entry )
*/
$nome_OU_pai=”cn=”.$matricula_professor.”,ou=Professores,”.$dn;
echo $nome_OU_pai;
$r= ldap_add($ds,$nome_OU_pai,$add); //adiciona novo usuario no AD
if(!$r){
echo “ERRO !!! CN -> ” . $matricula_professor . ” -> não foi adicionada.“;
}
else{
echo “CN -> “. $matricula_professor . “-> adicionado com SUCESSO “;
$conta_novos_professores ++;
}
}//fi do if
$total_usuarios_encontrados ++;
}//fim do while
echo “Total de professores verificados= ” .$total_usuarios_encontrados;
echo “Total de novos professores adicionados= ” . $conta_novos_professores;
ldap_close($ds);
mysql_close();
}
?>
arquivos dos includes
funcoes.php function loCase($string){ $string = str_replace(“”,”a”,$string); $string = str_replace(“Ê”,”e”,$string); $string = str_replace(“I”,”i”,$string); $string = str_replace(“Ó”,”o”,$string); $string = str_replace(“Ú”,”u”,$string); $string = str_replace(“Ç”,”c”,$string); $string = str_replace(“º”,””,$string); return ($string); } function FisrtToUpper($string){ function Concantena_string($string){ |
/*
Script: info_ad.php
Desenvolvedora: Gisele Rodrigues Brugger – giselebrugger@gmail.com
Data: 19/03/2009
Informa os dados para conexão com o Active Directory (AD)
*/
$ip_ad = “nome_do_servidor_do_Active_Directory”;
$user_ad=”nome_do_usuario_do_AD_com_permissao_alterar_esquema@dominio”;
$pass_ad = “senha_do_usuario”;
$port_ad=”389″;
$dn=”dc=nome_do_dominio”;
$dominio=”@nome_dominio”;
$senha_padrao_aluno=”123456″ ;
?>
/*
Script: info_mysql.php
Desenvolvedora: Gisele Rodrigues Brugger – giselebrugger@gmail.com
Data: 19/03/2009
Informa os dados para conexão com a base de dados MYSQL
*/
$host_mysql = “nome_do_servidor_mysql”; //ou IP
$base_mysql = “nome_base_de_dados_mysql”;
$user_mysql = “nome_usuario_mysql”;
$pass_mysql = “senha_usuario_mysql”;
$conecta=mysql_connect($host_mysql,$user_mysql,$pass_mysql);
mysql_select_db($base_mysql);
?>