Autenticação do Windows para Progress

Discussão em 'Banco de Dados / Database' iniciado por jscatena, Março 23, 2010.

  1. jscatena

    jscatena Sem Pontuação

    Olá,
    estamos tentando minizar a quantidade de senhas/logins por usuários aqui na empresa, e com isso gostaria de saber se podemos utilizar a autenticação do Windows para acessar nosso sistema em Progress.

    Abs.
  2. kirchner

    kirchner Membro Participativo Moderador

    jscatena,

    Até onde conheço o Progress não possui uma funcionalidade deste tipo. Mas você pode implementar na sua aplicação da forma que achar mais conveniente.

    Por padrão o Progress não faz controle de acesso ao banco de dados. Todos conectam e podem fazer o que quiserem. Mesmo sem usuário ou senha.
    Já na sua aplicação, você pode criar uma tabela, cadastrar os usuários do Windows que possuam acesso e verificar o usuário autenticado. Eu fiz isso estes tempos. Se achar o código te envio.
  3. kirchner

    kirchner Membro Participativo Moderador

    Opa, achei:

    Código:
    PROCEDURE GetUserNameExA EXTERNAL "secur32.dll":
        DEF INPUT PARAMETER NameFormat AS SHORT NO-UNDO.
        DEF OUTPUT PARAMETER lpNameBuffer AS CHAR NO-UNDO.
        DEF INPUT-OUTPUT PARAMETER nSize AS LONG NO-UNDO.
        DEF RETURN PARAMETER intResult AS SHORT NO-UNDO.
    END PROCEDURE.
    
    PROCEDURE GetUserName :
    DEF INPUT PARAMETER Domain AS CHAR NO-UNDO.
        DEF OUTPUT PARAMETER UserName AS CHAR NO-UNDO.
    
        DEF VAR nome AS CHAR NO-UNDO.
        DEF VAR len AS INT NO-UNDO.
        DEF VAR r AS INT NO-UNDO.
        ASSIGN nome = FILL(' ', 256)
            len = 255.
    
        RUN GetUserNameExa(INPUT 4, OUTPUT nome, INPUT-OUTPUT len, OUTPUT r).
    
        IF INDEX(nome, Domain) > 0 THEN DO:
            ASSIGN UserName = ENTRY(1, nome, '@').
            IF UserName + '@' + Domain <> nome THEN DO:
                ASSIGN UserName = ''.
            END.
        END.
    END.
    
    
    DEF VAR login AS CHAR NO-UNDO.
    RUN GetUserName(INPUT 'seu.dominio', OUTPUT login).
    
    disp login format "x(50)".

    Na chamada da procedure GetUserName você tem que passar o domínio. O parâmetro de saída login contém o login do usuário autenticado.
    Daí você pode pesquisar na tabela de controle se este usuário pode usar o sistema ou não.
  4. baltazar

    baltazar Membro Participativo

    Bom dia,

    segue código para usar as credencias do Windows (testado com sucesso em Windows Server 2003)

    Código:
    DEFINE VARIABLE chConn AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE chRS AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE iRecordsAffected AS INTEGER NO-UNDO.
    DEFINE VARIABLE iOptions AS INTEGER NO-UNDO.
    DEFINE VARIABLE cQuery AS char NO-UNDO.
    
    CREATE "ADODB.Connection" chConn NO-ERROR.
    chConn:Provider = "ADsDSOObject".
    chConn:Properties("User ID") = "heliotextil\baltazar".
    chConn:Properties("Password") = "".
    chConn:OPEN = "ADSI Providers".
    
    CREATE "ADODB.Recordset" chRS NO-ERROR.
    /* cQuery = "SELECT name,lastLogon,pwdLastSet FROM 'LDAP://192.168.0.251/CN=users,OU=Accounts,OU=buitin,DC=heliotextil,DC=com'". */
    
    cQuery = "SELECT name,lastLogon,pwdLastSet FROM 'LDAP://192.168.0.251/CN=users,DC=heliotextil,DC=com'".
    
    chRS = chConn:EXECUTE(cQuery,OUTPUT iRecordsAffected,iOptions) NO-ERROR.
    
    MESSAGE "Auth?" VALID-HANDLE(chRS)
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    Espero que ajude
  5. jscatena

    jscatena Sem Pontuação

    Caros, primeiramente agradeço a atenção.
    A idéia é verificar login/senha utilizados para acessar a rede (autenticação do windows). A dúvida é:
    - Em que momento eu vou chamar essas validações (procedures), sem que o usuario informe usuário e senha...
    Não sei se fui bem claro....

    Abs,
    Jeferson.
  6. kirchner

    kirchner Membro Participativo Moderador

    Jeferson,

    Varia, mas normalmente você autentica o usuário na abertura do sistema.

    Então, no teu programa inicial, você valida o usuário do Windows. Se estiver ok a vida continua.
    Senão, você ainda pode ter uma opção de login e senha para o usuário.

Compartilhe esta Página