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
Comentarios recientes