Results 1 to 9 of 9

Thread: Add user to Interbase

  1. #1
    TCrapCodeProducer JackBigMac's Avatar
    Join Date
    May 2002
    Location
    Rotterdam
    Posts
    1,293

    Add user to Interbase

    Hallo,

    Ik voeg in een app users toe aan Interbase:

    uses IB, IBExternals, IBHeader;

    procedure AddDBUser(UserName, Password: string);
    var
    p_status: PISC_STATUS;
    status: array[0..19] of ISC_STATUS;
    user_sec_data1: TUserSecData;
    begin
    p_status := @status[0];
    user_sec_data1.protocol := sec_protocol_tcpip;
    user_sec_data1.server := 'localhost';
    user_sec_data1.user_name := PChar(UserName);
    user_sec_data1.password := PChar(Password);
    user_sec_data1.dba_user_name := 'sysdba';
    user_sec_data1.dba_password := 'masterkey';
    user_sec_data1.sec_flags := sec_password_spec or sec_server_spec or
    sec_dba_user_name_spec or sec_dba_password_spec;
    isc_add_user(p_status, @user_sec_data1);
    end;

    Deze procedure gaat alleen goed als het paswoord niet langer is dan 7 karakters.
    Waarom? En is er een andere (betere) manier om users aan Interbase toe te voegen?

    JackBigMac.
    It is in change that we find purpose.

  2. #2
    Senior Member walterheck's Avatar
    Join Date
    Oct 2001
    Location
    Belo Horizonte, Brasil
    Posts
    4,212
    wat is dat voor een class die TUserSecData?

    waarom gebruik je niet de IBSecurityService component van het IBAdmin component palette page?
    Nee, de Romeinen spraken geen ISO-8859-1 LATIN

  3. #3
    TCrapCodeProducer JackBigMac's Avatar
    Join Date
    May 2002
    Location
    Rotterdam
    Posts
    1,293
    Originally posted by walterheck
    wat is dat voor een class die TUserSecData?

    waarom gebruik je niet de IBSecurityService component van het IBAdmin component palette page?

    Ik heb het nu zo gedaan:

    procedure TWebModule.ModifyDBUser(LoginName, LoginPassword: string);
    begin
    with TIBSecurityService.Create(nil) do
    begin
    try
    BufferSize := 32000;
    Protocol := TCP;
    LoginPrompt := False;
    ServerName := 'localhost';
    SecurityAction := ActionModifyUser;
    Params.Add('user_name=SYSDBA');
    Params.Add('password=masterkey');
    Active := True;
    UserName := LoginName;
    Password := LoginPassword;
    ModifyUser;
    Active := False;
    finally
    Free;
    end;
    end;
    end;

    Maar als ik nu direct hierna probeer in te loggen met het gewijzigde password voor deze gebruiker, dan komt de melding:
    'Your user name and password are not defined. Ask your database administrator to set up an InterBase login'.
    Als ik de applicatie herstart, lukt het wel om in te loggen met het gewijzigde password.
    Ik gebruik een TSQLConnection om te connecten met de database.

    Heeft iemand dit probleem al eens ondervonden?

    JackBigMac.
    It is in change that we find purpose.

  4. #4
    Senior Member walterheck's Avatar
    Join Date
    Oct 2001
    Location
    Belo Horizonte, Brasil
    Posts
    4,212
    ik denk (weet het niet zeker, maar wel bijna) dat je ook hier een transaction omheen moet zetten. zo dus:

    Code:
    IBTransaction.StartTransaction;
    try
      ... (doe hier je ding)
      IBTransaction.Commit;
    except
      IBTransaction.RollBack;
    end;
    Nee, de Romeinen spraken geen ISO-8859-1 LATIN

  5. #5
    Ik denk dat je ook de verbinding naar je DB even moet verbreken en dan opnieuw inloggen. Dan gebeurt er eigenlijk hetzelfde als afsluiten en opstarten.
    Marcel

  6. #6
    Senior Member walterheck's Avatar
    Join Date
    Oct 2001
    Location
    Belo Horizonte, Brasil
    Posts
    4,212
    m: dat zou toch niet nodig hoeven te zijn? als hij de transaction commit en hem op read committed heeft staan moet dat toch gewoon werken? (Ik weet het niet hoor, maar dat zou ik zo zeggen)
    Nee, de Romeinen spraken geen ISO-8859-1 LATIN

  7. #7
    TCrapCodeProducer JackBigMac's Avatar
    Join Date
    May 2002
    Location
    Rotterdam
    Posts
    1,293

    Thumbs up

    Het probleem is al opgelost.

    Het nieuwe paswoord dat de gebruiker intikt, wordt geëncrypt naar een string van 32 karakters, terwijl een Interbase-paswoord maar 31 lang mag zijn. (blaat, )

    Het geëncrypte paswoord plakte ik in het paswoord-veld in IBConsole. Deze is ook maximaal 31, dus werd er wel ingelogd door IBConsole.

    Grtn,
    JackBigMac.
    It is in change that we find purpose.

  8. #8
    Senior Member walterheck's Avatar
    Join Date
    Oct 2001
    Location
    Belo Horizonte, Brasil
    Posts
    4,212
    tenzij ik me heel sterk vergis, mag je bij interbase een pw opgeven van maximaal 8 karakters. de rest wordt genegeerd. kijk maar eens maar het standaard: user SYSDBA heeft dan pw MASTERKEY, maar IB zal ook dit accepteren: MASTERKE, of zelfs MASTERKEDITWORDTTOCHALLEMAALGENEGEERD...
    Nee, de Romeinen spraken geen ISO-8859-1 LATIN

  9. #9
    TCrapCodeProducer JackBigMac's Avatar
    Join Date
    May 2002
    Location
    Rotterdam
    Posts
    1,293
    In de Interbase Developers Guide is terug te vinden dat het paswoord maximaal 31 karakters lang mag zijn. De eerste 8 karakters zijn inderdaad significant.

    Dus wat jij zegt is waar... maar als je een paswoord van 32 lang probeert door te geven, gaat dit toch niet lukken.
    It is in change that we find purpose.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. dbExpress - Tabel kopieren/renamen
    By TonS in forum Databases
    Replies: 16
    Last Post: 14-Oct-04, 23:21
  2. Interbase User aanmaken
    By gilby in forum Databases
    Replies: 12
    Last Post: 30-Mar-03, 20:15
  3. Maak een verjaardagskalender in Interbase
    By mhemmes in forum Artikelen & tips
    Replies: 5
    Last Post: 03-Dec-01, 12:28

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •