Datenbank vor einer Kopie schützen

Hallo Leute,

und zwar beschäftigt mich das Thema, meine Datenbank vor einer Kopier zu schützen.

Es gibt bei einige User, die Lese zugriff auf meine Datenbank haben. Nur will ich nicht, dass sie diese kopieren können, sondern nur ein paar Datenauslesen können.

Ich hab mich gerade mal ein wenig mit Funktionen/Trigger beschäftigt, nur sehe ich dort keine Möglichkeit - evt. kann mich hier jemand korrigieren??

Eine Möglichkeit sehe ich darin, dass ich die Anfrage modifiziere, indem ich einem SELECT Anfrage ein Limit setze.

Aus … wird
SELECT * FROM tb => SELECT * FROM tb LIMIT 0,100

NUr mit was kann ich das realisieren, bzw. ist das Möglich?

Für Ideen oder sonstiges wäre ich sehr dankbar :slight_smile:

Nicht möglich.

Wenn jemand lesenden Zugriff auf deine Daten hat, kann er über kurz oder lang alle Daten auslesen und bei sich ablegen.

Was ist so wichtig, das du es schützen möchtest, aber trotzdem lesenden Zugriff vergibst?

Vermutlich willst Du doch eher, daß die User nur die Daten zu sehen bekommen und auch verändern können, die ihnen gehören. Ob der User dann mit einem Schlag alle 100 Datensätze auslesen kann oder dazu 50 selects mit je 2 Sätzen macht ist doch in Zeiten, wo man sowas programmieren kann, völlig egal.

Die User haben eigene Logins? Du kannst mit den Usern und auch Gruppen hantieren. Z.B. pro Tablerecord ein extra Feld mit dem Usernamen. Dann den Zugriff auf die Tabelle selbst den Usern verbieten und statt dessen ein VIEW erzeugen, der nur das anzeigt, wo oben genannte Extra-Spalte gleich dem CURRENT_USER ist.

Ich hab mich gerade mal ein wenig mit Funktionen/Trigger beschäftigt, nur sehe ich dort keine Möglichkeit - evt. kann mich hier jemand korrigieren??

Nicht wirklich falsch die Idee. Mit den Trigger beim INSERT die extra Spalte mit dem Usernamen befüllen. Eine Funktion, security auf definer stellen, die Daten einfügen darf. Details dazu hier:
PostgreSQL: Documentation: Manuals: PostgreSQL 8.2: CREATE FUNCTION

Eine Möglichkeit sehe ich darin, dass ich die Anfrage modifiziere, indem ich einem SELECT Anfrage ein Limit setze.

Aus … wird
SELECT * FROM tb => SELECT * FROM tb LIMIT 0,100

Ich muß Dir jetzt nicht erklären, daß das Bullshit ist, oder?


Andreas
Welcome Tamara!

Ich habe Eine datenbank, die aus 1.000.0000 Daten von objekte bestehen. Ein Query sieht dann so aus:

SELECT * FROM table WHERE name=“bla” or “blaa”

Ich will nur solche Anfragen zulassen, selects ohne where klausel sind zum kopiren sehr gut :slight_smile:
und ich könnte so den kopiervorgang verkompliziertern.

Interessant :slight_smile:

Bullshit, sorry.

Das hält mich ungefähr eine foreach Schleife länger in meinem Programm auf.


Noch mal im Klartext: wenn jemand Zugriff auf alle Daten hat, kann er auch alle Daten kopieren.

Also wenn ich nur where klauseln zulasse mit name=“bla” und nur zugriff auf eine view (ohne id) habe, bin ich der Meinung, dass es fast nicht möglich ist diese zu kopieren.
Darüber hinaus ein Query limit …

Nur: wie möchtest du verhindern, das jemand andere Anfragen an deine Datenbank stellt?

Das ist die Frage die sich stellt. Kann man nicht ein Funktion schreiben, die nur 5 Queries erlaubt, und dies dann in der Funktion abändern?

seufz und wie rufst du diese Funktion auf, ohne die “ganzen anderen” normalen Möglichkeiten wie SELECT, INSERT, UPDATE?

Langsam habe ich genug von dieser Diskussion, dein Ansatz bringt imho nichts. Wenn du Daten sicher aufbewahren möchtest, darfst du keinen allgemeinen Zugriff darauf gewähren.

Ok evt. hab ich mich nicht richtig ausgedrückt. Ich will im Prinzip nur eine Select Anfrage erlauben.

Darüber hinaus, sind mir alle Querys bekannt, die angefragt werden (sind ca. 5-7 verschiedene).
Kann ich diese Querys, dessen definition ich genau kenne nicht abfangen?

Hm, keine Antwort heißt - immernoch bullshit? :slight_smile: :slight_smile: