Quellen der LBS-Erweiterung für einen rollenbasierten Zugang zu elektronischen Ressourcen - UB Rostock - Stand: 04.06.2008 Lokales Bibliothekssystem: LBS-PICA, Version: LBS3-Port/LBS4 Verzeichnisdienst: Microsoft W2K3 / Active Directory 1) Skripts zur Ausführung auf dem LBS-Host - Abgleich der Tabelle xprivate_adstore mit den LBS-Benutzerkonten (Snapshot) Benutzte Tabellen der LBS-Datenbank (LBS3-Port/LBS4): borrower (primäre Tabelle Benutzer) create table dbo.borrower ( address_id_nr int not null, borrower_bar udvc_borrower_bar null, iln smallint not null, reminder_address tinyint not null, ill_number udsi_ill_number not null, name_key udch_name_key null, registration_number udvc_registration_number null, borrower_status udti_borrower_status not null, borrower_type udti_borrower_type not null, date_of_birth uddt_date null, edit_date uddt_edit_date not null, first_name_initials_prefix udvc_initials_prefix null, free_text udvc_free_text null, gender udti_gender not null, input_date uddt_input_date not null, language_code udch_language_code not null, message varchar(120) null, name udvc_name null, person_titles udvc_title null, proof_of_identity udvc_proof_of_identity null, query_name udvc_query_name not null, source udti_source not null, sub_query_name udch_sub_query_name not null, borrower_ts timestamp null, free_text_block udvc_text null, email_address udvc_address null, institution_code smallint null, date_time_last_active uddt_date null, pica_timestamp int null, end_user_key nvarchar(16) null, no_log_action_idm tinyint null ) create clustered index borrower_ind06 on dbo.borrower (sub_query_name, query_name, address_id_nr) on 'ous_default_segment' create unique nonclustered index borrower_ind01 on dbo.borrower (address_id_nr) on 'ous_default_segment' create nonclustered index borrower_ind02 on dbo.borrower (borrower_bar, iln) on 'ous_default_segment' create nonclustered index borrower_ind03 on dbo.borrower (name_key, query_name, address_id_nr) on 'ous_default_segment' create nonclustered index borrower_ind04 on dbo.borrower (ill_number) on 'ous_default_segment' create nonclustered index borrower_ind05 on dbo.borrower (registration_number) on 'ous_default_segment' Trigger: borrower_del, borrower_ins, borrower_upd 1 membershp (Mitgliedschaft Benutzer) create table dbo.membershp ( address_id_nr int not null, department_group_nr tinyint not null, cum_total_outstand_reminders udit_cum not null, cum_total_received_reminders udit_cum not null, cum_total_requests udit_cum not null, cum_total_reservations udit_cum not null, expiry_date uddt_date null, iln smallint not null, membership_ts timestamp null, pica_timestamp int null ) create unique clustered index membership_ind01 on dbo.membershp (address_id_nr, department_group_nr) on 'ous_default_segment' Trigger: membershp_del_LBS3, membershp_ins, membershp_upd xprivate_adstore (Steuerung Abgleich LBS-Benutzerverwaltung mit AD) create table dbo.xprivate_adstore ( iln smallint not null, address_id_nr int not null, borrower_bar varchar(20) not null, borrower_type tinyint not null, borrower_type_ads tinyint not null, date_of_birth datetime not null, ins_date datetime not null, upd_date datetime not null, del_date datetime not null, ads_action char(1) not null ) create unique nonclustered index xprivate_adstore_ind01 on dbo.xprivate_adstore (borrower_bar, borrower_type_ads) on 'ous_default_segment' Relationen der Tabellen: borrower address_id_nr (primary key) borrower_bar, iln (secondary key) 1:n (0..2) 1:n membershp address_id_nr (foreign key) xprivate_adstore iln = 62 borrower_bar (foreign key) hro_ADStore (Shell-Skript LBS-Host für Erstellung Snapshot ) / Auszug # # # # # # # # # # ############################################### hro_ADStore History 02-06-2008 js: - Version V008, AD-Client holt Snapshot via sql-script (bislang ftp) und generiert sich selbst die Kommandoscripts fuer DEL,INS,UPD der Benutzer im AD - Ausfuehrung hro_ADStore nur, wenn alle records auf no_action (X), d.h. Bearbeitung durch AD-Client abgeschlossen wurde ############################################### ... # starts only, if all records are set to "X" $SYBASE/OCS-12_0/bin/isql -U$user -P$bla -i${HOME}/com/hro_ADStore_checkstart_sql | grep –i "(0 rows affected)" > ${HOME}/log/hro_ADStore_ckeckstart if [ ! -s ${HOME}/log/hro_ADStore_ckeckstart ] 2 then { echo "From: sqlscript" echo "Subject: SQL-LOG_062: hro_ADStore ERROR" echo "AD-Client does not process the last Snapshot in xprivate_adstore!" echo "Exit hro_ADStore !!!" echo "" echo "Please execute the AD-Client procedures !!!" } | /usr/lib/sendmail -t [email protected] exit 1 fi $SYBASE/OCS-12_0/bin/isql -U$user -P$bla -i${HOME}/com/hro_ADStore_sql | tee -a ${HOME}/log/hro_ADStore ... hro_ADStore_checkstart_sql (Skript für Check letzte Bearbeitung durch AD-Client) /* Historie: */ /* 02-06-2008 - js: ueberpruefen, ob alle records in xprivate_adstore auf no_action ("X") gesetzt sind */ /* nur dann soll Snapshot LBS zu xprivate_adstore gestartet werden */ /* ----------------------------------------------------------------------------------------- */ USE lbsdb go select * from xprivate_adstore where ads_action <> "X" go hro_ADStore_sql (Abgleich xprivate_adstore mit LBS-Benutzerverwaltung) /* Historie: */ /* 17-10-2007 - js: borrower_type_ads ergaenzt fuer virtuelle Nutzertypen */ /* Virtueller Nutzertyp 118 = Jugendliche < 18 Jahre mit 3 Tagen Kulanz */ /* 18-01-2008 - js: Unique Index in Tabelle auf borrower_bar, borrower_type_ads gesetzt */ /* Insert Select Statement veraendert: */ /* where x.address_id_nr = b.address_id_nr and x.borrower_bar = b.borrower_bar and x.ads_action <> "D" */ /* DELETE vor INSERT gezogen */ /* 01-06-2008 - js: date_of_birth wieder in xprivate_adstore aufgenommen fuer vollstaendigen Snapshot */ /* ----------------------------------------------------------------------------------------- */ USE lbsdb go /* Taegliche Ausfuehrung */ /* ---------------------------------------------------- */ /* ACHTUNG LOESCHEN UND RUECKSETZEN TABLE xprivate_adstore SATZWEISE DURCH AUSFUEHRENDEN ADS-CLIENT UB1LB001 */ /* via SQL-Script NACH KONTROLLE AUSFUEHRUNG DER JEWEILIGEN AKTION ! */ /* Historie: 07-10-17 - js: Nutzertyp 71 und virtueller Nutzertyp Jugendliche (118) ergaenzt */ /* DELETE vor UPDATE ausfuehren ! */ /* ---------------------------------------------------- */ SET ROWCOUNT 0 go /* SET TO DELETE */ /* Kontrollliste */ /* 17-10-2007 - js: einen Tag vor 18. Geburtstag loeschen, am Folgetag dann Insert mit realem Nutzertyp ! */ PRINT 'FOR DELETE SELECTED :' SELECT x.address_id_nr, b.query_name, b.borrower_bar, b.borrower_type, x.borrower_type_ads FROM borrower b, membershp m, xprivate_adstore x WHERE b.iln=62 and ( b.borrower_status = 9 /* Nutzersperre */ or SUBSTRING (b.borrower_bar, 1, 1) = 'X' /* X-Barcodes */ or DATEDIFF(day,GETDATE(),m.expiry_date) < 0 /* ungueltige Mitgliedschaft */ /* 3 Tage vor 18. Geburtstag bereits umtragen */ or ( DATEDIFF(dd,GETDATE(),DATEADD(yy,18,b.date_of_birth)) < 3 AND x.borrower_type_ads = 118 ) 3 or ( DATEDIFF(dd,GETDATE(),DATEADD(yy,18,b.date_of_birth)) > 3 AND x.borrower_type_ads <> 118 ) /* Inital NTYP118: */ /* or DATEADD(yy,18,b.date_of_birth) > GETDATE() */ ) and and and and and and m.department_group_nr = 1 /* Abt.Gruppe 1 = UB */ x.ads_action = 'X' /* vorhergehendes erfolgreiches Insert oder Update */ b.address_id_nr = m.address_id_nr b.address_id_nr = x.address_id_nr b.borrower_bar = x.borrower_bar b.borrower_type = x.borrower_type go /* DELETE */ UPDATE xprivate_adstore SET x.del_date = getdate(), x.ads_action = 'D' FROM borrower b, membershp m, xprivate_adstore x WHERE b.iln=62 and ( b.borrower_status = 9 /* Nutzersperre */ or SUBSTRING (b.borrower_bar, 1, 1) = 'X' /* X-Barcodes */ or DATEDIFF(day,GETDATE(),m.expiry_date) < 0 /* ungueltige Mitgliedschaft */ /* 3 Tage vor 18. Geburtstag bereits umtragen */ or ( DATEDIFF(dd,GETDATE(),DATEADD(yy,18,b.date_of_birth)) < 3 AND x.borrower_type_ads = 118 ) or ( DATEDIFF(dd,GETDATE(),DATEADD(yy,18,b.date_of_birth)) > 3 AND x.borrower_type_ads <> 118 ) /* Inital NTYP118: */ /* or DATEADD(yy,18,b.date_of_birth) > GETDATE() */ ) and m.department_group_nr = 1 /* Abt.Gruppe 1 = UB */ and x.ads_action = 'X' /* vorhergehendes erfolgreiches Insert oder Update */ and b.address_id_nr = m.address_id_nr and b.address_id_nr = x.address_id_nr and b.borrower_bar = x.borrower_bar and b.borrower_type = x.borrower_type go /* Records loeschen, die keinen Bezug mehr zu borrower haben */ /* Notwendig bei Loeschen Nutzer, Wechsel Barcode, Wechsel Nutzertyp */ SET ROWCOUNT 1 go DECLARE @address_id_nr int, @address_id_nr_tmp int, @borrower_type tinyint, @borrower_bar varchar(20) SELECT @address_id_nr_tmp = 0 WHILE EXISTS ( select * from xprivate_adstore x where x.ads_action <> 'I' /* Loesche nur Inserted Records U oder X */ and x.ads_action <> 'D' /* Loeschen nicht ueberschreiben */ and NOT EXISTS (select b.address_id_nr from borrower b where x.address_id_nr = b.address_id_nr and x.borrower_bar = b.borrower_bar and x.borrower_type = b.borrower_type) ) BEGIN SELECT @address_id_nr = x.address_id_nr, @borrower_bar = x.borrower_bar, @borrower_type = x.borrower_type from xprivate_adstore x where x.ads_action <> 'I' /* Loesche nur Inserted Records U oder X */ and x.ads_action <> 'D' /* Loeschen nicht ueberschreiben */ and NOT EXISTS (select b.address_id_nr from borrower b where x.address_id_nr = b.address_id_nr and x.borrower_bar = b.borrower_bar and x.borrower_type = b.borrower_type) IF @address_id_nr = @address_id_nr_tmp BEGIN SELECT 'Break WHILE - DELETE, because address_id_nr was repeated: ' + convert(varchar(10),@address_id_nr) BREAK END /* Delete xprivate_adstore */ SELECT 'FOR DELETE SELECTED : ' + convert(varchar(10),@address_id_nr) + ' - ' + @borrower_bar + ' - ' + convert(char(2), @borrower_type) /* SET TO DELETE */ UPDATE 4 xprivate_adstore SET del_date = getdate(), ads_action='D' WHERE address_id_nr = @address_id_nr and borrower_bar = @borrower_bar and borrower_type = @borrower_type SELECT @address_id_nr_tmp = @address_id_nr END go /* Neue Records uebertragen */ SET ROWCOUNT 1 go /* Fehlende Records hinzufuegen */ PRINT 'FOR INSERT SELECTED :' DECLARE @address_id_nr int, @address_id_nr_tmp int, @borrower_type tinyint, @borrower_type_ads tinyint, @borrower_type1 tinyint, @borrower_type2 tinyint, @borrower_type3 tinyint, @borrower_type4 tinyint, @borrower_type5 tinyint, @borrower_type6 tinyint, @borrower_type7 tinyint, @borrower_type71 tinyint, @borrower_type8 tinyint, @borrower_bar varchar(20), @date_of_birth datetime SELECT @borrower_type1 = 10 /* Studenten UNI */ SELECT @borrower_type2 = 20 /* Studenten MV */ SELECT @borrower_type3 = 30 /* Professoren UNI */ SELECT @borrower_type4 = 40 /* Mitarbeiter UNI */ SELECT @borrower_type5 = 50 /* Mitarbeiter extern */ SELECT @borrower_type6 = 60 /* Mitarbeiter UB */ SELECT @borrower_type7 = 70 /* Externe Nutzer */ SELECT @borrower_type71 = 71 /* Externe Nutzer Wissenschaftlich */ SELECT @borrower_type8 = 80 /* Projekte */ SELECT @address_id_nr_tmp = 0 WHILE EXISTS ( select * from borrower b, membershp m where b.iln=62 and b.borrower_status <> 9 /* keine Nutzersperre */ and SUBSTRING (b.borrower_bar, 1, 1) <> 'X' /* keine X-Barcodes */ and m.department_group_nr = 1 /* Abt.Gruppe 1 = UB */ and DATEDIFF(day,GETDATE(),m.expiry_date) >= 0 /* gueltige Mitgliedschaft */ and ( b.borrower_type = @borrower_type1 OR b.borrower_type = @borrower_type2 OR b.borrower_type = @borrower_type3 OR b.borrower_type = @borrower_type4 OR b.borrower_type = @borrower_type5 OR b.borrower_type = @borrower_type6 OR b.borrower_type = @borrower_type7 OR b.borrower_type = @borrower_type71 OR b.borrower_type = @borrower_type8 ) and b.address_id_nr = m.address_id_nr and NOT EXISTS (select x.address_id_nr from xprivate_adstore x /* where x.address_id_nr = b.address_id_nr and x.borrower_bar = b.borrower_bar and x.borrower_type = b.borrower_type) */ /* Modifiziert 18.01.08 - js */ where x.address_id_nr = b.address_id_nr and x.borrower_bar = b.borrower_bar and x.ads_action <> "D") ) BEGIN SELECT @address_id_nr = b.address_id_nr, @borrower_bar = b.borrower_bar, @borrower_type = b.borrower_type, @date_of_birth = b.date_of_birth from borrower b, membershp m where b.iln=62 and b.borrower_status <> 9 /* keine Nutzersperre */ and SUBSTRING (b.borrower_bar, 1, 1) <> 'X' /* keine X-Barcodes */ and m.department_group_nr = 1 /* Abt.Gruppe 1 = UB */ and DATEDIFF(day,GETDATE(),m.expiry_date) >= 0 /* gueltige Mitgliedschaft */ and ( b.borrower_type = @borrower_type1 OR b.borrower_type = @borrower_type2 OR b.borrower_type = @borrower_type3 OR b.borrower_type = @borrower_type4 5 OR b.borrower_type = @borrower_type5 OR b.borrower_type = @borrower_type6 OR b.borrower_type = @borrower_type7 OR b.borrower_type = @borrower_type71 OR b.borrower_type = @borrower_type8 ) and b.address_id_nr = m.address_id_nr and NOT EXISTS (select x.address_id_nr from xprivate_adstore x /* where x.address_id_nr = b.address_id_nr and x.borrower_bar = b.borrower_bar and x.borrower_type = b.borrower_type) */ /* Modifiziert 18.01.08 - js */ where x.address_id_nr = b.address_id_nr and x.borrower_bar = b.borrower_bar and x.ads_action <> "D") IF @address_id_nr = @address_id_nr_tmp BEGIN SELECT 'Break WHILE - INSERT, because address_id_nr was repeated: ' + convert(varchar(10),@address_id_nr) BREAK END /* virtuelle Gruppen abfragen */ /* Nutzertyp 118 = Jugendliche < 18 Jahre */ IF DATEDIFF(dd,GETDATE(),DATEADD(yy,18,@date_of_birth)) > 3 SELECT @borrower_type_ads = 118 ELSE SELECT @borrower_type_ads = @borrower_type SELECT @date_of_birth, DATEDIFF(dd,GETDATE(),DATEADD(yy,18,@date_of_birth)), @borrower_type_ads /* Insert xprivate_adstore */ SELECT 'FOR INSERT SELECTED : ' + convert(varchar(10),@address_id_nr) + ' - ' + @borrower_bar + ' - ' + convert(char(2), @borrower_type) + ' - ' + convert(char(3), @borrower_type_ads) INSERT xprivate_adstore VALUES (62, @address_id_nr, @borrower_bar, @borrower_type, @borrower_type_ads, @date_of_birth, getdate(), getdate(), '01.01.1800', 'I') SELECT @address_id_nr_tmp = @address_id_nr END go SET ROWCOUNT 0 go /* SET TO UPDATE */ /* Kontrollliste */ PRINT 'FOR UPDATE SELECTED :' SELECT x.address_id_nr, b.query_name, b.borrower_bar, b.borrower_type, x.borrower_type_ads FROM borrower b, membershp m, xprivate_adstore x WHERE b.iln=62 and DATEDIFF(day,b.edit_date,x.upd_date) <= 0 and b.borrower_status <> 9 /* keine Nutzersperre */ and SUBSTRING (b.borrower_bar, 1, 1) <> 'X' /* keine X-Barcodes */ and m.department_group_nr = 1 /* Abt.Gruppe 1 = UB */ and DATEDIFF(day,GETDATE(),m.expiry_date) >= 0 /* gueltige Mitgliedschaft */ and x.ads_action = 'X' /* vorhergehendes erfolgreiches Insert oder Update */ and b.address_id_nr = m.address_id_nr and b.address_id_nr = x.address_id_nr and b.borrower_type = x.borrower_type go SET ROWCOUNT 1 go /* UPDATE */ WHILE EXISTS ( select * from borrower b, membershp m, xprivate_adstore x where and and and and and and and and b.iln=62 and DATEDIFF(day,b.edit_date,x.upd_date) <= 0 b.borrower_status <> 9 /* keine Nutzersperre */ SUBSTRING (b.borrower_bar, 1, 1) <> 'X' /* keine X-Barcodes */ m.department_group_nr = 1 /* Abt.Gruppe 1 = UB */ DATEDIFF(day,GETDATE(),m.expiry_date) >= 0 /* gueltige Mitgliedschaft */ x.ads_action = 'X' /* vorhergehendes erfolgreiches Insert oder Update */ b.address_id_nr = m.address_id_nr b.address_id_nr = x.address_id_nr b.borrower_type = x.borrower_type ) BEGIN /* Geburtsdatum wird bei Update uebertragen */ 6 UPDATE xprivate_adstore SET x.upd_date = getdate(), x.date_of_birth = b.date_of_birth, x.ads_action = 'U' FROM borrower b, membershp m, xprivate_adstore x WHERE b.iln=62 and DATEDIFF(day,b.edit_date,x.upd_date) <= 0 and b.borrower_status <> 9 /* keine Nutzersperre */ and SUBSTRING (b.borrower_bar, 1, 1) <> 'X' /* keine X-Barcodes */ and m.department_group_nr = 1 /* Abt.Gruppe 1 = UB */ and DATEDIFF(day,GETDATE(),m.expiry_date) >= 0 /* gueltige Mitgliedschaft */ and x.ads_action = 'X' /* vorhergehendes erfolgreiches Insert oder Update */ and b.address_id_nr = m.address_id_nr and b.address_id_nr = x.address_id_nr and b.borrower_type = x.borrower_type END go SET ROWCOUNT 0 go hro_update_userdat_sql (Auszug) - täglich ausgeführtes SQL-Skript zur Pflege der LBS-Datenbank (automatischer Wechsel Benutzergruppe 71 zu 70 bei Ablauf der Mitgliedschaft) PRINT '' PRINT '///////////////////////////////////////////////////////' PRINT '062-7a. NTYP 71 zu 70 bei Ende Mitgliedschaft' PRINT 'LBS3/LBS3Port - ready' PRINT '///////////////////////////////////////////////////////' PRINT '' SELECT "62:check 71 to 70 start "= getdate () go DECLARE @iln smallint, @borrower_type tinyint, @borrower_type_to tinyint, @dep_group tinyint SELECT @iln = 62 /* UB ROSTOCK */, @borrower_type = 71 /* from Nutzertyp */, @borrower_type_to = 70 /* to Nutzertyp */, @dep_group = 1 /* Abteilungsgruppe */ SELECT b.address_id_nr, b.borrower_bar, b.borrower_status, m.expiry_date, b.query_name FROM borrower b, membershp m WHERE b.iln=@iln AND b.borrower_type = @borrower_type AND m.department_group_nr = @dep_group AND DATEDIFF(day,GETDATE(),m.expiry_date) < 0 AND b.address_id_nr = m.address_id_nr AND b.iln = m.iln go /* **** JETZT borrower UPDATEN **** */ SELECT "start update ..." go SET ROWCOUNT 1 go DECLARE @iln smallint, @borrower_type tinyint, @borrower_type_to tinyint, @dep_group tinyint SELECT @iln = 62 /* UB ROSTOCK */, @borrower_type = 71 /* from Nutzertyp */, @borrower_type_to = 70 /* to Nutzertyp */, 7 @dep_group = 1 /* Abteilungsgruppe */ WHILE EXISTS(select * FROM borrower b, membershp m WHERE b.iln=@iln AND b.borrower_type = @borrower_type AND m.department_group_nr = @dep_group AND DATEDIFF(day,GETDATE(),m.expiry_date) < 0 AND b.address_id_nr = m.address_id_nr AND b.iln = m.iln ) BEGIN UPDATE borrower SET b.borrower_type = @borrower_type_to FROM borrower b, membershp m WHERE b.iln=@iln AND b.borrower_type = @borrower_type AND m.department_group_nr = @dep_group AND DATEDIFF(day,GETDATE(),m.expiry_date) < 0 AND b.address_id_nr = m.address_id_nr AND b.iln = m.iln END go SET ROWCOUNT 0 go SELECT "62:check 71 to 70 end "= getdate () go 2) Skripts zur Ausführung auf dem AD-Client - Generieren Kommandoskript - Einarbeiten der Benutzerdaten in das AD (Delete, Insert, Update) - Setzen der Gruppenzugehörigkeit im AD - Bestätigung der erfolgreichen AD-Aktionen durch Update (ads_action=X) oder Löschen der entspr. Datensätze in xprivate_adstore LBSUser_To_ADS_complete.bat (Main-Skript) @echo off SET SET SET SET GROUPFILE=E:\usr\lbs\admin\LBSUser_TO_ADS\hro_ADStoreINS_SetGroup.bat CMDFILESQL=C:\BATCH\LBSUser_To_ADS_CMD.sql CMDFILE=E:\usr\lbs\admin\LBSUser_TO_ADS\hro_ADStore_CMD.bat TRANSACTFILE=E:\usr\lbs\admin\LBSUser_TO_ADS\hro_ADStore_TRANSACT.sql rem 0. Altes Kommandofile loeschen del %CMDFILE% rem 1. Generieren der Kommandofiles aus LBS-Tabelle xprivate_adstore echo Generieren Kommandofile aus LBS-Tabelle xprivate_adstore ... echo C:\Soft\Tools\isql -Uuser -Ppassword -Shost.ub.uni-rostock.de -i%CMDFILESQL% C:\Soft\Tools\isql -Uuser -Ppassword -Shost.ub.uni-rostock.de -i%CMDFILESQL% | findstr "LBSUser" > %CMDFILE% rem 2. Ausführen Kommandofile - User DELETE, INSERT, UPDATE rem Gruppenfile Initialisieren echo Initialisieren %GROUPFILE% ... echo @echo off > %GROUPFILE% echo. >> %GROUPFILE% echo rem Zuordnung der INSERT-User zu Nutzergruppen >> %GROUPFILE% echo. >> %GROUPFILE% rem Transactfile Initialisieren echo Initialisieren %TRANSACTFILE% ... echo /* SQL-Script zur Bestaetigung der angeforderten Transactionen in der ADS */ > %TRANSACTFILE% echo use lbsdb >> %TRANSACTFILE% echo go >> %TRANSACTFILE% echo PRINT 'SQL-Script zur Bestaetigung der angeforderten Transactionen in der ADS' >> %TRANSACTFILE% echo go >> %TRANSACTFILE% echo. >> %TRANSACTFILE% rem WICHTIG - ZUERST LOESCHEN, DAMIT NTYP-WECHSEL MOEGLICH MIT GLEICHEM BARCODE !!! - 8 rem REIHENFOLGE IN %CMDFILE%: DEL, INS, UPD echo Start ADS-Aktionen: %CMDFILE% ... call %CMDFILE% echo 20 sec pause ... sleep 20 :setgroup rem 3. Setzen der Gruppenzugehoerigkeit fuer Inserted User echo Gruppenzugehoerigkeit setzen ... echo call E:\usr\lbs\admin\LBSUser_TO_ADS\hro_ADStoreINS_SetGroup.bat call E:\usr\lbs\admin\LBSUser_TO_ADS\hro_ADStoreINS_SetGroup.bat echo 5 sec pause ... sleep 5 :transact rem 4. Transaktionen in LBS-Tabelle xprivate_adstore bestaetigen echo Transaktionen in LBS-Tabelle xprivate_adstore bestaetigen ... echo C:\Soft\Tools\isql -Uuser -Ppassword -Shost.ub.uni-rostock.de -i%TRANSACTFILE% C:\Soft\Tools\isql -Uuser -Ppassword -Shost.ub.uni-rostock.de -i%TRANSACTFILE% SET SET SET SET GROUPFILE= CMDFILESQL= CMDFILE= TRANSACTFILE= echo 10 sec pause ... sleep 10 c:\soft\tools\now.exe "LBS-Snapshot to Active Directory on %COMPUTERNAME% processed." | C:\Soft\tools\wmailto -s"AD-Client %COMPUTERNAME%: hro_ADStore" [email protected] f%COMPUTERNAME% -:ende echo --- ende --- LBSUser_To_ADS.bat (Sub-Skript zur Ausführung der AD-Aktionen) Hinweis: hier mit festem Passwort (-canchpwd no -pwdneverexpires yes) @echo off SET GRPFILE=E:\usr\lbs\admin\LBSUser_TO_ADS\hro_ADStoreINS_SetGroup.bat SET TRFILE=E:\usr\lbs\admin\LBSUser_TO_ADS\hro_ADStore_TRANSACT.sql :check_syntax IF "%1" == IF "%2" == IF "%3" == IF "%4" == IF "%5" == IF "%6" == goto start "" "" "" "" "" "" goto goto goto goto goto goto syntax syntax syntax syntax syntax syntax :syntax echo. echo %1 %2 %3 %4 %5 %6 echo LBSUser_To_ADS [INS,UPD,DEL] borrower_bar borrower_type date_of_birth actual_date borrower_type_ads echo. goto ende goto ende :TRINS echo echo admod -b "cn=User_LBS_NTYP%6_Group,ou=User_LBS_NTYP_Groups,dc=ub,dc=unirostock,dc=de" "member:+:cn=%2,ou=user_lbs_ntyp%6,dc=ub,dc=uni-rostock,dc=de" -h ubdc.ub.uni-rostock.de >> %GRPFILE% echo admod -b "cn=User_LBS_NTYP%6_Group,ou=User_LBS_NTYP_Groups,dc=ub,dc=uni-rostock,dc=de" "member:+:cn=%2,ou=user_lbs_ntyp%6,dc=ub,dc=uni-rostock,dc=de" -h ubdc.ub.uni-rostock.de >> %GRPFILE% echo sleep -m 300 >> %GRPFILE% echo update xprivate_adstore set ads_action = 'X' where borrower_bar = '%2' and borrower_type = %3 and ads_action = 'I' >>%TRFILE% echo go >>%TRFILE% goto ende :TRINSUPD echo update xprivate_adstore set ads_action = 'X' where borrower_bar = '%2' and borrower_type = %3 and ads_action = 'I' >>%TRFILE% echo go >>%TRFILE% 9 goto ende :TRUPD echo update xprivate_adstore set ads_action = 'X' where borrower_bar = '%2' and borrower_type = %3 and ads_action = 'U' >>%TRFILE% echo go >>%TRFILE% goto ende :TRUPDADD echo echo admod -b "cn=User_LBS_NTYP%6_Group,ou=User_LBS_NTYP_Groups,dc=ub,dc=unirostock,dc=de" "member:+:cn=%2,ou=user_lbs_ntyp%6,dc=ub,dc=uni-rostock,dc=de" -h ubdc.ub.unirostock.de >> %GRPFILE% echo admod -b "cn=User_LBS_NTYP%6_Group,ou=User_LBS_NTYP_Groups,dc=ub,dc=uni-rostock,dc=de" "member:+:cn=%2,ou=user_lbs_ntyp%6,dc=ub,dc=uni-rostock,dc=de" -h ubdc.ub.uni-rostock.de >> %GRPFILE% echo sleep -m 300 >> %GRPFILE% echo update xprivate_adstore set ads_action = 'X' where borrower_bar = '%2' and borrower_type = %3 and ads_action = 'U' >>%TRFILE% echo go >>%TRFILE% goto ende :TRDEL echo delete xprivate_adstore where borrower_bar = '%2' and borrower_type = %3 and ads_action = 'D' >>%TRFILE% echo go >>%TRFILE% goto ende :start echo. echo %1 %2 %3 %4 IF "%1" == "INS" IF "%1" == "UPD" IF "%1" == "DEL" goto syntax %5 %6 goto insert goto update goto delete rem --------------------------------------------------------------------------------:insert echo --- INSERT new user from LBS to ADS --echo - insert user adfind -b dc=ub,dc=uni-rostock,dc=de -f name=%2 -tdc -h ubdc.ub.uni-rostock.de | findstr %2 if errorlevel 1 goto insadd if errorlevel 0 goto insmod :insadd echo dsadd user "CN=%2,OU=User_LBS_NTYP%6,DC=ub,DC=uni-rostock,DC=de" -pwd %4 -desc %3_%6_LBSINS%5 loscr login.bat -canchpwd no -pwdneverexpires yes -disabled no -s ubdc.ub.uni-rostock.de dsadd user "CN=%2,OU=User_LBS_NTYP%6,DC=ub,DC=uni-rostock,DC=de" -pwd %4 -desc %3_%6_LBSINS%5 -loscr login.bat -canchpwd no -pwdneverexpires yes -disabled no -s ubdc.ub.uni-rostock.de if errorlevel 0 goto TRINS :insmod echo - user already exist - MAKE UPDATE dsmod user "CN=%2,OU=User_LBS_NTYP%6,DC=ub,DC=uni-rostock,DC=de" -pwd %4 -desc %3_%6_LBSUPD%5 -loscr login.bat -canchpwd no -pwdneverexpires yes -disabled no -s ubdc.ub.uni-rostock.de if errorlevel 0 goto TRINSUPD goto ende rem --------------------------------------------------------------------------------:update echo --- UPDATE user from LBS to ADS --echo - update user adfind -b dc=ub,dc=uni-rostock,dc=de -f name=%2 -tdc -h ubdc.ub.uni-rostock.de | findstr %2 if errorlevel 1 goto updadd :updmod echo dsmod user "CN=%2,OU=User_LBS_NTYP%6,DC=ub,DC=uni-rostock,DC=de" -pwd %4 -desc %3_%6_LBSUPD%5 loscr login.bat -canchpwd no -pwdneverexpires yes -disabled no -s ubdc.ub.uni-rostock.de dsmod user "CN=%2,OU=User_LBS_NTYP%6,DC=ub,DC=uni-rostock,DC=de" -pwd %4 -desc %3_%6_LBSUPD%5 -loscr login.bat -canchpwd no -pwdneverexpires yes -disabled no -s ubdc.ub.uni-rostock.de if errorlevel 0 goto TRUPD :updadd echo - user not exist - MAKE INSERT dsadd user "CN=%2,OU=User_LBS_NTYP%6,DC=ub,DC=uni-rostock,DC=de" -pwd %4 -desc %3_%6_LBSINS%5 -loscr login.bat -canchpwd no -pwdneverexpires yes -disabled no if errorlevel 0 goto TRUPDADD goto ende rem --------------------------------------------------------------------------------:delete echo --- DELETE user from LBS to ADS --echo - delete user rem echo dsrm "CN=%2,OU=User_LBS_NTYP%6,DC=ub,DC=uni-rostock,DC=de" -noprompt dsrm "CN=%2,OU=User_LBS_NTYP%6,DC=ub,DC=uni-rostock,DC=de" -noprompt -s ubdc.ub.uni-rostock.de if errorlevel 0 goto TRDEL echo not errorlevel0 - user not deleted goto ende :ende echo --- ende --sleep -m 300 echo. 10 LBSUser_To_ADS_CMD.sql (SQL-Skript zur Abfrage der AD-Aktionen vom LBS-Host) use lbsdb go /* ADStore Basisscript setzt Nutzer auf DELETE AD */ /* Historie: 2007-10-17 - js: virtuellen Nutzertyp borrower_type_ads ergaenzt */ /* ---------------------------------------------------------------------------- */ /* ----------- ERZEUGE DELETE STATEMENTS --------------------- */ PRINT "# CREATE DELETE STATEMENTS ..." SELECT "CALL LBSUser_To_ADS DEL " + + convert(char(11), x.borrower_bar) + ' ' + convert(char(2), x.borrower_type) + ' ' + ' dummy' + ' dummy' + ' ' + convert(char(3), x.borrower_type_ads) FROM xprivate_adstore x WHERE x.iln = 62 and x.ads_action = 'D' /* DELETE */ go /* ADStore Basisscript setzt neue Nutzer auf INSERT AD */ /* Historie: 2007-10-17 - js: virtuellen Nutzertyp borrower_type_ads ergaenzt */ /* -------------------------------------------------------------------------- */ /* ----------- ERZEUGE INSERT STATEMENTS --------------------- */ PRINT "# CREATE INSERT STATEMENTS ..." SELECT "CALL LBSUser_To_ADS INS " + + convert(char(11), x.borrower_bar) + ' ' /* Barcode */ + convert(char(2), x.borrower_type) + ' ' /* Nutzertyp */ + RIGHT('0'+DATENAME(dd, x.date_of_birth),2) + RIGHT('0'+RTRIM(convert(char(2),DATEPART(month, x.date_of_birth))),2) + SUBSTRING(DATENAME(yy, x.date_of_birth),3,2) + ' ' /* Geburtsdatum */ + DATENAME(dd, getdate()) + RIGHT('0'+RTRIM(convert(char(2),DATEPART(month, getdate()))),2) + SUBSTRING(DATENAME(yy, getdate()),3,2) + ' ' /* Aktuelles Datum */ + convert(char(3), x.borrower_type_ads) /* virtueller Nutzertyp */ FROM xprivate_adstore x WHERE x.iln = 62 AND x.ads_action = 'I' /* INSERT */ go /* ADStore Basisscript setzt Nutzer auf UPDATE AD */ /* Historie: 2007-10-17 - js: virtuellen Nutzertyp borrower_type_ads ergaenzt */ /* -------------------------------------------------------------------------- */ /* ----------- ERZEUGE UPDATE STATEMENTS --------------------- */ PRINT "# CREATE UPDATE STATEMENTS ..." SELECT "CALL LBSUser_To_ADS UPD " + + convert(char(11), x.borrower_bar) + ' ' + convert(char(2), x.borrower_type) + ' ' + RIGHT('0'+DATENAME(dd, x.date_of_birth),2) + RIGHT('0'+RTRIM(convert(char(2),DATEPART(month, x.date_of_birth))),2) + SUBSTRING(DATENAME(yy, x.date_of_birth),3,2) + ' ' + DATENAME(dd, getdate()) + RIGHT('0'+RTRIM(convert(char(2),DATEPART(month, getdate()))),2) + SUBSTRING(DATENAME(yy, getdate()),3,2) + ' ' + convert(char(3), x.borrower_type_ads) FROM xprivate_adstore x WHERE x.iln = 62 AND x.ads_action = 'U' /* UPDATE */ go 11 3) KiXtart-Skript zur Zuweisung der Proxy-Instanzen (Aufruf (Call) aus dem Anmeldeskript logub.kix) setenv.kix break off ;******************** ;Domain Controller ;******************** $DC01="\\139.30.98.98" $DC02="\\139.30.99.99" ;******************** ;Basis-Adressen ;******************** $BaseDir=$DC01 $CurDir=$DC01 + "\Netlogon" $ScriptDir=$DC01 + "\Netlogon\ub_scripts" ;******************** ;Proxy-Einstellungen ;******************** ;folgende Proxys stehen zur Verfuegung ; ----------;PROXYS UB ;Benutzergruppe A: Hochschulangehoerige ;proxy1.ub.uni-rostock.de:3127 - ohne Einschraenkungen / squid ;proxy2.ub.uni-rostock.de:3127 - ohne Einschraenkungen / squid ;Benutzergruppe B: wissenschaftl.-nichtkommerzielle Benutzer ;proxy1.ub.uni-rostock.de:3128 - Blacklist / squid ;proxy2.ub.uni-rostock.de:3128 - Blacklist / squid ;Benutzergruppe C: sonstige Benutzer ;proxy1.ub.uni-rostock.de:3129 - Whitelist + Blacklist / squid ;proxy2.ub.uni-rostock.de:3129 - Whitelist + Blacklist / squid ; ----------;PROXYS RZ ;proxy.uni-rostock.de:8080 - ohne Einschraenkungen $ProxyRZ="proxy.uni-rostock.de" ; ----------; in der lokalen Liste nur die Eintraege, die fuer einen Notbetrieb ohne proxy notwendig sind ! $BasicOverride = "http://www.uni-rostock.de;http://katalog.ub.uni-rostock.de;https://katalog.ub.unirostock.de;http://bix.hdm-stuttgart.de;<local>" ; ----------; Standard UB Proxy-Server $ProxyUB="proxy2.ub.uni-rostock.de" SELECT ;******************** ;Nutzer mit Auswahl Internetzugang ;******************** CASE ( Ingroup("$DC01\g_ub_group_selcon","$DC02\g_ub_group_selcon") ) Gosub "SelectConnection" ;******************** ;Rechner ohne Proxy ;******************** CASE ( ( @LDOMAIN="RECHENZENTRUM" ) AND ( @WKSTA="UB1MA999" ; Basic d530cmt OR @WKSTA="UB1MA888" ; Basic dc7800 ) ) $ReturnCode = KeyExist("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings") If $ReturnCode WriteValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings","ProxyEnable","0","REG_DWORD") Endif ;******************** ;Katalog-APC ;******************** 12 CASE ( @WKSTA="UB1NU001" ;BB1 Eingangsbereich OR @WKSTA="UB1NU002" ;BB1 Eingangsbereich OR @WKSTA="UB1NU005" ;BB1 Microfilm APC OR @WKSTA="UB1NU006" ;BB1 Microfilm APC OR @WKSTA="UB1NU007" ;BB1 Microfilm APC OR @WKSTA="UB1NU008" ;BB1 Microfilm APC OR @WKSTA="UB1NU049" ;BB1 OPAC-PC 1.OG OR @WKSTA="UB1NU052" ;BB1 OPAC-PC 1.OG OR @WKSTA="UB1NU054" ;BB1 OPAC-PC 2.OG OR @WKSTA="UB1NU055" ;BB1 OPAC-PC 2.OG OR @WKSTA="UB1NU057" ;BB1 OPAC-PC 3.OG OR @WKSTA="UB1NU059" ;BB1 OPAC-PC 3.OG ) SetProxy ("1", "$ProxyUB:3129", $BasicOverride) Gosub "MsgKatalogAPC" ;******************** ;Hochschulangehoerige ohne Einschraenkungen ;ROLLE A ;******************** CASE ( @LDOMAIN="RECHENZENTRUM" OR Ingroup("User_LBS_NTYP10_Group","User_LBS_NTYP30_Group","User_LBS_NTYP40_Group", "User_LBS_NTYP60_Group") ) SetProxy ("1", "$ProxyUB:3127", $BasicOverride) Gosub "GroupAOverride" ;******************** ;wissenschaftl.-nichtkommerzielle Benutzer / Blacklist ;ROLLE B ;******************** CASE ( Ingroup("User_LBS_NTYP20_Group","User_LBS_NTYP50_Group","User_LBS_NTYP71_Group") ) SetProxy ("1", "$ProxyUB:3128", $BasicOverride) ;******************** ;sonstige Benutzer / Whitelist + Blacklist ;ROLLE C ;******************** CASE ( Ingroup("User_LBS_NTYP80_Group","User_LBS_NTYP118_Group","User_LBS_NTYP70_Group") ) SetProxy ("1", "$ProxyUB:3129", $BasicOverride) Gosub "MsgWhiteList" ;******************** ;sonstige andere Benutzer / Whitelist + Blacklist ;******************** CASE 1 SetProxy ("1", "$ProxyUB:3129", $BasicOverride) ENDSELECT Return ;********************************************************************** ;* END OF MAIN - NOW THE FUNCTIONS: ;********************************************************************** ;********************************************************************** ;* FUNCTION SETPROXY ;********************************************************************** Function SetProxy ($ProxyEnabled, $ProxyServer, $ProxyOverride) $ReturnCode = KeyExist("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings") If $ReturnCode WriteValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings","ProxyEnable",$ProxyEnabled,"REG_DWORD") WriteValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings","ProxyServer",$ProxyServer,"REG_SZ") WriteValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings","ProxyOverride",$ProxyOverride,"REG_SZ") DelValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings","AutoConfigURL") 13 EndIf EndFunction ;********************************************************************** ;* Proxy Special Overrides ;* overrides fuer einzelne ip-addressen oder subnetze ;********************************************************************** :GroupAOverride $IPSubnet = LTRIM(SUBSTR(@IPAddress0, 1, 4)) + LTRIM(SUBSTR(@IPAddress0, 5, 4)) + LTRIM(SUBSTR(@IPAddress0, 9, 4)) $IP = $IPSubnet + LTRIM(SUBSTR(@IPAddress0, 13, 3)) $GAOverride = $BasicOverride ;--- Ressourcen 48-er Subnetz If ( $IPSubnet = "139.30.48." ) ; zfbb - http://*uni-jena.de $GAOverride = "http://*uni-jena.de;" + $BasicOverride Endif WriteValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings","ProxyOverride",$GAOverride,"REG_SZ") Return ;********************************************************************** ;* Message Katalog Arbeitsplatz ;********************************************************************** :MsgKatalogAPC Messagebox('ACHTUNG ! Dieser PC ist hauptsächlich für Recherchen vorgesehen und gestattet nur den Zugriff auf die Ressourcen der Universität Rostock und ausgewählte externe Ressourcen ! ', '--- INTERNET-PC mit eingeschränkter Nutzung ---' ,4160,360) Return ;********************************************************************** ;* Message Whitelist Benutzergruppen ;********************************************************************** :MsgWhiteList If ( Ingroup("User_LBS_NTYP118_Group") ) Messagebox('ACHTUNG ! Da Sie noch nicht das 18. Lebensjahr vollendet haben, sind wir nach Jugendschutzgesetz (JuSchG) und Jugendmedienschutz-Staatsvertrag (JMStV) verpflichtet, Ihren Zugang zum Internet auf ausgewählte Ressourcen zu beschränken! ', '--- INTERNET-PC mit eingeschränkter Nutzung ---' ,4160,360) Else Messagebox('ACHTUNG ! Aufgrund rechtlicher Regelungen: - Benutzungsordnung für das Rostocker Universitätsnetz RUN (http://www.uni-rostock.de/Rechenzentrum/URZ-Home/Netzordnung.shtml) - Vertragsbedingungen zur Nutzung lizenzierter elektronischer Ressourcen ist der Zugang zum Internet auf ausgewählte Ressourcen beschränkt. ', '--- INTERNET-PC mit eingeschränkter Nutzung ---' ,4160,360) EndIf Return ;********************************************************************** ;* Auswahl Internetzugang ;********************************************************************** :SelectConnection $Selection1 = Messagebox('Möchten Sie über einen Proxy-Server mit dem Internet verbunden werden ? Zur Auswahl stehen: JA: Verbindung über einen Proxy-Server der UB (DEFAULT) oder des Rechenzentrums 14 NEIN : direkte Verbindung zum Internet mit der IP-Adresse Ihres Rechners PROXY-SERVER DER UB 1) Standard-Proxyserver der UB ist derzeit: - $ProxyUB 2) Mögliche UB-Proxy-Server: - proxy1.ub.uni-rostock.de - proxy2.ub.uni-rostock.de 3) Ports der UB-Proxy-Server: - 3127 (freier Zugang zum Internet) - 3128 (Blacklist) - 3129 (Whitelist) PROXY-SERVER DES RECHENZENTRUMS 1) Standard-Proxy-Server des Rechenzentrums ist derzeit: - $ProxyRZ 2) Mögliche RZ-Proxy-Server: - proxy.uni-rostock.de 3) Ports der RZ-Proxy-Server: - 8080 (freier Zugang zum Internet) ', '--- Auswahl des Internetzugangs ---' ,4131,15) If ($Selection1 = 6 OR $Selection1 = 2 OR $Selection1 = -1) $Selection2 = Messagebox('Möchten Sie den Proxy-Server der UB ($ProxyUB:3127) verwenden ?', '--- Auswahl des Internetzugangs ---' ,4131,15) If ($Selection2 = 6 OR $Selection1 = 2 OR $Selection1 = -1) SetProxy ("1", "$ProxyUB:3127", $BasicOverride) Gosub "GroupAOverride" Messagebox('Sie werden über den Proxy-Server der UB: ($ProxyUB:3127) mit dem Internet verbunden.', '--- Auswahl des Internetzugangs ---' ,4128,5) Else SetProxy ("1", "$ProxyRZ:8080", $BasicOverride) Gosub "GroupAOverride" Messagebox('Sie werden über den Proxy-Server des Rechenzentrums: ($ProxyRZ:8080) mit dem Internet verbunden.', '--- Auswahl des Internetzugangs ---' ,4128,5) EndIf Else ;--- ohne Proxy $ReturnCode = KeyExist("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings") If $ReturnCode WriteValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings","ProxyEnable","0","REG_DWORD") Endif Messagebox('Sie werden direkt mit dem Internet verbunden.', '--- Auswahl des Internetzugangs ---' ,4128,5) EndIf Return 15