La sécurité de savoir qui est qui


L'éternel Débutant - Entrée de Journal #5.2
Cet article est d'abord paru sur http://www.undu.com
Une version antérieure de cet article est parue début Février 00. Quelques corrections, un peu judicieuse de l'édition et l'amélioration de l'organisation sera on l'espère, dans quelque chose de mieux pour vous, le lecteur.
Récemment, j'ai trouvé moi-même sans qu'une demande de connexion d'un composant. Forcé par les circonstances à en créer une pour au moins temporaire d'utilisation, j'ai trouvé l'expérience assez intéressant que je pensais prendre une course à l'écriture d'un omnibus article pour mes collègues débutants. Méfiez-vous temporaire enchaîner un peu plus loin vers le bas!
Un formulaire de connexion n'est pas toujours le signe d'une programmation paranoïaque. Honnêtement, j'ai utiliser le formulaire de connexion pour savoir qui est à l'aide de l'application, de sorte que je peux entrées de balise et d'éditer avec un identifiant. Si vous avez besoin d'une sécurité forte au niveau du composant ou au niveau de menu, quitter maintenant et découvrez à part entière des systèmes comme l'UIL Système de Sécurité. Mais si vous exécutez une application unique avec quelques utilisateurs que vous le souhaitez à se différencier, ou si vous voulez avoir un peu de sécurité, ' lecture sur.
Lecteurs se souviendront que j'ai tendance à acheter mes solutions plutôt que de ré-inventer. Pour la sécurité et une très chouette formulaire de connexion, j'ai préféré Kalliopi de SecurityGuard système. Lors de l'utilisation de Delphi 3, je trouve qu'il est rapide à installer, facile à exécuter et très puissant. Malheureusement, il n'y a pas de Delphi 5 version. Bien que j'aurais été être en première ligne quand il est sorti, mes dernières informations, c'est qu'il ne se produira jamais. Tellement, que j'avais d'avoir un système de connexion qui a pris le parti des choses les plus importantes que j'en étais venu à attendre de SecurityGuard. Il devait avoir un écran de connexion et un moyen d'extraire des informations sur l'utilisateur des niveaux de sécurité et d'autres informations, telles que les préférences (j'ai pu le faire par le biais INI/les fichiers de Registre, mais c'est TELLEMENT plus facile de le mettre dans la sécurité de la table, comme certains utilisateurs à migrer à partir de l'ordinateur à ordinateur).
compte tenu de mon besoin temporaire pour une connexion, j'ai décidé de limiter mes ambitions et de travailler sur d'obtenir le nom et le niveau de sécurité d'infos dans l'application. J'ai commencé avec la conception de la sécurité de la table, que j'appelle PAZWORDZ. Ce tableau doit inclure un champ pour le nom d'utilisateur (à clé), le mot de passe et toute autre information que vous jugez approprié.
SEGUE: Nommage des Champs
Dans la création de votre propre version d'un titre de tableau, mais quel que soit le nom, envisager une mise en garde. N'abusez pas de votre droit de nommer les champs que vous voulez. Il y a plusieurs années, je faisais partie de la première opération de combiner Paradoxe de DOS, Interbase et le peer-to-peer networking. Borland a dit qu'il ne pouvait pas être fait à l'époque, mais nous n'avons ... après on se fixe toute une série de questions liées à la toponymie.
& nbsp j'ai découvert ensuite que les espaces, traits de soulignement et des signes de ponctuation sont MAL, MAL, MAL dans les noms de champ. Comme tout le monde, à l'époque, j'ai été ravie de secouer le joug d'limitée dBase noms et aimé Paradoxe de la capacité à utiliser des noms qui ont couru sur et sur et sur et sur. C'était l'équivalent d'une nouvelle édition de bureau de l'utilisateur de trouver des polices de caractères et leur abondance. Ou quand les premiers temps W95 utilisateurs découvert à la fin du nom de fichier 8.3 tyrannie. Ils sont allés les bananes. Pour moi, c'était des noms de champ. Mon crime était des noms de champ comme Téléphone# ou du Client Raisons. Interbase détesté les noms. Donc, nous avons refait la structure du Paradoxe des bases de données et ensuite si le code du programme (plusieurs dizaines de milliers de lignes), la recherche et le remplacement de ces noms. JAMAIS de nouveau.
eh Bien, n'est jamais un long moment. Quand j'ai été la construction de ma sécurité, tables, j'ai utilisé de simples noms de champs. Sans aucune pensée, j'ai fait le nom de l'utilisateur NOM de champ. Date de début est devenu une DATE. Il y avait quelques autres délits, mais vous obtenez la dérive. Ces noms de domaine n'a pas la mords-moi jusqu'à ce que je nécessaire à l'utilisation de SQL. Ensuite, le nom est devenu la cause de l'effort supplémentaire. Si le nom du champ ressemble à une probable nom de la propriété, ou même PEUT-être comme un nom de propriété, le CHANGER!. Le faire maintenant, dans la création, la scène, et vous serez beaucoup plus heureux plus tard. Faire nom d'utilisateur et la date de début. Si vous ne voulez pas sensible à la casse des champs, alors assurez-vous de vous auto-cap le nom et le mot de passe dans les champs. Enfin, n'oubliez pas de mot de passe protéger le produit final et d'enregistrer le mot de passe. C'est un oubli que j'ai été coupable d'.
SEGUE-DESSUS.
pour me faire un formulaire de Connexion. J'ai commencé avec le Delphi formulaire de Mot de passe. J'ai copié l'étiquette et la boîte d'édition pour le mot de passe pour créer une étiquette pour le nom d'utilisateur et de la zone d'édition. Certains tentent de se tailler des étiquettes, des boîtes à boutons et m'a donné le traditionnel formulaire de connexion avec le nom d'utilisateur zone d'édition sur le champ mot de passe, outrepassent les boutons OK et ANNULER. Les boîtes ont été à la fois de la valeur en majuscules, comme je l'ai été en utilisant toutes les majuscules pour les noms et mots de passe dans la sécurité de la table. Si vous voulez aller à l'étape supplémentaire d'avoir la casse identifiants, alors ne le faites pas. J'ai mis une source de données et la table composant connecté à Pazwordz sur la forme. Comme touche finale, j'ai décidé d'inclure une image, avec mon logo et l'étiquette d'Une 'Idée de Mécanicien d'Application.' Vous pourriez inclure une image générique, une société d'image spécifique ou rien du tout.
KeyPreview a été tourné en VRAI, une étape importante. Et j'ai dû ajouter les boîtes de dialogue de l'unité à la utilise l'instruction. Ensuite, j'ai ajouté le code suivant:
var
& nbsp & nbsp DlgLogin2 : TDlgLogin2
& nbsp & nbsp AttemptsLeft : integer
application
{Le nom et le mot de passe ne correspondent pas, de Continuer ou d'Arrêter de fumer?}
procédure TDlgLogin2.NoGood
begin {Une tentative vers le bas, combien?}
& nbsp & nbsp AttemptsLeft := AttemptsLeft - 1
& nbsp & nbsp & nbsp si AttemptsLeft >= 1
& ! & ! & ! & nbsp puis begin {effacer la mauvaise tentative et revenir au début}
& ! & ! & ! & ! & ! & nbsp eUserName.Text := '
& ! & ! & ! & ! & ! & nbsp ePassword.text := '
& ! & ! & ! & ! & ! & nbsp eUserName.setfocus
& ! & ! & ! & ! & ! & nbsp {je pourrais être plus explicite, ici, mais pourquoi?}
& ! & ! & ! & ! & ! & nbsp showmessage('Pas correcte, essayez encore!') {Je pourrais être plus explicite)
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp autre DlgLogin2.ModalResult := mrAbort {Trop grand nombre de tentatives, BYE!}
fin
{Poignée de l'entrée de frappe dans le nom d'utilisateur zone d'édition}
procédure TDlgLogin2.eUserNameKeyPress(Sender: TObject var Key: Char)
begin
& nbsp & nbsp si Touche = #13 {c'Était la touche entrée?}

& ! & ! & ! & nbsp puis begin {convertir entrer dans un onglet}
& ! & ! & ! & ! & ! & nbsp selectNext(ActiveControl comme twincontrol a, true, true)
& ! & ! & ! & ! & ! & nbsp clés := #0 {effacer la touche entrée}
& ! & ! & ! & ! & ! & nbsp fin
fin
{Poignée de la touche entrée dans le champ mot de passe et cliquez sur OK}
procédure TDlgLogin2.ePasswordKeyPress(Sender: TObject var Key: Char)
begin
& nbsp & nbsp si Touche = #13
& ! & ! & ! & nbsp puis commencer
& ! & ! & ! & ! & ! & nbsp selectNext(ActiveControl comme twincontrol a, true, true)
& ! & ! & ! & ! & ! & nbsp clé := #0
& ! & ! & ! & ! & ! & nbsp OKBtnClick(Sender) {Équivalent à un clic sur le OKBtn}
& ! & ! & ! & ! & ! & nbsp fin
fin
{Annuler l'entrée d'un nom/mot de passe. Le programme ne sera pas exécuté}
procédure TDlgLogin2.CancelBtnClick(Sender: TObject)
begin
& nbsp & nbsp DlgLogin2.ModalResult := mrCancel
fin
{Nous avons une tentative, était-il bon? OUI! Oups, PAS de!}
procédure TDlgLogin2.OKBtnClick(Sender: TObject)
begin
& nbsp & nbsp OKBtn.SetFocus {Cela garantit la zone d'édition de contenu est lu}
& nbsp & nbsp si eUserName.texte = '
& ! & ! & ! & nbsp puis eUserName.setfocus {pas de nom, pas de tentative de}
& ! & ! & ! & nbsp sinon si ePassword.texte = '
& ! & ! & ! & ! & ! & nbsp puis ePassword.setFocus {pas de mot de passe, pas de tentative de}
& ! & ! & ! & ! & ! & nbsp sinon si TblPW.findkey([eUserName.le texte]) {est le nom?}
& ! & ! & ! & ! & ! & ! & ! & nbsp alors si en majuscules(TblPW.fieldByName('MOT de passe').asString)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp = ePassword.text {est le mot de passe de la même manière?}
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp puis DlgLogin2.ModalResult := mrOK {Laisser le programme à exécuter}
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp autre NoGood {Toutes les tentatives de la gauche?}
& ! & ! & ! & ! & ! & ! & ! & nbsp autre NoGood {Toutes les tentatives de la gauche?}
fin
initialisation
& nbsp & nbsp AttemptsLeft := 3
& nbsp le code porte supplémentaire commentaire. La pression de touche procédures pour les deux zones d'édition sont les mêmes, sauf pour la suite de l'usurpation d'une simple pression sur le bouton OK après avoir atteint entrer dans le champ mot de passe. Et il y a un manque de système anti-erreur avec ce projet. Il existe évidemment plusieurs endroits pour les blocs Try/except erreurs et des gestionnaires. C'est à vous de déterminer combien beaucoup plus de lecteur de la pratique de codage sur ce travail.
Le fichier de projet est présentée ci-dessous:

& nbsp & nbsp Formes,
& nbsp & nbsp DBtables,
& nbsp & nbsp Dialogues,
& nbsp & nbsp FInputInv dans 'FInputInv.pas' {FrmMainInput},
& nbsp & nbsp uDlgLogin2 dans 'E:\v5\uDlgLogin2.pas' {DlgLogin2}
{$R *.RES}
begin
& nbsp & nbsp Application.Initialiser
& nbsp & nbsp session.addpassword('itsreallynotmyfault')
& nbsp & nbsp DlgLogin2 := TDlgLogin2.create(nil)
& nbsp & nbsp avec DlgLogin2 do begin
& ! & ! & ! & nbsp TblPw.DatabaseName : = 'Projet1'
& ! & ! & ! & nbsp TblPW.TableName := 'Pazwordz'
& ! & ! & ! & nbsp TblPW.Active := true
& ! & ! & ! & nbsp showmodal
& ! & ! & ! & nbsp si ModalResult = 1
& ! & ! & ! & ! & ! & nbsp puis commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp Application.CreateForm(TFrmMainInput, FrmMainInput)
FrmMainInput.UserName: Nom D'Utilisateur= DlgLogin2.eUserName.texte
& nbsp & nbsp FrmMainInput.DEB :=
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp DlgLogin2.TblPw.FieldByName('MiniID').asString
& ! & ! & ! & ! & ! & ! & ! & nbsp si FrmMainInput.DEB = '
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp puis FrmMainInput.DEB :=
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp copie(en majuscules(DlgLogin2.eUserName.texte),1,3)
& ! & ! & ! & ! & ! & ! & ! & nbsp FrmMainInput.SecLevel :=
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp DlgLogin2.TblPw.FieldByName('SecLevel').asInteger
& ! & ! & ! & ! & ! & ! & ! & nbsp FrmMainInput.PgmDir := ExtractFilePath(application.ExeName)
& ! & ! & ! & ! & ! & ! & ! & nbsp DlgLogin2.gratuit
& ! & ! & ! & ! & ! & ! & ! & nbsp Application.Run
& ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp autre DlgLogin2.gratuit
& ! & ! & ! & nbsp fin
à la fin.
une Fois de plus, il y a quelques finagling avec la utilise l'instruction de la RMR de fichier. J'ai ajouté DBTables et des boîtes de dialogue pour gérer la boîte de dialogue de connexion et les composants de base de données sur ce formulaire. Je pourrais avoir des pertes de revenus à l'aide de la section où j'ai mis la sécurité de la table d'alias, le nom de la table et de l'activer. Mais je voulais faire cette forme une forme universelle que je pourrais utiliser avec de nombreuses applications. Donc, j'ai sauvé la boîte de dialogue formulaire à un emplacement central et de le mettre dans les lignes indiquées ici pour opérer avec succès.
Un gotcha ne surviennent. À l'origine, le 'si ModalResult = 1' ligne a 'si ModalResult = mrOK.' Le compilateur s'est étouffé avec elle, affirmant qu'il ne pouvait pas comprendre mrOK. J'étais sûr que mrOK a été défini dans les dialogues, mais j'ai renoncé et a plutôt utilisé les énumérés de la valeur de 1 pour mrOK.
Évidemment, il est important de s'accrocher à la boîte de dialogue de connexion, aussi longtemps que vous le pouvez, afin de traverser le Niveau de Sécurité, le Nom d'Utilisateur et d'autres informations diverses que vous avez dans la sécurité de la table. J'utilise le DEB de terrain pour faire le mini-marquage de l'identité. Il représente les Données Saisies Par et est généralement les trois premiers caractères du nom. Mais, dans le cas de l'ANG, il pourrait être Angelo ou Angie, afin que le contenu de la sécurité de la table de MiniID champ différencie entre les deux, comme l'ALA et ANG.
j'espère que vous pouvez utiliser cette idée pour lancer votre propre formulaire de connexion, si c'est pour des raisons de sécurité ou pour trouver qui est l'aide de l'application dès maintenant.
Gary Mugford
l'Idée de Mécanicien, Bramalea SUR Canada
[email protected]









La securite de savoir qui est qui


La securite de savoir qui est qui : Plusieurs milliers de conseils pour vous faciliter la vie.


L'eternel Debutant - Entree de Journal #5.2
Cet article est d'abord paru sur http://www.undu.com
Une version anterieure de cet article est parue debut Fevrier 00. Quelques corrections, un peu judicieuse de l'edition et l'amelioration de l'organisation sera on l'espere, dans quelque chose de mieux pour vous, le lecteur.
Recemment, j'ai trouve moi-meme sans qu'une demande de connexion d'un composant. Force par les circonstances a en creer une pour au moins temporaire d'utilisation, j'ai trouve l'experience assez interessant que je pensais prendre une course a l'ecriture d'un omnibus article pour mes collegues debutants. Mefiez-vous temporaire enchaîner un peu plus loin vers le bas!
Un formulaire de connexion n'est pas toujours le signe d'une programmation paranoïaque. Honnetement, j'ai utiliser le formulaire de connexion pour savoir qui est a l'aide de l'application, de sorte que je peux entrees de balise et d'editer avec un identifiant. Si vous avez besoin d'une securite forte au niveau du composant ou au niveau de menu, quitter maintenant et decouvrez a part entiere des systemes comme l'UIL Systeme de Securite. Mais si vous executez une application unique avec quelques utilisateurs que vous le souhaitez a se differencier, ou si vous voulez avoir un peu de securite, ' lecture sur.
Lecteurs se souviendront que j'ai tendance a acheter mes solutions plutot que de re-inventer. Pour la securite et une tres chouette formulaire de connexion, j'ai prefere Kalliopi de SecurityGuard systeme. Lors de l'utilisation de Delphi 3, je trouve qu'il est rapide a installer, facile a executer et tres puissant. Malheureusement, il n'y a pas de Delphi 5 version. Bien que j'aurais ete etre en premiere ligne quand il est sorti, mes dernieres informations, c'est qu'il ne se produira jamais. Tellement, que j'avais d'avoir un systeme de connexion qui a pris le parti des choses les plus importantes que j'en etais venu a attendre de SecurityGuard. Il devait avoir un ecran de connexion et un moyen d'extraire des informations sur l'utilisateur des niveaux de securite et d'autres informations, telles que les preferences (j'ai pu le faire par le biais INI/les fichiers de Registre, mais c'est TELLEMENT plus facile de le mettre dans la securite de la table, comme certains utilisateurs a migrer a partir de l'ordinateur a ordinateur).
compte tenu de mon besoin temporaire pour une connexion, j'ai decide de limiter mes ambitions et de travailler sur d'obtenir le nom et le niveau de securite d'infos dans l'application. J'ai commence avec la conception de la securite de la table, que j'appelle PAZWORDZ. Ce tableau doit inclure un champ pour le nom d'utilisateur (a cle), le mot de passe et toute autre information que vous jugez approprie.
SEGUE: Nommage des Champs
Dans la creation de votre propre version d'un titre de tableau, mais quel que soit le nom, envisager une mise en garde. N'abusez pas de votre droit de nommer les champs que vous voulez. Il y a plusieurs annees, je faisais partie de la premiere operation de combiner Paradoxe de DOS, Interbase et le peer-to-peer networking. Borland a dit qu'il ne pouvait pas etre fait a l'epoque, mais nous n'avons ... apres on se fixe toute une serie de questions liees a la toponymie.
& nbsp j'ai decouvert ensuite que les espaces, traits de soulignement et des signes de ponctuation sont MAL, MAL, MAL dans les noms de champ. Comme tout le monde, a l'epoque, j'ai ete ravie de secouer le joug d'limitee dBase noms et aime Paradoxe de la capacite a utiliser des noms qui ont couru sur et sur et sur et sur. C'etait l'equivalent d'une nouvelle edition de bureau de l'utilisateur de trouver des polices de caracteres et leur abondance. Ou quand les premiers temps W95 utilisateurs decouvert a la fin du nom de fichier 8.3 tyrannie. Ils sont alles les bananes. Pour moi, c'etait des noms de champ. Mon crime etait des noms de champ comme Telephone# ou du Client Raisons. Interbase deteste les noms. Donc, nous avons refait la structure du Paradoxe des bases de donnees et ensuite si le code du programme (plusieurs dizaines de milliers de lignes), la recherche et le remplacement de ces noms. JAMAIS de nouveau.
eh Bien, n'est jamais un long moment. Quand j'ai ete la construction de ma securite, tables, j'ai utilise de simples noms de champs. Sans aucune pensee, j'ai fait le nom de l'utilisateur NOM de champ. Date de debut est devenu une DATE. Il y avait quelques autres delits, mais vous obtenez la derive. Ces noms de domaine n'a pas la mords-moi jusqu'a ce que je necessaire a l'utilisation de SQL. Ensuite, le nom est devenu la cause de l'effort supplementaire. Si le nom du champ ressemble a une probable nom de la propriete, ou meme PEUT-etre comme un nom de propriete, le CHANGER!. Le faire maintenant, dans la creation, la scene, et vous serez beaucoup plus heureux plus tard. Faire nom d'utilisateur et la date de debut. Si vous ne voulez pas sensible a la casse des champs, alors assurez-vous de vous auto-cap le nom et le mot de passe dans les champs. Enfin, n'oubliez pas de mot de passe proteger le produit final et d'enregistrer le mot de passe. C'est un oubli que j'ai ete coupable d'.
SEGUE-DESSUS.
pour me faire un formulaire de Connexion. J'ai commence avec le Delphi formulaire de Mot de passe. J'ai copie l'etiquette et la boîte d'edition pour le mot de passe pour creer une etiquette pour le nom d'utilisateur et de la zone d'edition. Certains tentent de se tailler des etiquettes, des boîtes a boutons et m'a donne le traditionnel formulaire de connexion avec le nom d'utilisateur zone d'edition sur le champ mot de passe, outrepassent les boutons OK et ANNULER. Les boîtes ont ete a la fois de la valeur en majuscules, comme je l'ai ete en utilisant toutes les majuscules pour les noms et mots de passe dans la securite de la table. Si vous voulez aller a l'etape supplementaire d'avoir la casse identifiants, alors ne le faites pas. J'ai mis une source de donnees et la table composant connecte a Pazwordz sur la forme. Comme touche finale, j'ai decide d'inclure une image, avec mon logo et l'etiquette d'Une 'Idee de Mecanicien d'Application.' Vous pourriez inclure une image generique, une societe d'image specifique ou rien du tout.
KeyPreview a ete tourne en VRAI, une etape importante. Et j'ai dû ajouter les boîtes de dialogue de l'unite a la utilise l'instruction. Ensuite, j'ai ajoute le code suivant:
var
& nbsp & nbsp DlgLogin2 : TDlgLogin2
& nbsp & nbsp AttemptsLeft : integer
application
{Le nom et le mot de passe ne correspondent pas, de Continuer ou d'Arreter de fumer?}
procedure TDlgLogin2.NoGood
begin {Une tentative vers le bas, combien?}
& nbsp & nbsp AttemptsLeft := AttemptsLeft - 1
& nbsp & nbsp & nbsp si AttemptsLeft >= 1
& ! & ! & ! & nbsp puis begin {effacer la mauvaise tentative et revenir au debut}
& ! & ! & ! & ! & ! & nbsp eUserName.Text := '
& ! & ! & ! & ! & ! & nbsp ePassword.text := '
& ! & ! & ! & ! & ! & nbsp eUserName.setfocus
& ! & ! & ! & ! & ! & nbsp {je pourrais etre plus explicite, ici, mais pourquoi?}
& ! & ! & ! & ! & ! & nbsp showmessage('Pas correcte, essayez encore!') {Je pourrais etre plus explicite)
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp autre DlgLogin2.ModalResult := mrAbort {Trop grand nombre de tentatives, BYE!}
fin
{Poignee de l'entree de frappe dans le nom d'utilisateur zone d'edition}
procedure TDlgLogin2.eUserNameKeyPress(Sender: TObject var Key: Char)
begin
& nbsp & nbsp si Touche = #13 {c'Etait la touche entree?}

& ! & ! & ! & nbsp puis begin {convertir entrer dans un onglet}
& ! & ! & ! & ! & ! & nbsp selectNext(ActiveControl comme twincontrol a, true, true)
& ! & ! & ! & ! & ! & nbsp cles := #0 {effacer la touche entree}
& ! & ! & ! & ! & ! & nbsp fin
fin
{Poignee de la touche entree dans le champ mot de passe et cliquez sur OK}
procedure TDlgLogin2.ePasswordKeyPress(Sender: TObject var Key: Char)
begin
& nbsp & nbsp si Touche = #13
& ! & ! & ! & nbsp puis commencer
& ! & ! & ! & ! & ! & nbsp selectNext(ActiveControl comme twincontrol a, true, true)
& ! & ! & ! & ! & ! & nbsp cle := #0
& ! & ! & ! & ! & ! & nbsp OKBtnClick(Sender) {Equivalent a un clic sur le OKBtn}
& ! & ! & ! & ! & ! & nbsp fin
fin
{Annuler l'entree d'un nom/mot de passe. Le programme ne sera pas execute}
procedure TDlgLogin2.CancelBtnClick(Sender: TObject)
begin
& nbsp & nbsp DlgLogin2.ModalResult := mrCancel
fin
{Nous avons une tentative, etait-il bon? OUI! Oups, PAS de!}
procedure TDlgLogin2.OKBtnClick(Sender: TObject)
begin
& nbsp & nbsp OKBtn.SetFocus {Cela garantit la zone d'edition de contenu est lu}
& nbsp & nbsp si eUserName.texte = '
& ! & ! & ! & nbsp puis eUserName.setfocus {pas de nom, pas de tentative de}
& ! & ! & ! & nbsp sinon si ePassword.texte = '
& ! & ! & ! & ! & ! & nbsp puis ePassword.setFocus {pas de mot de passe, pas de tentative de}
& ! & ! & ! & ! & ! & nbsp sinon si TblPW.findkey([eUserName.le texte]) {est le nom?}
& ! & ! & ! & ! & ! & ! & ! & nbsp alors si en majuscules(TblPW.fieldByName('MOT de passe').asString)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp = ePassword.text {est le mot de passe de la meme maniere?}
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp puis DlgLogin2.ModalResult := mrOK {Laisser le programme a executer}
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp autre NoGood {Toutes les tentatives de la gauche?}
& ! & ! & ! & ! & ! & ! & ! & nbsp autre NoGood {Toutes les tentatives de la gauche?}
fin
initialisation
& nbsp & nbsp AttemptsLeft := 3
& nbsp le code porte supplementaire commentaire. La pression de touche procedures pour les deux zones d'edition sont les memes, sauf pour la suite de l'usurpation d'une simple pression sur le bouton OK apres avoir atteint entrer dans le champ mot de passe. Et il y a un manque de systeme anti-erreur avec ce projet. Il existe evidemment plusieurs endroits pour les blocs Try/except erreurs et des gestionnaires. C'est a vous de determiner combien beaucoup plus de lecteur de la pratique de codage sur ce travail.
Le fichier de projet est presentee ci-dessous:

& nbsp & nbsp Formes,
& nbsp & nbsp DBtables,
& nbsp & nbsp Dialogues,
& nbsp & nbsp FInputInv dans 'FInputInv.pas' {FrmMainInput},
& nbsp & nbsp uDlgLogin2 dans 'E:\v5\uDlgLogin2.pas' {DlgLogin2}
{$R *.RES}
begin
& nbsp & nbsp Application.Initialiser
& nbsp & nbsp session.addpassword('itsreallynotmyfault')
& nbsp & nbsp DlgLogin2 := TDlgLogin2.create(nil)
& nbsp & nbsp avec DlgLogin2 do begin
& ! & ! & ! & nbsp TblPw.DatabaseName : = 'Projet1'
& ! & ! & ! & nbsp TblPW.TableName := 'Pazwordz'
& ! & ! & ! & nbsp TblPW.Active := true
& ! & ! & ! & nbsp showmodal
& ! & ! & ! & nbsp si ModalResult = 1
& ! & ! & ! & ! & ! & nbsp puis commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp Application.CreateForm(TFrmMainInput, FrmMainInput)
FrmMainInput.UserName: Nom D'Utilisateur= DlgLogin2.eUserName.texte
& nbsp & nbsp FrmMainInput.DEB :=
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp DlgLogin2.TblPw.FieldByName('MiniID').asString
& ! & ! & ! & ! & ! & ! & ! & nbsp si FrmMainInput.DEB = '
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp puis FrmMainInput.DEB :=
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp copie(en majuscules(DlgLogin2.eUserName.texte),1,3)
& ! & ! & ! & ! & ! & ! & ! & nbsp FrmMainInput.SecLevel :=
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp DlgLogin2.TblPw.FieldByName('SecLevel').asInteger
& ! & ! & ! & ! & ! & ! & ! & nbsp FrmMainInput.PgmDir := ExtractFilePath(application.ExeName)
& ! & ! & ! & ! & ! & ! & ! & nbsp DlgLogin2.gratuit
& ! & ! & ! & ! & ! & ! & ! & nbsp Application.Run
& ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp autre DlgLogin2.gratuit
& ! & ! & ! & nbsp fin
a la fin.
une Fois de plus, il y a quelques finagling avec la utilise l'instruction de la RMR de fichier. J'ai ajoute DBTables et des boîtes de dialogue pour gerer la boîte de dialogue de connexion et les composants de base de donnees sur ce formulaire. Je pourrais avoir des pertes de revenus a l'aide de la section ou j'ai mis la securite de la table d'alias, le nom de la table et de l'activer. Mais je voulais faire cette forme une forme universelle que je pourrais utiliser avec de nombreuses applications. Donc, j'ai sauve la boîte de dialogue formulaire a un emplacement central et de le mettre dans les lignes indiquees ici pour operer avec succes.
Un gotcha ne surviennent. A l'origine, le 'si ModalResult = 1' ligne a 'si ModalResult = mrOK.' Le compilateur s'est etouffe avec elle, affirmant qu'il ne pouvait pas comprendre mrOK. J'etais sûr que mrOK a ete defini dans les dialogues, mais j'ai renonce et a plutot utilise les enumeres de la valeur de 1 pour mrOK.
Evidemment, il est important de s'accrocher a la boîte de dialogue de connexion, aussi longtemps que vous le pouvez, afin de traverser le Niveau de Securite, le Nom d'Utilisateur et d'autres informations diverses que vous avez dans la securite de la table. J'utilise le DEB de terrain pour faire le mini-marquage de l'identite. Il represente les Donnees Saisies Par et est generalement les trois premiers caracteres du nom. Mais, dans le cas de l'ANG, il pourrait etre Angelo ou Angie, afin que le contenu de la securite de la table de MiniID champ differencie entre les deux, comme l'ALA et ANG.
j'espere que vous pouvez utiliser cette idee pour lancer votre propre formulaire de connexion, si c'est pour des raisons de securite ou pour trouver qui est l'aide de l'application des maintenant.
Gary Mugford
l'Idee de Mecanicien, Bramalea SUR Canada
[email protected]


La sécurité de savoir qui est qui

La sécurité de savoir qui est qui : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation