Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-02-2009
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Question Nuevos Usuarios en Firebird

Hola amigos del foro, actualmente estoy desarrollando una aplicación y me gustaría saber cómo puedo crear un usuario por código desde delphi y asignarle un rol, de ante mano muchas gracias por todos sus aportes.

Saludos.
Responder Con Cita
  #2  
Antiguo 23-02-2009
Nasca Nasca is offline
Miembro
 
Registrado: abr 2007
Ubicación: Almería (España)
Posts: 249
Poder: 18
Nasca Va por buen camino
Crear el usuario lo hago conectándome a la base de datos security.fdb y usando una sentencia como esta:

Código SQL [-]
insert into users (user_name, first_name, middle_name, last_name, passwd) values(:user_name, :first_name, :middle_name, :last_name, assword)

Hay que encriptar la password usando UnixCrypt:

Código Delphi [-]
function CreateFirebirdPassword(const password: String): String;
begin
    Result := Copy(UnixCrypt(password, '9z'),3,99);
    Result := Copy(UnixCrypt(Result, '9z'),3,99);
end;

Espero que te sirva.
Responder Con Cita
  #3  
Antiguo 23-02-2009
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Hola Nasca, gracias por tu aporte, me funcionó perfectamente, ahora me gustarìa saber còmo le asigno un rol a usuario y de paso còmo hago la consulta que me muestre los roles que tiene una base de datos...


Gracias nuevamente por tu aporte Nasca.
Responder Con Cita
  #4  
Antiguo 23-02-2009
Nasca Nasca is offline
Miembro
 
Registrado: abr 2007
Ubicación: Almería (España)
Posts: 249
Poder: 18
Nasca Va por buen camino
Cita:
Empezado por GustavoCruz Ver Mensaje
Hola Nasca, gracias por tu aporte, me funcionó perfectamente, ahora me gustarìa saber còmo le asigno un rol a usuario y de paso còmo hago la consulta que me muestre los roles que tiene una base de datos...
Para asignar el rol investiga la sentencia GRANT, pero así por encima algo como esto:

sqldPermisos.CommandText := 'GRANT '+rol+' TO '+usuario;

Como ves también lo hago mediante ExecSQL()

Con respecto a la consulta:

Código SQL [-]
select (UP.RDB$USER) as USER_NAME,  (UP.RDB$RELATION_NAME) as ROL, rd.ROLE_DESCRIPCION 
from RDB$USER_PRIVILEGES UP left outer join RDB$RD rd on(UP.RDB$RELATION_NAME = rd.RDB$ROLE_NAME) 
where UP.RDB$PRIVILEGE = 'M' and UP.RDB$OBJECT_TYPE = 13 
order by UP.RDB$RELATION_NAME'

Espero que te sirva, yo tengo conectado el dataset de los roles al de los usuarios como un maestro-detalle y así puedo ir viendo los roles de cada usuario.
Responder Con Cita
  #5  
Antiguo 24-02-2009
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
Muy buen aporte. Muy útil.

Saludos y gracias !!!!
Responder Con Cita
  #6  
Antiguo 27-02-2009
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Hola nuevamente, aunque dije que me había funcionado, lo hice en una base de datos firebird 1.5, pero no me he podido conectar a security2.fdb en firebird 2.1, si aquí se hace de otro modo... te gradecería muchísimo que me no indicaras.

De ante mano muchas gracias...
Responder Con Cita
  #7  
Antiguo 27-02-2009
Nasca Nasca is offline
Miembro
 
Registrado: abr 2007
Ubicación: Almería (España)
Posts: 249
Poder: 18
Nasca Va por buen camino
Lo siento no lo he probado, mira la estructura de tablas por si cambia algún campo.
Responder Con Cita
  #8  
Antiguo 02-03-2009
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Hola.
Lo de conectarse directamente a la bd de seguridad de Firebird, sólo es válido para versiones 1.x, a partir de la version 2.0 esto ya no es posible.

Para dar de alta un usuario en Firebird 2.x, debes usar la herramienta gsec:
gsec.exe -USER SYSDBA -PASSWORD masterkey -add <nombre_usuario> -pw <Clave_usuario>

Para modificar un usuario:
gsec.exe -USER SYSDBA -PASSWORD masterkey -modify <nombre_usuario> -pw <Clave_usuario>

Para borrar un usuario:
gsec.exe -USER SYSDBA -PASSWORD masterkey -delete <nombre_usuario>
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita
  #9  
Antiguo 03-03-2009
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Smile

Hola dfcon_1 te agradezco la información, pero no sé como ejecutar los parámetros, lo escribí como me mostrarte en tu post y me dio esto:

