Temat zadania:
Spis treści:
W ramach realizacji zadań projektu KBN Wrocławskie Centrum Sieciowo-Superkomputerowe założyło bazę adresową pracowników Politechniki Wrocławskiej. Ze względu na ustawę o ochronie danych osobowych, informacje zawarte w bazie LDAP zbierane były po w formie wyrażeniu pisemnej zgody na przetwarzanie danych przez zainteresowanych. Z tego powodu nie można było podjąć się zmasowanego ładowania danych pracowników PWr. Próbę przetwarzania dużej ilości danych podjęto się tworząc jednolity system poczty elektronicznej dla studentów PWr. System ten bazuje na oprogramowaniu SunOne Directory Server.
2. Założenia
Tworząc jednolity system poczty elektronicznej dla studentów założono,
że obiekty w bazie identyfikowane będą przez numer albumu studenta. W obiekcie
bazy LDAP odpowiada mu atrybut uid. Kolejne atrybuty opisujące obiekt
to:
sn | - nazwisko | giveName | - imię | cn | - imię i nazwisko | departmentNumber | - nazwa wydziału | md5 | - skrót hash |
3. Tworzenie danych wejściowych
Dane wejściowe do bazy LDAP gromadzono w dwóch etapach. W pierwszym etapie konieczne było wygenerowanie z różnych systemów informatycznych, poszczególnych wydziałów, rekordów w określonym formacie. W skład poszczególnych pól rekordu wchodzą numer albumu, imię 1, imię 2, nazwisko, imię ojca, imię matki, pesel, data urodzenia w formacie ddmmrrrr. Poszczególne pola rekordu oddzielone są znakiem dwukropka. Pola takie jak imię 2 oraz imię ojca są opcjonalne i mogą zostać pominięte. W szczególnych przypadkach pominięto pole pesel, dotyczyło to obcokrajowców.
W chwili uruchamiania pilotażowej instalacji systemu nie brano pod uwagę roku studiów, czy też typu studiów. Jest jednak możliwe aby rekord zawierał takie informacje.
Postać rekordu:
nr_albumu:imię1:imię2:nazwisko:imię_ojca:imię_matki:pesel:data_urodzenia
Przykład:
78562:JAN::KOWALSKI:CZESŁAW:MARIA:74123123451:31121974
Założono, że pliki wejściowe z danymi mają być kodowane w ISO-8859-2 lub UTF-8 a poszczególne rekordy mają być oddzielone znakiem nowej linii.
Przygotowany rekord zawiera więcej danych niż znajdzie się w obiekcie wprowadzanym do bazy. Pola od 5 do 8 nie znajdą się bezpośrednio w opisie obiektu. Ich wartości posłużą do wygenerowania skrótu, który jest wartością jednokierunkowej funkcji hashującej (kodującej) MD5. Skrót ten zostanie umieszczony w opisie obiektu jako atrybut md5 i będzie służył do identyfikacji danych o studencie w momencie generowanie hasła do konta pocztowego. Drugi etap przetworzania pliku następuje w środowisku WINDOWS po skorzystaniu ze skryptu napisanego w awku. Jego zadanie polega na przetworzeniu pierwszego pliku z ogólnymi danymi wejściowymi na plik wynikowy zawierający jedynie:
4. Zmasowane ładowanie bazy LDAP
Plik przygotowany według wcześniej przygotowanych założeń stanowi plik wejściowy do właściwego skryptu.
Przykładowy plik wejściowy ma postać:
656263:Jerzy::Barszcz:7346530e4ce7faf8296aee071d80c964
284261:Maria::Barszczowa:99c7f9dc0cbd9059ee9bf530d7da4728
284264:Tomasz::Bartosz:14403b8603355cb100b6e49a2140dde1
314268:Krzysztof:Tomasz:Biakok:277b4e38b0cfc2288aec104e00eef10d
324269:Janusz:Marian:Biter:1b282863cd75702857b2c6510a56fc9d
344261:Krzysztof:Jerzy:Wakiewicz:1e5b5771a4915e6ef173a7442b48ba2d
344273:Marek:Jakub:Tomczuk:5b5b06cd5c4757e184af29c7e97006dd
354276:Janusz::Brzun:380a41f5a805e83c3efe0325acd4cda5
354277:Maciej:Tomasz:Bunko:89c37602407a496819681e6a94aed5d
Rolą skryptu jest przetworzenie danych do pliku LDIF, który zostanie
dołączony do bazy. Poszczególne pola rekordu wejściowego zamieniane są
na konkretne pola opisujące obiekt (studenta).
#!/usr/local/bin/awk -f
BEGIN {FS=":"; wydzial=ARGV[2] ; delete ARGV[2];czas=systime()}
{printf "dn: uid=%s,ou=People, o=student.pwr.wroc.pl, o=studenci\n",$1
printf "mailHost: student.pwr.wroc.pl\n"
printf "mailUserStatus: active\n"
printf "objectClass: top\n"
printf "objectClass: person\n"
printf "objectClass: organizationalPerson\n"
printf "objectClass: inetorgperson\n"
printf "objectClass: inetUser\n"
printf "objectClass: inetSubscriber\n"
printf "objectClass: ipUser\n"
printf "objectClass: nsManagedPerson\n"
printf "objectClass: inetmailuser\n"
printf "objectClass: inetlocalmailrecipient\n"
printf "objectClass: userpresenceprofile\n"
printf "objectClass: student\n"
printf "inetUserStatus: active\n"
printf "cn: %s %s\n",$2,$4
printf "uid: %s\n",$1
printf "dataSource: generator z danych dziekanatu %s\n",wydzial
printf "departmentNumber: %s\n",wydzial
printf "givenName: %s\n",$2
printf "sn: %s\n",$4
printf "mail: %s@student.pwr.wroc.pl\n",$1
printf "mailDeliveryOption: mailbox\n"
printf "preferredLanguage: pl\n"
printf "userPassword: {SHA}98a3f9a9b93c09013d459eb45bc52678ac555c4f\n"
printf "md5: %s\n",$5
printf "creationTime: %s\n",czas
print "\n"
}
Plik wyjściowy po przetworzeniu przez skrypt ma postać:
dn: uid=656263,ou=People, o=student.pwr.wroc.pl, o=studenci
mailHost: student.pwr.wroc.pl
mailUserStatus: active
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetorgperson
objectClass: inetUser
objectClass: inetSub9scriber
objectClass: ipUser
objectClass: nsManagedPerson
objectClass: inetmailuser
objectClass: inetlocalmailrecipient
objectClass: userpresenceprofile
objectClass: student
inetUserStatus: active
cn: Jerzy Barszcz
uid: 656263
dataSource: generator z danych dziekanatu JGora
departmentNumber: JGora
givenName: Maciej
sn: Barszczewski
mail: 656263@student.pwr.wroc.pl
mailDeliveryOption: mailbox
preferredLanguage: pl
md5: 7346530e4ce7faf8296aee071d80c964
creationTime: 1065788981
userPassword: {SHA}98a3f9a9b93c09013d459eb45bc52678ac555c4f
Podczas transformacji pliku wejściowego na plik typu LDIF należało podać nazwę (symbol) wydziału. Informacja ta została dopisana do atrybutu departmentNumber. W dniu inicjowania bazy nie można było określić przydatności tego wpisu. Założono jednak, że przy wyszukiwaniu, identyfikacji danych łatwiej będzie zlokalizować studenta.
Tak przygotowany plik typu LDIF można było bez problemu wczytać za pomocą komendy ldapadd.
5. Podsumowanie
Dane wejściowe przygotowane w formacie podobnym do omówionego powyżej, a wygenerowane przez dziekanaty mogą służyć jako przykład tworzenia rekordów z różnymi polami danych. Istotną sprawą jest kodowanie pliku wejściowego.