{"beispielaufgaben":[{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"In einer mittelständischen Spedition melden sich fünf Lagermitarbeiter gemeinsam mit einem einzigen Sammelkonto namens „lager01\" am Warenwirtschaftssystem an. Der Schichtleiter hält das für praktisch, weil sich so niemand ein eigenes Kennwort merken muss und die Anmeldung schneller geht. Erläutern Sie aus Sicht des Zugriffsschutzes einen Grund, warum stattdessen für jede Person ein eigenes, personenbezogenes Benutzerkonto angelegt werden sollte.","typ":"absatz"}],"beispiel_id":"bsp-zugriffsschutz-und-benutzerkonten-erlaeutern-freitextantwort-01","freigabeart":"maschinell","loesung":[{"text":"Erwartet wird eine nachvollziehbar begründete Erläuterung eines Grundes, z. B.: Bei einem gemeinsam genutzten Sammelkonto lässt sich im Protokoll nicht mehr feststellen, welche Person eine bestimmte Buchung oder Änderung ausgelöst hat; die Nachvollziehbarkeit von Aktionen geht verloren. Ein personenbezogenes Konto ermöglicht die eindeutige Zuordnung von Handlungen zu einzelnen Personen und damit die Aufklärung von Fehlern oder Missbrauch. Punkteverteilung: 1 P für das benannte Problem (fehlende Zuordenbarkeit bzw. mangelnde Protokollierbarkeit), 2 P für die schlüssige Begründung der sicherheitsrelevanten Wirkung. Gleichwertig anerkannt: individuelle Rechtevergabe je Person nicht möglich; Kennwort muss bei Personalwechsel für alle geändert werden.","typ":"absatz"}],"operator_id":"operator.erlaeutern","pruefungszuordnung":{"berufe":[],"teil":"AP1"},"punkte":3,"punkterahmen":{"max":3,"min":3},"quellen":["ap1-2025-fruehjahr-gesamt-a01-e-eb"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"Ein Sachbearbeiter der Buchhaltung verlässt zum Monatsende das Unternehmen. Sein Benutzerkonto samt Zugriff auf das Finanzsystem bleibt aus organisatorischer Bequemlichkeit weiterhin aktiv, da man es später eventuell noch für eine Vertretung nutzen möchte. Erläutern Sie einen Grund, warum das Benutzerkonto einer ausgeschiedenen Person aus Sicht des Zugriffsschutzes unmittelbar deaktiviert werden sollte.","typ":"absatz"}],"beispiel_id":"bsp-zugriffsschutz-und-benutzerkonten-erlaeutern-freitextantwort-02","freigabeart":"maschinell","loesung":[{"text":"Erwartet wird die Erläuterung eines Grundes, z. B.: Ein aktives Konto einer ausgeschiedenen Person kann weiterhin für Anmeldungen genutzt werden; die frühere Person oder ein Dritter mit Kenntnis der Zugangsdaten könnte unbefugt auf sensible Finanzdaten zugreifen. Da das Konto nicht mehr überwacht wird, bleiben missbräuchliche Zugriffe leicht unbemerkt. Die sofortige Deaktivierung verhindert diesen unberechtigten Zugriff. Punkteverteilung: 1 P für das benannte Risiko (fortbestehende Zugriffsmöglichkeit), 2 P für die schlüssige Begründung der Gefährdung. Gleichwertig: verwaistes Konto als Angriffsfläche, da keine aktive Kontrolle mehr erfolgt.","typ":"absatz"}],"operator_id":"operator.erlaeutern","pruefungszuordnung":{"berufe":[],"teil":"AP1"},"punkte":3,"punkterahmen":{"max":3,"min":3},"quellen":["ap1-2025-fruehjahr-gesamt-a01-e-eb"]},{"artefakt_id":"artefakt.freitextantwort","aufgabe":[{"text":"In einer Arztpraxis soll ein neuer Auszubildender in der Anmeldung Termine erfassen. Vorgeschlagen wird, ihm sofort dieselben umfassenden Zugriffsrechte wie der Praxisleitung zu erteilen, damit er bei Bedarf auf alle Patientenakten und Abrechnungsdaten zugreifen kann. Erläutern Sie einen Grund, warum die Rechte eines Benutzerkontos aus Sicht des Zugriffsschutzes auf die tatsächlich für die Aufgabe benötigten Funktionen beschränkt werden sollten.","typ":"absatz"}],"beispiel_id":"bsp-zugriffsschutz-und-benutzerkonten-erlaeutern-freitextantwort-03","freigabeart":"maschinell","loesung":[{"text":"Erwartet wird die Erläuterung eines Grundes, z. B.: Umfassende Rechte für eine Aufgabe, die nur die Terminerfassung erfordert, eröffnen unnötige Zugriffsmöglichkeiten auf sensible Patienten- und Abrechnungsdaten; werden die Zugangsdaten kompromittiert oder die Rechte versehentlich bzw. absichtlich missbraucht, ist der Schaden deutlich größer. Eine Beschränkung auf die benötigten Funktionen begrenzt die Angriffs- und Fehlerfläche. Punkteverteilung: 1 P für das benannte Prinzip (nur benötigte Rechte / minimale Berechtigung), 2 P für die schlüssige Begründung der Schadensbegrenzung. Gleichwertig: reduziertes Risiko bei kompromittiertem Konto; Schutz vor versehentlicher Fehlbedienung sensibler Daten.","typ":"absatz"}],"operator_id":"operator.erlaeutern","pruefungszuordnung":{"berufe":[],"teil":"AP1"},"punkte":3,"punkterahmen":{"max":3,"min":3},"quellen":["ap1-2025-fruehjahr-gesamt-a01-e-eb"]},{"artefakt_id":"artefakt.quellcode","aufgabe":[{"text":"Für die Ausleihverwaltung einer Vereinsbibliothek soll ein kleines Kontenmodul in Python entstehen. Jedes Konto besteht aus Benutzername, Passwort und genau einer Rolle; vorgesehen sind bibliothekar und mitglied. Ausschließlich die Rolle bibliothekar darf die Sonderaktion medium_aussondern auslösen; jede andere Rolle und jede sonstige Aktion ist abzulehnen.","typ":"absatz"},{"text":"Erstellen Sie ein vollständig lauffähiges Python-Programm und nennen Sie darin die Funktionen konto_anlegen(benutzer, passwort, rolle), anmelden(benutzer, passwort) und darf(rolle, aktion). konto_anlegen speichert ein Konto, anmelden prüft die Anmeldedaten und darf entscheidet regelbasiert über die Sonderaktion. Legen Sie anna mit Passwort bib als bibliothekar und timo mit Passwort les als mitglied an. Melden Sie beide an, prüfen Sie danach für beide die Aktion medium_aussondern und geben Sie die zwei Wahrheitswerte zeilenweise aus. Erwartete Ausgabe: zuerst True, danach False.","typ":"absatz"}],"beispiel_id":"bsp-zugriffsschutz-und-benutzerkonten-nennen-quellcode-01","freigabeart":"maschinell","loesung":[{"text":"Vollständig lauffähiges Python-Programm, z. B.:","typ":"ueberschrift"},{"text":"```python\nkonten = {}","typ":"code"},{"text":"def konto_anlegen(benutzer, passwort, rolle):\n    konten[benutzer] = {\"passwort\": passwort, \"rolle\": rolle}","typ":"code"},{"text":"def anmelden(benutzer, passwort):\n    konto = konten.get(benutzer)\n    return konto is not None and konto[\"passwort\"] == passwort","typ":"code"},{"text":"def darf(rolle, aktion):\n    if aktion == \"medium_aussondern\":\n        return rolle == \"bibliothekar\"\n    return False","typ":"code"},{"text":"konto_anlegen(\"anna\", \"bib\", \"bibliothekar\")\nkonto_anlegen(\"timo\", \"les\", \"mitglied\")","typ":"absatz"},{"text":"if anmelden(\"anna\", \"bib\"):\nprint(darf(konten[\"anna\"][\"rolle\"], \"medium_aussondern\"))\nif anmelden(\"timo\", \"les\"):\nprint(darf(konten[\"timo\"][\"rolle\"], \"medium_aussondern\"))\n```","typ":"absatz"},{"text":"Ausgabe:\nTrue\nFalse","typ":"absatz"},{"text":"Bewertung (4 P): konto_anlegen legt beide Konten mit Rolle an – 1 P (Kontenverwaltung); anmelden prüft den gespeicherten Passwortwert korrekt – 1 P (Authentifizierung); darf bindet medium_aussondern ausschließlich an bibliothekar und verweigert jede andere Rolle sowie jede sonstige Aktion – 1 P (Autorisierung); Demonstration mit erlaubtem Fall (bibliothekar → True) und verweigertem Fall (mitglied → False) samt passender Ausgabe – 1 P. mitglied und alle nicht genannten Rollen erhalten kein Zusatzrecht. Fachlich gleichwertige Lösungen anderer Sprachen sind anzuerkennen, sofern nicht ausdrücklich die Python-Syntax geprüft wird.","typ":"absatz"}],"operator_id":"operator.nennen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":4,"punkterahmen":{"max":4,"min":4},"quellen":["ap2-fiae-2023-sommer-ae2-a04-d"]},{"artefakt_id":"artefakt.quellcode","aufgabe":[{"text":"In einer Schulverwaltung wird ein Java-Programm zur Kontensteuerung der Notenpflege gebaut. Jedes Konto hat Benutzername, Passwort und genau eine Rolle; genutzt werden die Rollen lehrkraft und sekretariat. Nur die Rolle lehrkraft darf die geschützte Aktion note_eintragen ausführen; jede andere Rolle und jede weitere Aktion muss verweigert werden.","typ":"absatz"},{"text":"Erstellen Sie ein vollständig lauffähiges Java-Programm und nennen Sie darin die Methoden kontoAnlegen(String benutzer, String passwort, String rolle), anmelden(String benutzer, String passwort) und istErlaubt(String rolle, String aktion). kontoAnlegen legt ein Konto an, anmelden prüft die Zugangsdaten und istErlaubt entscheidet regelbasiert über die geschützte Aktion. Legen Sie berg mit Passwort pw1 als lehrkraft und kluge mit Passwort pw2 als sekretariat an. Melden Sie beide Konten an, prüfen Sie danach für beide die Aktion note_eintragen und geben Sie die beiden Ergebnisse aus. Erwartete Ausgabe: zuerst true, dann false.","typ":"absatz"}],"beispiel_id":"bsp-zugriffsschutz-und-benutzerkonten-nennen-quellcode-02","freigabeart":"maschinell","loesung":[{"text":"Vollständig lauffähiges Java-Programm, z. B.:","typ":"ueberschrift"},{"text":"```java\nimport java.util.HashMap;\nimport java.util.Map;","typ":"code"},{"text":"public class Notenverwaltung {\n    static Map<String, String[]> konten = new HashMap<>();","typ":"code"},{"text":"    static void kontoAnlegen(String benutzer, String passwort, String rolle) {\n        konten.put(benutzer, new String[]{passwort, rolle});\n    }","typ":"code"},{"text":"    static boolean anmelden(String benutzer, String passwort) {\n        String[] konto = konten.get(benutzer);\n        return konto != null && konto[0].equals(passwort);\n    }","typ":"code"},{"text":"    static boolean istErlaubt(String rolle, String aktion) {\n        if (aktion.equals(\"note_eintragen\")) {\n            return rolle.equals(\"lehrkraft\");\n        }\n        return false;\n    }","typ":"code"},{"text":"    public static void main(String[] args) {\n        kontoAnlegen(\"berg\", \"pw1\", \"lehrkraft\");\n        kontoAnlegen(\"kluge\", \"pw2\", \"sekretariat\");\n        if (anmelden(\"berg\", \"pw1\")) {\n            System.out.println(istErlaubt(konten.get(\"berg\")[1], \"note_eintragen\"));\n        }\n        if (anmelden(\"kluge\", \"pw2\")) {\n            System.out.println(istErlaubt(konten.get(\"kluge\")[1], \"note_eintragen\"));\n        }\n    }\n}\n```","typ":"code"},{"text":"Ausgabe:\ntrue\nfalse","typ":"absatz"},{"text":"Bewertung (4 P): kontoAnlegen legt beide Konten mit Rolle an – 1 P (Kontenverwaltung); anmelden prüft den gespeicherten Passwortwert korrekt – 1 P (Authentifizierung); istErlaubt bindet note_eintragen ausschließlich an lehrkraft und verweigert jede andere Rolle sowie jede weitere Aktion – 1 P (Autorisierung); Demonstration mit erlaubtem Fall (lehrkraft → true) und verweigertem Fall (sekretariat → false) samt passender Ausgabe – 1 P. sekretariat und alle nicht genannten Rollen erhalten kein Zusatzrecht. Fachlich gleichwertige Lösungen anderer Sprachen sind anzuerkennen, sofern nicht ausdrücklich die Java-Syntax geprüft wird.","typ":"absatz"}],"operator_id":"operator.nennen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":4,"punkterahmen":{"max":4,"min":4},"quellen":["ap2-fiae-2023-sommer-ae2-a04-d"]},{"artefakt_id":"artefakt.quellcode","aufgabe":[{"text":"Eine Online-Redaktion benötigt für ihr Redaktionssystem ein kleines Kontenmodul in JavaScript. Ein Konto trägt Benutzername, Passwort und genau eine Rolle; eingesetzt werden die Rollen chefredakteur und redakteur. Nur die Rolle chefredakteur darf die besondere Aktion artikel_veroeffentlichen ausführen; jede andere Rolle und jede sonstige Aktion ist zu verweigern.","typ":"absatz"},{"text":"Erstellen Sie ein vollständig lauffähiges JavaScript-Programm und nennen Sie darin die Funktionen kontoAnlegen(benutzer, passwort, rolle), anmelden(benutzer, passwort) und darfAusfuehren(rolle, aktion). kontoAnlegen speichert ein Konto, anmelden prüft die Zugangsdaten und darfAusfuehren entscheidet regelbasiert über die besondere Aktion. Legen Sie mila mit Passwort geheim1 als chefredakteur und jonas mit Passwort geheim2 als redakteur an. Melden Sie beide Konten an, prüfen Sie danach für beide die Aktion artikel_veroeffentlichen und geben Sie beide Rückgabewerte über die Konsole aus. Erwartete Ausgabe: zuerst true, dann false.","typ":"absatz"}],"beispiel_id":"bsp-zugriffsschutz-und-benutzerkonten-nennen-quellcode-03","freigabeart":"maschinell","loesung":[{"text":"Vollständig lauffähiges JavaScript-Programm, z. B.:","typ":"ueberschrift"},{"text":"```javascript\nconst konten = {};","typ":"code"},{"text":"function kontoAnlegen(benutzer, passwort, rolle) {\n  konten[benutzer] = { passwort, rolle };\n}","typ":"code"},{"text":"function anmelden(benutzer, passwort) {\n  const konto = konten[benutzer];\n  return konto !== undefined && konto.passwort === passwort;\n}","typ":"code"},{"text":"function darfAusfuehren(rolle, aktion) {\n  if (aktion === \"artikel_veroeffentlichen\") {\n    return rolle === \"chefredakteur\";\n  }\n  return false;\n}","typ":"code"},{"text":"kontoAnlegen(\"mila\", \"geheim1\", \"chefredakteur\");\nkontoAnlegen(\"jonas\", \"geheim2\", \"redakteur\");","typ":"code"},{"text":"if (anmelden(\"mila\", \"geheim1\")) {\n  console.log(darfAusfuehren(konten[\"mila\"].rolle, \"artikel_veroeffentlichen\"));\n}\nif (anmelden(\"jonas\", \"geheim2\")) {\n  console.log(darfAusfuehren(konten[\"jonas\"].rolle, \"artikel_veroeffentlichen\"));\n}\n```","typ":"code"},{"text":"Ausgabe:\ntrue\nfalse","typ":"absatz"},{"text":"Bewertung (4 P): kontoAnlegen legt beide Konten mit Rolle an – 1 P (Kontenverwaltung); anmelden prüft den gespeicherten Passwortwert korrekt – 1 P (Authentifizierung); darfAusfuehren bindet artikel_veroeffentlichen ausschließlich an chefredakteur und verweigert jede andere Rolle sowie jede sonstige Aktion – 1 P (Autorisierung); Demonstration mit erlaubtem Fall (chefredakteur → true) und verweigertem Fall (redakteur → false) samt passender Ausgabe – 1 P. redakteur und alle nicht genannten Rollen erhalten kein Zusatzrecht. Fachlich gleichwertige Lösungen anderer Sprachen sind anzuerkennen, sofern nicht ausdrücklich die JavaScript-Syntax geprüft wird.","typ":"absatz"}],"operator_id":"operator.nennen","pruefungszuordnung":{"berufe":["FIAE"],"teil":"AP2"},"punkte":4,"punkterahmen":{"max":4,"min":4},"quellen":["ap2-fiae-2023-sommer-ae2-a04-d"]}],"konzept_id":"fachkonzept.zugriffsschutz-und-benutzerkonten","schema_version":3}