Fórum Firebird - criando usuários #56501

11/07/2006

0

Olá pessoal,

cheguei na parte de cadastro de usuário de meu projeto ^^ :)
Certo.. o mesmo utilizo o componente ZEOS para conexão aos Bancos de dados:
ORACLE, POSTGRES e FIREBIRD
para permição no projeto já ta feito :)
ae eu quero criar um vincu-ló do usuário do sistema com o do banco
ou seja.. quando eu criar um novo usuário para meu projeto criar também o mesmo usuário no banco.. :)
no Oracle e Postgre temos o comando CREATE USER ^^
já no FIREBIRD sei que ele salvas os usuário dentro do segurity2.fdb só que nela não temos acesso direto pelo local ´C:\Arquivos de programas\Firebird\Firebird_2_0´
se copiar-mos o segurity2.fdb para outra pasta ele acessa normal :o

resumindo tudo... como criar o usuário por SQL no FIREBIRD?
a versão do firebird é 2.0 rc3 lançada em 03/07/2006

desde já agradeço! :)


Ajmsistemas

Ajmsistemas

Responder

Posts

11/07/2006

Augustolima

Olá,

No livro Firebird Essentials, fala sobre o utilitário de linha de comando GSEC, nele vc pode criar, alterar e excluir usuários.


Procure algum artigo falando falando sobre ele.

Infelizmente não tô podendo disponibilizar agora os detalhes do capítulo.
:(


Responder

Gostei + 0

11/07/2006

Ajmsistemas

Ok. muito obrigado! pela informação.

e quando poder post ae o comentário do livro ^^
se poder é claro :)


Responder

Gostei + 0

12/07/2006

Ajmsistemas

Ei pessoal surgiu uma dúvida ^^

tipo... já que tenho que rodar o comando em cima do GSEC.EXE
como fazer o mesmo ? já tentei da seguinte forma :

criando um arquivo *.BAT ele conecta e não executa a 2 linha :(
var
 tmp:TextFile;
begin
    if FileExists( ´gsec.exe´ ) then begin
      AssignFile(tmp, ´add.bat´);
         Rewrite(tmp);
         Writeln(tmp, ´gsec.exe -user SYSDBA -password masterkey´) ;
         Writeln(tmp, ´a testando -pw teste´) ;
         Writeln(tmp, ´q´) ;
       CloseFile(tmp);
      WinExec(´add.bat´, SW_SHOW );
      Sleep(1000);
      if FileExists(´add.bat´) then
         DeleteFile(´add.bat´);
    end;
end;

Executando um atraz do outro
       WinExec(´gsec.exe -user SYSDBA -password masterkey´, SW_SHOW );
       WinExec(´gsec.exe a testando -pw teste´, SW_SHOW );

e executando tudo de uma vez
var 
  tmp:string;
 begin
        if FileExists( ´gsec.exe´ ) then begin
          tmp := ´gsec.exe -user SYSDBA -password masterkey´ + #13 +
                 ´a testando -pw teste´;
          WinExec(pchar(tmp), SW_SHOW );
        end;
 end;


Como fazer para executar essa linha de comando ?
e criar o usuário no banco ???
alguém poderia me dar uma forcinha ^^
desde já agradeço!


Responder

Gostei + 0

12/07/2006

Ajmsistemas

Pessoal!

Resolvi :)

resposta estava no forum mesmo ^^
[url]http://forum.devmedia.com.br/viewtopic.php?t=66954&highlight=gsec&sid=a0d3cc1ab9aa9a00a34715f9cd298b06[/url]


resumindo a melhor resposta é a Pesquisa ^^
Obrigado pela atenção de todos!


Responder

Gostei + 0

13/07/2006

Ajmsistemas

:( pessoal... a coisa ta ficando preta ^^ denovo rss


é o seguinte para adicionar um usuário no FIREBIRD basta usar a GSEC
o seguinte comando :
gsec -add andeson -pw teste -user SYSDBA -password masterkey


certo... porém só vai funcionar blz se for servidor local ^^

o meu problema agora é...
se o servidor estiver lá na casa da china ^^ e eu estou aqui no Brasil :(
certo o comando seria :
gsec -add andeson -pw teste -user SYSDBA -password masterkey -database 192.168.1.2:3050:"C:\Arquivos de programas\Firebird\security2.fdb"

o problema é que no FIREBIRD acima do 2.0 o security2.fbd ta bloqueado o acesso

como farei para cadastar o usuário ?
ae pensei em UDF até criei uma rotina
library TOPFBUDF;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library´s USES clause AND your project´s (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  ShareMem,
  Windows,
  SysUtils {$IFDEF LINUX},
  LibC {$ENDIF LINUX},
  Classes;

  //Implementação
  Function CREATEUSER ( login, senha :string ) : Integer; {$IFDEF MSWINDOWS}stdcall{$ENDIF}{$IFDEF LINUX}cdecl{$ENDIF};
  var
    tmp:string;
  begin
    Result := 0;
     {$IFDEF MSWINDOWS}
       if FileExists(´gsec.exe´) then
         begin
            tmp := ´gsec.exe -add ´ + LowerCase(login) + ´ -pw ´ + LowerCase(senha) + ´ -user SYSDBA -password masterkey´;
            WinExec( pchar(tmp), SW_HIDE );
            Result := 1;
         end;
     {$ENDIF MSWINDOWS}

     {$IFDEF LINUX}
       if FileExists(´gsec´) then
          begin
            tmp := ´gsec -add ´ + LowerCase(login) + ´ -pw ´ + LowerCase(senha) + ´ -user SYSDBA -password masterkey´;
            result := 1;
          end;
     {$ENDIF LINUX}
  end;

{$R *.res}
// funcoes exportadas
exports
   CREATEUSER;

begin
end.

//o declare dele

declare external function criaUser
 cstring(128), cstring(128)
 returns
   integer by value
entry_point ´CREATEUSER´ module_name ´TOPFBUDF´ 



porém como ele vai executar um programa externo ele Trava ´´ o banco :(

por favor... Alguém pode me dar uma força ????


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar