GRANT weitergeben
Antman
- datenbank
Hallo Forum,
ich habe eine Frage hinsichtlich des GRANT Befehls und die Weitergabe von Rechten.
B bekommt von A ein GRANT SELECT ON tabelle1.
B gibt dieses GRANT weiter an C und C an D. Nun entzieht B dem D das GRANT auf das SELECT von tabelle1. Kann D weiterhin tabelle1 einsehen?
Antman
echo $begrüßung;
B bekommt von A ein GRANT SELECT ON tabelle1.
B gibt dieses GRANT weiter an C und C an D. Nun entzieht B dem D das GRANT auf das SELECT von tabelle1. Kann D weiterhin tabelle1 einsehen?
Probier es doch einfach mal aus.
Wenn D weiterhin tabelle1 einsehen könnte wäre das System kaputt.
Falls du MySQL verwendest, solltest du beachten, dass Berechtigungsänderungen nicht sofort wirksam werden.
echo "$verabschiedung $name";
Wenn D weiterhin tabelle1 einsehen könnte wäre das System kaputt.
Falls du MySQL verwendest, solltest du beachten, dass Berechtigungsänderungen nicht sofort wirksam werden.
Ja aber D hat das GRANT doch von C bekommen. Warum sollte D nicht weiterlesen können mal von der Theorie her.In der DB ist doch gespeichert, dass C das GRANT von B bekommen hat. Es handelt sich um kein spezifisches System. Ich lerne die Theorie. Deswegen diese unspeuifische Frage.
echo $begrüßung;
In der DB ist doch gespeichert, dass C das GRANT von B bekommen hat. Es handelt sich um kein spezifisches System. Ich lerne die Theorie. Deswegen diese unspeuifische Frage.
Ob Rechteverwaltung theoretisch ein vom Datenbanksystem unabhängiges Thema ist, weiß ich nicht, wage dies aber zu bezweifeln. Im praktischen Falle von MySQL wird beispielsweise nicht gespeichert, woher ein Privileg kommt.
echo "$verabschiedung $name";
Im praktischen Falle von MySQL wird beispielsweise nicht gespeichert, woher ein Privileg kommt.
Ja, aber wenn es in MYSQL nicht gespeichert wird, woher weiß das DBMS dann, dass B dem D einfach GRANT SELECT entziehen kann, obwohl nicht B es gewährt hat sondern C?!
echo $begrüßung;
Im praktischen Falle von MySQL wird beispielsweise nicht gespeichert, woher ein Privileg kommt.
Ja, aber wenn es in MYSQL nicht gespeichert wird, woher weiß das DBMS dann, dass B dem D einfach GRANT SELECT entziehen kann, obwohl nicht B es gewährt hat sondern C?!
MySQL weiß es nicht[*]. Solange der Benutzer das "GRANT OPTION"-Recht hat, kann er nach Belieben die ihm gegebenen Rechte anderen vermachen oder entziehen.
echo "$verabschiedung $name";
[*] Es gibt zwar bei den Tabellen-Rechten einen Vermerk des Grantors (für User, Host, DB und Column gibt es dies nicht), der wird aber von MySQL nicht weiter ausgewertet.
Du hast mich missverstanden.
Ich weiß, dass er es nach belieben gewähren und entziehen kann.
Aber in diesem Fall hat b es dem d ja indirekt(über c) gewährt, aber direkt entzogen. Warum geht das!?
echo $begrüßung;
Ich weiß, dass er es nach belieben gewähren und entziehen kann.
Das darf der Benutzer nur, wenn er "GRANT OPTION" darf.
Aber in diesem Fall hat b es dem d ja indirekt(über c) gewährt, aber direkt entzogen. Warum geht das!?
Das muss so gehen, meiner Meinung nach. Mal abgesehen davon, dass ein Administrator immer noch die Rechtetabellen direkt ändern kann, darf, nur weil der eine Rechteinhaber verhindert ist, nicht ein anderer mit den gleichen Rechten gehindert werden, seine Rechte (in dem Fall REVOKE) ausüben zu können.
echo "$verabschiedung $name";
Aber B ist nicht der Administrator.
B hat das Recht ebenfalls von A bekommen.
Hallo Antman, <-- Das ist die Begrüßung
Aber B ist nicht der Administrator.
B hat das Recht ebenfalls von A bekommen.
_Welches_ Recht hat B von A bekommen?
LG
Chris <-- Das ist die Verabschiedung
_Welches_ Recht hat B von A bekommen?
Das gleiche, das B auch an C weitergibt. GRANT SELECT ... WITH GRANT OPTION
echo $begrüßung;
Aber B ist nicht der Administrator.
B hat das Recht ebenfalls von A bekommen.
Wenn B kein Administrator für Rechte ist, dann hat er im Falle von MySQL die "GRANT OPTION" nicht und kann seine Rechte nicht weitervereben. Ansonsten ist es ein Rechte-Administrator mit allen dazugehörenden Möglichkeiten.
echo "$verabschiedung $name";
Hallo Antman,
B bekommt von A ein GRANT SELECT ON tabelle1.
B gibt dieses GRANT weiter an C und C an D. Nun entzieht B dem D das GRANT auf das SELECT von tabelle1. Kann D weiterhin tabelle1 einsehen?
Mir scheint, Du verwechselst hier zwei Dinge:
Mittels GRANT kann ein berechtigter User Zugriffsrechte eines anderen Users auf Tabellen erteilen, nicht aber das Recht, Rechte zu erteilen.
Das eine ist das Objektrecht auf die Ressource, das andere ist das Handlungsrecht eines Objektes. Das wird z.B. beim Anlegen des Users durch den Passus "with GRANT OPTION" erteilt.
MySQL ist nicht NOVELL. Derartig objektorientiert verwaltete "Directory Services" gibt es eben von NOVELL. M$ hat es unter "Active Directory" in Lizenz in seine Produkte eingebaut. Letzlich funktionieren Rechteverwaltungssystemen von DBMS nach demselben Schema.
Wenn Du ein solches System haben willst, kannst Du es Dir aber selber aufbauen und auf der MySQL-Rechteverwaltung aufsetzen.
LG
Chris
MySQL ist nicht NOVELL. Derartig objektorientiert verwaltete "Directory Services" gibt es eben von NOVELL. M$ hat es unter "Active Directory" in Lizenz in seine Produkte eingebaut. Letzlich funktionieren Rechteverwaltungssystemen von DBMS nach demselben Schema.
Ich habe in meinem Posting auch mit keinem Wort auf mysql Bezug genommen. Ich weiß nicht wie die Leute darauf kommen diese Frage stünde in Bezug auf mysql.
Das mit der GRANT OPTION ist schon klar. Ich verstehe nur nicht warum B das REVOKE auf D setzen kann obwohl das GRANT von C kommt.
echo $begrüßung;
Ich habe in meinem Posting auch mit keinem Wort auf mysql Bezug genommen. Ich weiß nicht wie die Leute darauf kommen diese Frage stünde in Bezug auf mysql.
Weil die meisten Benutzer hier Probleme mit diesem System haben, nahm ich an, es geht dir darum. Du hättest gleich in der Ursprungsfrage deutlicher zu verstehen geben können, dass du kein spezielles System meinst. SQL ist nicht gleich SQL, jeder Diaklekt ist ein wenig anders. Wenn du von "dem GRANT-Befehl" sprichst ist also fast immer interessant, welchen Dialekt du meinst.
Jedes System kocht bei der Rechteverwaltung sein eigenes Süppchen. Deswegen halte ich eine theoretische Diskussion für sehr müßig. Praktischen Nutzen bringt diese meines Erachtens nach nicht. Wenn du mich fragst: Schau dir die Implementationen in den einzelnen System an, um zu Lernen, welches System es wie macht, und lebe mit der Implementation des verwendeten Datenbanksystems.
echo "$verabschiedung $name";
Hallo Antman,
Das mit der GRANT OPTION ist schon klar. Ich verstehe nur nicht warum B das REVOKE auf D setzen kann obwohl das GRANT von C kommt.
Warum sollte er dies nicht können, wenn er über das entsprechende Recht verfügt?
Stelle Dir ein beliebiges Rechtesystem (nicht notwendigerweise Datenbanken) vor:
Benutzer A und B verfügen über die Rechte, dem gleichen Benutzerkreis die gleichen Rechte zu erteilen und zu entziehen.
Somit ist es zunächst selbstverständlich, dass Benutzer B einem x-beliebigen Benutzer aus diesem Benutzerkreis ein Recht entziehen kann, dass Benutzer A gewährt hat.
Es ist also erforderlich, dass Benutzer A Benutzer B das Recht entzieht, Rechte zu entziehen, die Benutzer A gewährt hat. Dies könnte Benutzer A allgemein vornehmen, aber auch speziell für bestimmte gewährte Rechte. (Beispiel: NDS, von Chris bereits angeführt).
Beachte, dass eine Rechte-Administration extrem erschwert würde, wenn nur _der_ Benutzer ein Recht entziehen könnte, der es auch gewährt hat.
Freundliche Grüße
Vinzenz