GSEC> user SYSDBA - PASSWORD masterkey - add gustavo - pw lucenys;
invalid switch specified
error in switch specifications
invalid switch specified in interactive mode
GSEC>


me gustaría que me mostraras la forma de crear el nuevo usuario


Gustavo Cruz
Responder Con Cita
  #10  
Antiguo 04-03-2009
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Hola Gustavo, te lo puse para que lo ejecutaras desde la linea de comandos, pero desde delphi, yo hago esto:
Código Delphi [-]
ShellExecute_AndWait(
    PChar(ExtractFilePath(GetIBServerDataBase)+'bin\gsec.exe'),
    PChar('-USER SYSDBA -PASSWORD '+DatosSesion.Password+
    ' -modify '+Nombre+' -pw '+Clave),
    PChar(ExtractFilePath(GetIBServerDataBase)+'bin'));
// Con esta funcion, averigüo la ruta donde está el gsec.exe
// mirando en el registro de windows las distintas claves, según el motor y // version del mismo
Código Delphi [-]
function GetIBServerDataBase:string;
var Reg:TRegistry;
    FbsecuriyFile, FbsecuriyFile2, FbISC4: String;
begin
  Reg:=TRegistry.create;
  try
    Reg.Access:=KEY_READ;
    Reg.RootKey:=HKEY_LOCAL_MACHINE;
    if Not reg.OpenKey('SOFTWARE\Firebird Project\Firebird Server\Instances',false)
    then begin
      if Not reg.OpenKey('Software\FireBirdSQL\FireBird\CurrentVersion',false)
      then if Not reg.OpenKey('Software\Borland\InterBase\CurrentVersion',false)
           then if Not reg.OpenKey('Software\InterBase Corp\InterBase\CurrentVersion',false)
                then Raise Exception.Create('Interbase no está instalado en este equipo');
      FbsecuriyFile:=reg.ReadString('RootDirectory');
    end
    else begin
      FbsecuriyFile:=reg.ReadString('DefaultInstance');
    end;
    if Length(FbsecuriyFile)<=0
    then Raise Exception.create('Interbase no está instalado en este equipo');

    if FbsecuriyFile[length(FbsecuriyFile)]='\'
    then FbsecuriyFile:=Copy(FbsecuriyFile,1,Length(FbsecuriyFile)-1);
    FbISC4 := FbsecuriyFile + '\isc4.gdb';
    FbsecuriyFile2 := FbsecuriyFile + '\security2.fdb';
    FbsecuriyFile := FbsecuriyFile + '\security.fdb';
    if FileExists(FbsecuriyFile2)
    then Result := FbsecuriyFile2
    else if FileExists(FbsecuriyFile)
         then Result := FbsecuriyFile
         else if FileExists(FbISC4)
              then Result := FbISC4
              else Result := InputBox('No se encuentró la B.D. de USUARIOS de InterBase/FireBird.',
                                      'Teclee la ruta completa del fichero "security2.fdb", "security.fdb" o "isc4.gdb"',
                                      'C:\Archivos de programa\Firebird\FireBird_2_0\security2.fdb');
  finally
    Reg.free;
  end;
end;
// este procedimiento ejecuta un programa externo
Código Delphi [-]
procedure ShellExecute_AndWait(const FileName, Params, RutaDirectorio: string);
var
  exInfo: TShellExecuteInfo;
  Ph: DWORD;
begin
  FillChar(exInfo, SizeOf(exInfo), 0);
  with exInfo do
  begin
    cbSize       := SizeOf(exInfo);
    fMask        := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    Wnd          := GetActiveWindow();
    lpVerb       := 'open';
    lpParameters := PChar(Params);
    lpFile       := PChar(FileName);
    lpDirectory  := PChar(RutaDirectorio);
    nShow        := SW_HIDE; //SW_SHOWNORMAL;
  end;
  if ShellExecuteEx(@exInfo)
  then Ph := exInfo.HProcess
  else begin
    ShowMessage(SysErrorMessage(GetLastError));
    Exit;
  end;
  while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
    Application.ProcessMessages;
  CloseHandle(Ph);
end;
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita
  #11  
Antiguo 06-03-2009
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Hola defcon1_es, tu sabras disculpar mi torpeza pero resulta que aún no logro dar con el asunto...

No sé para qué utilizas la función GetIBServerDataBase?
y tampoco sé cuál es el programa externo que ejecutas y para qué lo haces?
en cuanto a la sentencia para dar de alta al nuevo usuario, es error que me mostraba al principio era por separar los guiones, lo hice sin separar y me mostró este resultado:

"invalid switch specified in interactive mode"

la línea la escribí así: "USER SYSDBA -PASSWORD masterkey -add gustavo -pw lucenys"

Gracias por tu ayuda que es sumamente valiosa
Responder Con Cita
  #12  
Antiguo 08-03-2009
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Cita:
Empezado por GustavoCruz Ver Mensaje
No sé para qué utilizas la función GetIBServerDataBase?
Para averiguar la ruta donde se instaló FireBird, porque FireBird lo puedes instalar en cualquier carpeta.
Cita:
Empezado por GustavoCruz Ver Mensaje
y tampoco sé cuál es el programa externo que ejecutas y para qué lo haces?
El programa externo es gsec.exe, y sirve para el mantenimiento de los usuarios de FireBird (altas, bajas y modificaciones)

Teclea esto desde la consola de comandos (tipo ms-dos), o desde el boton de Inicio de windows, opcion "Ejecutar":

C:\Archivos de programa\Firebird\Firebird_1_5\bin\gsec -USER SYSDBA -PASSWORD masterkey -add gustavo -pw lucenys
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita
  #13  
Antiguo 12-03-2009
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Hola defcon1_es, ciertamente te agradezco mucho la ayuda que me haz prestado y la paciencia que haz tenido. He comprendido, sólo hasta hoy, tu código, y me ha funcionado perfectamente...

Gracias a ti y a todos los que enviaron sus aportes
Responder Con Cita
  #14  
Antiguo 13-03-2009
jconnor82 jconnor82 is offline
Miembro
 
Registrado: feb 2008
Posts: 22
Poder: 0
jconnor82 Va por buen camino
Solo para agregar algo:

uso los componentes FIBPlus y este tiene uno TpFIBSecurityService paleta FIBPlusServices el cual se encarga de adminstrar usuarios.

las rutinas para crear, eliminar o modificar son estas:

Crear usuario:

Código Delphi [-]
    pFIBSecurityService1.Params.Values['user_name'] := 'sysdba';
    pFIBSecurityService1.Params.Values['password'] := 'masterkey';
  
    pFIBSecurityService1.Active := True;
    try
      pFIBSecurityService1.UserName := edUserName.Text;
   
      pFIBSecurityService1.Password := edPassword.Text;
       pFIBSecurityService1.FirstName := edFirstName.Text;
      pFIBSecurityService1.LastName := edLastName.Text;
      pFIBSecurityService1.GroupID := StrToInt(edGroupID.text); {No necesario}
      pFIBSecurityService1.AddUser;
    finally
      pFIBSecurityService1.Active := False;
    end;

Modificar usuario:

Código Delphi [-]
     pFIBSecurityService1.Params.Values['user_name'] := 'sysdba';
     pFIBSecurityService1.Params.Values['password'] := 'masterkey';
   
     pFIBSecurityService1.Active := True;
     try
       pFIBSecurityService1.UserName := edUserName.Text;
    
      pFIBSecurityService1.Password := edPassword.Text;
        pFIBSecurityService1.FirstName := edFirstName.Text;
       pFIBSecurityService1.LastName := edLastName.Text;
       pFIBSecurityService1.GroupID := StrToInt(edGroupID.text); {No necesario}
       pFIBSecurityService1.ModifyUser;
     finally
       pFIBSecurityService1.Active := False;
     end;

Borrar usuario:

Código Delphi [-]
     pFIBSecurityService1.Params.Values['user_name'] := 'sysdba';
      pFIBSecurityService1.Params.Values['password'] := 'masterkey';
    
      pFIBSecurityService1.Active := True;
      try
        pFIBSecurityService1.UserName := edUserName.Text;
   
        pFIBSecurityService1.DeleteUser;
      finally
        pFIBSecurityService1.Active := False;
      end;

Supongo y otros componentes libres como zeos tienen implementada esta funcion.

Como referencia te dejo el link Codigo Fuente

Última edición por jconnor82 fecha: 13-03-2009 a las 14:35:15.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear Usuarios en Firebird kpss8m Firebird e Interbase 18 20-10-2012 01:05:24
Usuarios en FireBird mRoman Conexión con bases de datos 7 28-08-2008 13:47:18
Usuarios y seguridad en Firebird dango Firebird e Interbase 4 11-07-2006 18:13:26
usuarios con IB Expert for Firebird ale21alito Conexión con bases de datos 2 03-04-2005 19:08:12
Usuarios en Firebird pzhero Firebird e Interbase 4 03-05-2004 22:30:44


La franja horaria es GMT +2. Ahora son las 05:50:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi