sql >> Database >  >> RDS >> Mysql

mysql- Hoe subsidies toe te passen op kolom?

Ik weet niet zeker of ik de vraag goed begrijp, maar het lijkt te vragen om de mogelijkheid om de persoon te beperken die gegevens uit de tabel Personen selecteert, zodat ze de waarde in de kolom Geheim niet kunnen zien, maar ze zouden moeten worden toegestaan om de Geheime kolom in het interieur van de zoekopdracht te gebruiken (in de WHERE-clausule, enz.).

CREATE TABLE Person
(
    Id      ...,
    Secret  ...,
    ...
);
REVOKE ALL ON Person FROM PUBLIC;
GRANT SELECT(id) ON Person TO SomeOne;

Dus, als mijn interpretatie correct is, wanneer Iemand gegevens selecteert:

SELECT Id     FROM Person;    -- Works (as required)
SELECT Secret FROM Person;    -- Fails (as required)
SELECT Id
  FROM Person
 WHERE Secret = 1;            -- Fails (but we want it to work)

SQL staat dat niet toe, en terecht. Als je de resultaten van zoekopdrachten op Secret kunt conditioneren, kun je de waarde van Secret bepalen met herhaalde zoekopdrachten, dus wat geheim zou moeten zijn, blijft geen geheim. Het is heel gemakkelijk om informatie te lekken.

Kijkend naar de query die mislukt maar "zou niet"... uit de resultaten, weet je dat elke geretourneerde ID de geheime waarde van 1 heeft, dus voor die ID-waarden is het geheim niet langer geheim.

Als je in statistische databases kijkt, waar je alleen op geaggregeerde gegevens mag zoeken, zie je dat er dingen zijn die unieke trackers worden genoemd, waarmee je in feite de kenmerken van één persoon kunt identificeren, zelfs als je alleen geaggregeerde ( SUM, COUNT, ...) waarden in de resultaatsets. Dit is een complexer scenario dan waarmee u wordt geconfronteerd (maar wel een fascinerend scenario). C J Date's (lang niet meer gedrukt) "Introduction to Database Systems, Vol II" heeft een bespreking van Statistical Database en Unique Trackers. (Google-zoekopdracht op 'statistische database unieke tracker' onthult nuttig ogende informatie die toegankelijker is.)

Dus als ik heb begrepen wat gewenst is, geloof ik dat het verlangen misleidend is - en de SQL-standaard staat niet toe wat je zoekt.

Zijn er oplossingen?

Als de query in een weergave kan worden ingebouwd, kan de persoon die de weergave maakt toegang krijgen tot de onderliggende detailgegevens en toegang verlenen tot de weergave, maar de mensen die de weergave gebruiken, kunnen de onbewerkte query niet uitvoeren; dit kan je de bescherming geven die je zoekt. Soortgelijke opmerkingen zijn van toepassing op opgeslagen procedures en zorgen ervoor dat de query beter kan worden geparametriseerd.



  1. Geïndexeerde weergave van onderhoud in uitvoeringsplannen

  2. Een PostgreSQL-replicatie-installatie maken op Debian / Ubuntu

  3. Hoe de invoegprestaties in PostgreSQL te versnellen

  4. Haal pl/sql-array-retourwaarden op in java