Felhasználói azonosítók generálása

Figyelem

A rev2009-es számú kiadásban (2010. március végén) a MySQL adattábla szerkezete változott. Megszüntettük a `type` mezőt és átnevezésre került a groupId–>groupCn és groupName–>groupDesc . A továbbiakban ezt a formát részletezzük…

Megjegyzés:

Az alább leírt módszer némi gyakorlattal hatékonyabb és gyorsabb lehet, mint a web-es kezelőfelület használata, de nyilván több buktatóval is jár. Ha valaki nem biztos benne, hogy az alább leírtak szerint meg tudja oldani az azonosítók generálását, akkor inkább maradjon a felület nyújtotta lehetőségeknél:


A tanárok és diákok számára generálhatunk felhasználói azonosítókat az intézmény tanar és diak adattáblájának adataiból - amennyiben MySQL háttéradatbázist használunk. Egy lehetséges megoldást mutatunk itt be.

Lépjünk be az intézmény adatbázisába (intezmeny_[intézmény rövid neve]), majd ideiglenesen módosítsuk a tanar táblát egy új mező hozzáadaásával, majd töltsük is fel adatokkal:

alter table tanar add column userAccount varchar(32);
update tanar set userAccount=concat(viseltCsaladinev,'.',substring_index(viseltUtonev,' ',1));

Amint látható Családinév.Utónév alakú azonosítókat készítettünk. A következő lépés, hogy ellenőrizzük, van-e ütközés:

select userAccount,count(*) as db from tanar group by userAccount having db>1;

Ha van, akkor az azonosítót egy megfelelő update paranccsal módosítsuk (pl. Utónév.Családinév alakra). Az ütközések kiküszöbölése után hasonlóan készítsük el a diákok azonosítóit is:

alter table diak add column userAccount varchar(32);
update diak set userAccount=concat(viseltCsaladinev,'.',substring_index(viseltUtonev,' ',1));
select userAccount,count(*) as db from diak group by userAccount having db>1;
+--------------------+----+
| userAccount        | db |
+--------------------+----+
| Kovács.János       |  2 |
+--------------------+----+

Itt nagyobb eséllyel fogunk ütközésre lelni, de az ütköző userAccount-ok megváltoztatásával ezek könnyen kiküszöbölhetőek. A fenti példában azt látjuk, hogy két Kovács.János azonosító is szerepel a listában. Kérdezzük le ezek többi adatát is:

select diakId,viseltCsaladinev,viseltUtonev from diak where userAccount='Kovács.János';
+--------+------------------+--------------+
| diakId | viseltCsaladinev | viseltUtonev |
+--------+------------------+--------------+
|      5 | Kovács           | János        |
|    303 | Kovács           | János        |
+--------+------------------+--------------+

Majd az egyik érintett diák azonosítóját változtassuk meg (pl. diákId alapján):

update diak set userAccount='János.Kovács' where diakId=303;

A módosítások után ismét ellenőrizzük az ütközéseket. Ha nincs több ütközés, akkor meg kell még vizsgálnunk, hogy a tanári és diák azonosítók között nincs-e egyforma:

select * from tanar left join diak using (userAccount) where diakId is not null;

Ha találunk ütköző azonosítókat, akkor azokat a fentiek alapján ismét módosíthatjuk. Ha úgy tűnik, hogy az azonosítók rendben vannak, akkor vegyük fel őket, először például a tanárokat:

insert into mayor_private.accounts (policy,userAccount,userCn,userPassword,studyId)
  select 'private',userAccount,concat_ws(' ',viseltNevElotag,viseltCsaladinev,viseltUtonev) as userCn,
  sha('kezdetiJelszó') as userPassword,oId as studyId from tanar;

Érdemes a tanári azonosítókat rögrön berakni a tanár csoportba is:

set @gid = (select gid from mayor_private.groups where groupCn='tanar');
insert into mayor_private.members (uid,gid) select uid,@gid from mayor_private.accounts
  where userAccount in (select userAccount from tanar);

Majd betöltjük a diákok azonosítóit is.

insert into mayor_private.accounts (policy,userAccount,userCn,userPassword,studyId)
  select 'private',userAccount,concat_ws(' ',viseltNevElotag,viseltCsaladinev,viseltUtonev) as userCn,
  sha(crc32(viseltCsaladinev)) as userPassword,oId as studyId from diak;

Az előző betöltéshez képest egy különbséget figyelhetünk meg: a kezdeti jelszónak most nem egy konstans értéket állítunk be, hanem a tanuló vezetéknevének CRC32-es kódját. Ez könnyen reprodukálható, megfelelő induló jelszó lehet.

Rakjuk be az új azonosítókat a diák csoportba:

set @gid = (select gid from mayor_private.groups where groupCn='diak');
insert into mayor_private.members (uid,gid) select uid,@gid as gid from mayor_private.accounts
  where userAccount in (select userAccount from diak);

Már csak az van hátra, hogy az ideiglenes változtatásokat helyreállítsuk:

  • A tanar és diak tábla userAccount mezőjének törlése
alter table tanar drop column userAccount;
alter table diak drop column userAccount;

Utolsó lépésként állítsuk be a shadow attribútumokat (ezek befojásolják, hogy a jelszó mennyi ideig érvényes, mikor kell megváltoztatni, stb…)

update mayor_private.accounts set shadowMin=1,shadowMax=90,shadowWarning=10,shadowInactive=10;
hogyan/felhasznaloi_azonositok_generalasa.txt · Utolsó módosítás: 2019/05/28 19:52 (külső szerkesztés)
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0