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.

USUARIOS

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