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