Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql- Как да приложим грантове към колона?

Не съм сигурен, че разбирам правилно въпроса, но изглежда иска възможността да ограничи лицето, избиращо данни от таблицата с лицата, така че да не може да види стойността в колоната Secret, но трябва да им бъде разрешено да използвате колоната Secret във вътрешността на заявката (в клаузата WHERE и т.н.).

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

Така че, ако тълкуването ми е правилно, когато някой избере данни:

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 не позволява това и има основателна причина. По принцип, ако можете да обусловите резултатите от заявката на Secret, можете да определите стойността на Secret с повтарящи се заявки, така че това, което се предполага, че е тайно, не остава тайна. Изтичането на информация е много лесно.

Разглеждайки заявката, която е неуспешна, но „не трябва“...от резултатите от нея знаете, че всеки върнат идентификатор има стойността на Secret от 1, така че за тези стойности на идентификатора тайната вече не е тайна.

Ако погледнете в статистическите бази данни, където ви е позволено да търсите само в обобщени данни, ще откриете, че има неща, наречени уникални тракери, които основно ви позволяват да идентифицирате характеристиките на един човек, дори ако ви е позволено да виждате само обобщени ( SUM, COUNT, ...) стойности в наборите от резултати. Това е по-сложен сценарий, отколкото сте изправени (но завладяващ). C J Date (дълго изчерпан) "Въведение в системите за бази данни, том II" има дискусия за статистическа база данни и уникални тракери. (Търсене в Google на „уникален тракер на статистическа база данни“ разкрива полезна информация, която е по-достъпна.)

Така че, ако съм разбрал какво се желае, смятам, че желанието е погрешно — а стандартът SQL не позволява това, което търсите.

Има ли заобиколни решения?

Ако заявката може да бъде вградена в изглед, лицето, създаващо изгледа, може да получи достъп до основните подробни данни и да предостави достъп до изгледа, но хората, използващи изгледа, не могат да изпълнят необработената заявка; това може да ви даде защита, която търсите. Подобни коментари се отнасят за съхранените процедури и позволяват на заявката да се параметризира по-добре.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съхранявайте php datetime в базата данни на mysql

  2. Отпадането на таблица в MySQL също ли премахва индексите?

  3. как да избера AVG от множество колони на един ред

  4. mysql dump - изключете някои данни от таблицата

  5. Windows:XAMPP срещу WampServer срещу EasyPHP срещу алтернатива