Agregar y borrar usuarios de Firebird desde C++ builder

Agregar usuario

En la pestaña InterBase Admin de C++ builder 6 existe el componente TIBSecurityService, este componente sirve para agregar o borrar usuarios de un servidor de base de datos Firebird, así como para mostrar o modificar su información.

Suponiendo que dejamos la contraseña por default del usuario sysdba de Firebird y tenemos en un formulario de C++ Builder 6 (llamado Form1) un componente TButton llamado Button1 y 4 componentes TEdit llamados e_usuario, e_nombre, e_apellido y e_clave respectivamente, podríamos agregar un componente TIBSecurityService llamado IBSecurityService1 y poner el siguiente código en el evento OnClick de Button1 para agregar un usuario al servidor Firebird con los datos que contengan los TEdit.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  IBSecurityService1->Params->Values["user_name"]="sysdba";
  IBSecurityService1->Params->Values["password"]="masterkey";

  IBSecurityService1->Active = true;
  try
     {
      IBSecurityService1->UserName = e_usuario->Text;
      IBSecurityService1->FirstName = e_nombre->Text;
      IBSecurityService1->LastName = e_apellido->Text;
      IBSecurityService1->Password = e_clave->Text;
      IBSecurityService1->AddUser();
     }
  __finally
           {
            IBSecurityService1->Active = false;
           }
}

Notese que para indicar el usuario y password con el que se conectará el componente TIBSecurityService se usó

IBSecurityService1->Params->Values[“user_name”]=”sysdba”;
IBSecurityService1->Params->Values[“password”]=”masterkey”;

y no:

IBSecurityService1->Params->Add(“user_name = sysdba”);
IBSecurityService1->Params->Add(“password = masterkey”);

Ya que marcaría un error como “SPB Constant Unknown

Con esto queda agregado el usuario, pero falta hacer los grants para darle permisos de consulta (grant select), inserción (grant insert), borrado (grant delete) y actualización (grant update) sobre las tablas de la base de datos deseada.

Otorgar grants al usuario

Para esto, crearemos un stored procedure (procedimiento almacenado) en la base de datos.

El stored procedure (que llamaremos sp_Grants) otorgará todos los grants a un usuario sobre una tabla determinada; recibirá como parámetros el usuario y el nombre de la tabla.


/* Este procedure otorga todos los permisos al usuario que recibe como parámetro
   sobre la tabla que recibe como parámetro */

set term !! ;
create procedure sp_Grants(s_tabla varchar(65), s_usuario varchar(8))
as
  begin
        execute statement 'grant all on ' || :s_tabla || ' to ' || :s_usuario;
  end !!
set term ; !!

Agregamos a nuestro formulario un componente TIBDatabase llamado IBDatabase1 y un componente TIBStoredProc llamado IBSP_grants. En la propiedad Database del TIBStoredProc ponemos IBDatabase1 y en la propiedad StoredProcName SP_GRANTS (que es el nombre del stored procedure que creamos en la base de datos).

Por último agregamos un componente TListBox al que llamaremos lb_tablas. Lo que haremos será conectarnos a la base de datos, obtener los nombres de todas las tablas y pasarlos al ListBox, después iremos recorriendo el ListBox para otorgar todos los grants sobre todas las tablas al usuario llamando a nuestro stored procedure.

Basta con agregar el siguiente código al final del código que pusimos anteriormente en el evento OnClick del TButton llamado Button1.

En el ejemplo nuestra base de datos se llama prueba.fdb y se encuentra en el directorio llamado prueba de la unidad c:

 // Asigna la ruta a la base de datos
 IBDatabase1->Params->Values["user_name"]="sysdba";
 IBDatabase1->Params->Values["password"]="masterkey";
 IBDatabase1->DatabaseName = "c:\\prueba\\prueba.fdb";

 // Hace la conexión a la base de datos
 IBDatabase1->Connected=true;

 // Pasa los nombres de las tablas de la base de datos al ListBox
 IBDatabase1->GetTableNames(lb_tablas->Items,False);

 // Se desconecta de la base de datos
 IBDatabase1->Connected=false;

 for (int i_x=0; i_x<lb_tablas->Items->Count; i_x++)
     {
      IBSP_grants->ParamByName("s_tabla")->AsString = Trim(lb_tablas->Items->Strings[i_x]);
      IBSP_grants->ParamByName("s_usuario")->AsString = e_usuario->Text;
      IBSP_grants->ExecProc();
      lb_tablas->ItemIndex++;
     }
 lb_tablas->Clear();

Si queremos que no se vea el ListBox sólo debemos poner false en su propiedad Visible

Borrar usuario

Agregamos un componente TButton al que llamaremos Button2 y en su evento OnClick pondremos el siguiente código


void __fastcall TForm1::Button2Click(TObject *Sender)
{
  IBSecurityService1->Params->Values["user_name"]="sysdba";
  IBSecurityService1->Params->Values["password"]="masterkey";

  IBSecurityService1->Active = true;
  try
     {
      IBSecurityService1->UserName = e_usuario->Text;     
      IBSecurityService1->DeleteUser();
     }
  __finally
           {
            IBSecurityService1->Active = false;
           }
}

Nota: En el post la macro de wordpress muestra finally, pero debe ser __finally

Etiquetas: , ,

Una respuesta to “Agregar y borrar usuarios de Firebird desde C++ builder”

  1. Agregar y borrar usuarios de Firebird desde C++ builder - DbRunas Says:

    […] https://salomonrt.wordpress.com/2009/02/23/agregar-y-borrar-usuarios-de-firebird-desde-c-builder/ […]

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: