Alguna vez podrías necesitar conocer los nombres de todos los usuarios que tiene admitidos el Firebird, estos son los usuarios que pueden conectarse a cualquier Base de Datos, siempre y cuando se les otorguen los derechos correspondientes, por supuesto.
No conozco algún SELECT que nos provea esa información. Los nombres de los usuarios se encuentran en el archivo SECURITY2.FDB y el acceso a ese archivo está restringido por razones obvias. Entonces, ¿cómo hacemos para obtener los nombres de todos los usuarios?
Aquí se muestra una solución.
Si creamos un archivo batch similar al siguiente tendremos en el archivo USUARIOS.TXT los nombres de todos los usuarios de bases de datos de Firebird.

Captura 1. Si haces clic en la imagen la verás más grande
Como puedes ver, el archivo batch se llama USUARIOS.BAT y lo que hace es ejecutar al programa GSEC pidiéndole que muestre los nombres de los usuarios (la opción -display hace eso). No cualquier usuario puede listar los nombres de los demás usuarios, solamente SYSDBA puede hacerlo. La salida se redirige a un archivo llamado USUARIOS.TXT, o sea que en lugar de mostrar los nombres de los usuarios en la pantalla guarda esos nombres en el archivo USUARIOS.TXT
¿Por qué redirigimos la salida del programa GSEC al archivo USUARIOS.TXT?
Para más tarde poder procesar el archivo USUARIOS.TXT y extraer de él los nombres de los usuarios, pues eso es lo que estamos intentando conseguir. Queremos tener los nombres de los usuarios para mostrarlos en un ComboBox o en un Grid, etc.
El siguiente código en Visual FoxPro nos muestra como podemos obtener los nombres de todos los usuarios:
Local lcComando, llComandoOK, loShell, lnRetorno, lcUsuarios, lnMemoWidth, lnTotalLineas, lnI, lcLinea
*--- Nombre del archivo donde se guardarán los nombres de los usuarios
lcArchivo = "USUARIOS.TXT"
*--- Contenido que tendrá el archivo batch USUARIOS.BAT
lcComando = ["C:\ARCHIVOS DE PROGRAMA\FIREBIRD\FIREBIRD_2_5\BIN\GSEC" -user SYSDBA -password masterkey -display > ] + lcArchivo
*--- Se crea el archivo batch USUARIOS.BAT
=StrToFile(lcComando, "USUARIOS.BAT")
*--- Se supone que el archivo batch se ejecutará exitosamente
llComandoOK = .T.
*--- Se crea un objeto shell para ejecutar el archivo batch
loShell = CreateObject("WScript.Shell")
*--- Se intenta ejecutar el archivo batch, la bandera llComandoOK nos dirá si se ejecutó exitosamente o no
TRY
lnRetorno = loShell.Run("USUARIOS.BAT", 0, .T.)
CATCH
llComandoOK = .F.
ENDTRY
if llComandoOK && Si la ejecución del archivo batch tuvo éxito
*--- En la variable lcUsuarios se guarda el contenido del archivo que tiene los nombres de los usuarios
lcUsuarios = FileToStr(lcArchivo)
*--- Se obtiene la cantidad de caracteres que se usan en los campos memo
lnMemoWidth = Set("MEMOWIDTH")
*--- Se cambia la cantidad de caracteres a 96
SET MEMOWIDTH TO 96
*--- Se obtiene la cantidad de líneas que tiene el archivo donde están los nombres de los usuarios
lnTotalLineas = MemLines(lcUsuarios)
*--- Se guarda en la variable lcLinea el nombre de cada usuario
For lnI = 3 to lnTotalLineas
lcLinea = AllTrim(Left(MLine(lcUsuarios, lnI), 28))
if !Empty(lcLinea)
=MessageBox(lcLinea) && Se muestra en la pantalla el nombre del usuario
endif
EndFor
*--- Se pone la cantidad de caracteres original en los campos memo
SET MEMOWIDTH to lnMemoWidth
else && Si ocurrió algún problema al ejecutar el archivo batch
=MessageBox("No pude obtener los nombres de los usuarios")
endif
*--- Se borra el archivo USUARIOS.BAT porque ya no es necesario
DELETE FILE USUARIOS.BAT
*--- Se libera el objeto loShell
loShell = NULL
Release loShell
Return
*
*
Dentro del código fuente hay muchos comentarios, los cuales te ayudarán a entender que es lo que hace. Si tienes bastante experiencia con Visual FoxPro te resultará muy fácil entenderlo, aún sin los comentarios.
Conclusión:
Aunque no existe (que yo sepa, claro) un SELECT que nos devuelva los nombres de los usuarios escribir un programita que nos de esa información es muy fácil como se puede ver en este artículo.
Artículos relacionados:
Agregando, modificando y borrando usuarios
El índice del blog Firebird21
Comentarios recientes