No sé si alguien ya se chocó con esto… En mi institución se utiliza Active Directory de Microsoft, acá el Usuario jlopez, jLopez y JLOPEZ son el mismo…
De esto se desprenden 2 inconveniente (como mínimo) pero quisiera comentarles, en G3W se soluciona personalizando la clase modelo/datos/db/persona, les resalto en negritas el cambio:
function buscar_clave($parametros)
{
$sql = "SELECT clave, persona FROM mdp_personas WHERE usuario [b]ilike[/b] {$parametros['usuario']}";
$datos = kernel::db()->consultar_fila($sql);
return $datos;
}
function buscar_persona($parametros)
{
$sql = "SELECT persona FROM mdp_personas WHERE usuario [b]ilike[/b] {$parametros['usuario']}";
$datos = kernel::db()->consultar_fila($sql);
return $datos;
}
El tema son las webs que usan Arai… ocurre exactamente el mismo “error” y no quisiera editar los fuentes del Arai.
Pensaría que hay forma, pero no hay garantías de que el usuario guardado en el Active Directory haya sido escrito en minúsculas.
Caso contrario, sin usar ilike podría hacerse:
function buscar_clave($parametros)
{
$sql = "SELECT clave, persona FROM mdp_personas WHERE lower(usuario) [b]=[/b] lower({$parametros['usuario']})";
$datos = kernel::db()->consultar_fila($sql);
return $datos;
}
function buscar_persona($parametros)
{
$sql = "SELECT persona FROM mdp_personas WHERE upper(usuario) [b]=[/b] upper({$parametros['usuario']})";
$datos = kernel::db()->consultar_fila($sql);
return $datos;
}
Es preferible hacer una comparación de minúsculas a minúsculas como el ejemplo que diste primero (o mayúsculas a mayúsculas es lo mismo).
El ILIKE no te lo recomiendo, ya que si el usuario de SAML es ‘Die_o’ o ‘Dieg%’ te va a traer resultados que no son los correctos (el ‘_’ es muy probable que este en un username).
Entiendo que el Active Directory de Microsoft no te permite tener dos usuarios donde uno es “Diego” y el otro “diego”, ya que los considera como el mismo, no?
exacto, es un ùnico usuario… pero el AD igual que el LDAP no son perfectos si se mete mal la mano se puede tener datos casi “duplicados” en distintas ramas (y depende de la rama en la que busques primero es el usuario que encontrás).
Creo que la mejor solución seria comparar de minúsculas a minúsculas (usando la función lower de Postgres).
En cuanto a Guaraní, si vas a Administrar Personas solapa Acceso al sistema el campo usuario es “case insensitive”, con lo cual “dturriaga”, “dTurriaga” y “DTURRIAGA” los considera los mismo y da el siguiente error de la captura.