sql >> Databáze >  >> RDS >> Mysql

mysql- Jak uplatnit granty na sloupec?

Nejsem si jistý, zda správně rozumím otázce, ale zdá se, že žádá o možnost omezit osobu vybírající data z tabulky Osoby tak, aby neviděla hodnotu ve sloupci Tajné, ale měla by být povolena k použití sloupce Tajné uvnitř dotazu (v klauzuli WHERE atd.).

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

Takže, pokud je můj výklad správný, když SomeOne vybere data:

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 to neumožňuje, a to z dobrého důvodu. V zásadě, pokud můžete podmínit výsledky dotazu na Tajemství, můžete hodnotu Tajemství určit opakovanými dotazy, takže to, co má být tajné, nezůstane tajemstvím. Je velmi snadné uniknout informace.

Když se podíváte na dotaz, který selže, ale "neměl by"...z jeho výsledků víte, že každé vrácené ID má hodnotu Secret 1, takže pro tyto hodnoty ID již tajemství není tajné.

Pokud se podíváte do statistických databází, kde máte povoleno vyhledávat pouze v souhrnných datech, zjistíte, že existují věci zvané Unique Trackers, které vám v zásadě umožňují identifikovat charakteristiky jedné osoby, i když máte povoleno vidět pouze souhrnná ( SUM, COUNT, ...) hodnot ve výsledkových sadách. Toto je složitější scénář, než kterému čelíte (ale fascinující). C J Datum (dlouho nevytištěno) "Úvod do databázových systémů, svazek II" má diskusi o statistické databázi a jedinečných sledovačích. (Vyhledávání Google na 'statistical database unique tracker' odhaluje užitečně vypadající informace, které jsou dostupnější.)

Takže, pokud jsem pochopil, co je požadováno, věřím, že touha je zavádějící – a standard SQL neumožňuje to, co hledáte.

Existují nějaká řešení?

Pokud lze dotaz zabudovat do pohledu, osoba vytvářející pohled může získat přístup k podkladovým podrobným datům a udělit přístup k pohledu, ale lidé používající pohled nemohou provést nezpracovaný dotaz; to vám může poskytnout ochranu, kterou hledáte. Podobné komentáře platí pro uložené procedury a umožňují lepší parametrizaci dotazu.



  1. Jak mohu vytvořit průměr dat v MySQL?

  2. MYSQL Select Query s SUM()

  3. Vzorec Pearsonova korelačního koeficientu v SQL

  4. Časový limit dotazu vyprší při spuštění z webu, ale superrychlý při spuštění z SSMS