Criando usuário no Firebird
Olá pessoal, estou aqui mais uma vez para pedir uma força para vocês.
Gostaria de criar os usuários no Firebird e usá-los para logar em meu sistema.
Criarei os roles e tudo mais, mas não sei exatamente como fazer para no meu cadastro de usuário criá-los no FB, dar as permissões e tudo mais, vocês acham que essa é uma boa prática?
Uso Delphi 7 com Firebird 1.5, mas prentendo migrar para 2.0.
Obrigado.
Gostaria de criar os usuários no Firebird e usá-los para logar em meu sistema.
Criarei os roles e tudo mais, mas não sei exatamente como fazer para no meu cadastro de usuário criá-los no FB, dar as permissões e tudo mais, vocês acham que essa é uma boa prática?
Uso Delphi 7 com Firebird 1.5, mas prentendo migrar para 2.0.
Obrigado.
Andrew
Curtidas 0
Respostas
Martins
13/06/2008
Olá pessoal, estou aqui mais uma vez para pedir uma força para vocês.
Gostaria de criar os usuários no Firebird e usá-los para logar em meu sistema.
Criarei os roles e tudo mais, mas não sei exatamente como fazer para no meu cadastro de usuário criá-los no FB, dar as permissões e tudo mais, vocês acham que essa é uma boa prática?
Uso Delphi 7 com Firebird 1.5, mas prentendo migrar para 2.0.
Obrigado.
vc vai utilizar a tabela User do banco Isc4.fdb é isso?
Por que vc não cria uma tabela de usuários no seu banco?
GOSTEI 0
Martins
13/06/2008
Isc4.fdb -> security.fdb
GOSTEI 0
Eniorm
13/06/2008
veja se essa unit te ajuda, foi implementada usando os componentes MDO
se vc precisar de algo mais independende de componentes, recomendo através da execução direta comando gseq.exe através de linha-de-comando disparado pelo seu aplicativo.
{
Delfos Sistemas 2008
www.delfosistemas.com
suporte@delfosistemas.com
Unit: DelfosUsuarios.pas
Data: 28/04/2008
Enio Rodrigo Marconcini <eniorm@gmail.com>
www.Enio.Pro.Br
Descrição: Manipulação de usuários do Firebird para aplicações Delfos
Necessita: Mercury Data Objects - www.mdolib.com
COMO USAR
Adicione a unit ao seu projeto.
Exemplo de uso:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Usuario : TDelfosUsuarios;
begin
Usuario := TDelfosUsuarios.Create;
Usuario.Connect; // conecta automaticamente em 127.0.0.1 com SYSDBA e masterkey
// ou Usuario.Connect(´192.168.0.1´,´NomeUsuario´,´senha´);
if (Usuario.Connected) then
ShowMessage(Usuario.GetListUserNames.Text);
FreeAndNil(Usuario); // ou Usuario.Free;
end;
}
unit DelfosUsuarios;
interface
uses
Classes, SysUtils, Forms, Controls, MDOServices;
const
fbUsername = ´SYSDBA´;
fbPassword = ´masterkey´;
fbLocalHost = ´127.0.0.1´;
type
TDelfosUsuarios = class
protected
Servico : TMDOSecurityService;
public
constructor Create;
destructor Destroy; override;
// conecta ao servidor, se omitir os parâmetros, usará as constantes default
// returna true se nao ocorrer erro na conexão
function Connect(Server : String = fbLocalHost; Username : String = fbUsername; Password : String = fbPassword) : Boolean;
// retorna true caso estiver conectado
function Connected : Boolean;
// retorna um StringList com o nome dos usuários cadastrados no server
function GetListUserNames : TStringList;
// recebe como argumento um nome de usuário
// retorna true caso esse usuário existir
function UserExists(Username : String) : Boolean;
// cria um usuário no server; o login e senha devem ser passados como argumento
// retorna true caso seja criado com sucesso
function CreateUser(Username, Password : String) : Boolean;
// troca a senha do usuário; o argumento username indica o usuário
// e o argumento password indica a nova senha
// retorna true caso seja trocada a senha com sucesso
function ChangePassword(Username, Password : String) : Boolean;
// exclui o usuário cujo login é passado como argumento
// retorna true caso for excluído com sucesso
function DeleteUser(Username : String) : Boolean;
// encerra a conexão com o banco; é usado no método Destroy, porém é
// implementado como public, caso seja necessário desconectar de um server
// e conectar noutro, ou como outro usuário.
procedure Disconnect;
end;
implementation
{ TDelfosUsuarios }
constructor TDelfosUsuarios.Create;
begin
inherited Create;
Servico := TMDOSecurityService.Create(Nil);
end;
destructor TDelfosUsuarios.Destroy;
begin
Disconnect;
FreeAndNil(Servico);
inherited Destroy;
end;
function TDelfosUsuarios.Connect(Server : String = fbLocalHost; Username : String = fbUsername; Password : String = fbPassword) : Boolean;
begin
Result := False;
try
Screen.Cursor := crSQLWait;
if Assigned(Servico) and not Connected then
try
Servico.LoginPrompt := False;
Servico.Params.Add(´user_name=´ + Username);
Servico.Params.Add(´password=´ + Password);
Servico.ServerName := Server;
Servico.UserName := Username;
Servico.Password := Password;
Servico.Active := True;
Result := True;
except
Result := False;
end;
finally
Screen.Cursor := crDefault;
end;
end;
function TDelfosUsuarios.Connected: Boolean;
begin
Result := False;
if Assigned(Servico) then
Result := Servico.Active;
end;
procedure TDelfosUsuarios.Disconnect;
begin
if Assigned(Servico) and Connected then
Servico.Active := False;
end;
function TDelfosUsuarios.CreateUser(Username, Password: String): Boolean;
begin
Result := False;
if Assigned(Servico) and Connected and not UserExists(Username) then
try
Screen.Cursor := crSQLWait;
try
Servico.UserName := Username;
Servico.Password := Password;
Servico.AddUser;
while Servico.IsServiceRunning do;
Result := True;
except
Result := False;
end;
finally
Screen.Cursor := crDefault;
end;
end;
function TDelfosUsuarios.GetListUserNames: TStringList;
var
I : SmallInt;
begin
Result := Nil;
if Assigned(Servico) and Connected then
try
Screen.Cursor := crSQLWait;
Result := TStringList.Create;
Servico.DisplayUsers;
for I := 0 to Servico.UserInfoCount - 1 do
Result.Add(Servico.UserInfo[I].UserName);
finally
Screen.Cursor := crDefault;
end;
end;
function TDelfosUsuarios.UserExists(Username: String): Boolean;
begin
Result := False;
if Assigned(Servico) and Connected then
try
Screen.Cursor := crSQLWait;
Servico.DisplayUser(Username);
Result := Servico.UserInfoCount > 0;
finally
Screen.Cursor := crDefault;
end;
end;
function TDelfosUsuarios.ChangePassword(Username, Password: String): Boolean;
begin
Result := False;
if Assigned(Servico) and Connected and UserExists(Username) then
try
Screen.Cursor := crSQLWait;
try
Servico.UserName := Username;
Servico.Password := Password;
Servico.ModifyUser;
while Servico.IsServiceRunning do;
Result := True;
except
Result := False;
end;
finally
Screen.Cursor := crDefault;
end;
end;
function TDelfosUsuarios.DeleteUser(Username: String): Boolean;
begin
Result := False;
if Assigned(Servico) and Connected and UserExists(Username) then
try
Screen.Cursor := crSQLWait;
try
Servico.UserName := Username;
Servico.DeleteUser;
while Servico.IsServiceRunning do;
Result := True;
except
Result := False;
end;
finally
Screen.Cursor := crDefault;
end;
end;
end.se vc precisar de algo mais independende de componentes, recomendo através da execução direta comando gseq.exe através de linha-de-comando disparado pelo seu aplicativo.
GOSTEI 0