Nie jestem pewien, czy dobrze rozumiem pytanie, ale wydaje się, że prosi się o możliwość ograniczenia osoby wybierającej dane z tabeli Osoby, aby nie widziała wartości w kolumnie Tajne, ale powinno być dozwolone aby użyć kolumny Secret we wnętrzu zapytania (w klauzuli WHERE itp.).
CREATE TABLE Person
(
Id ...,
Secret ...,
...
);
REVOKE ALL ON Person FROM PUBLIC;
GRANT SELECT(id) ON Person TO SomeOne;
Tak więc, jeśli moja interpretacja jest poprawna, kiedy ktoś wybiera dane:
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 na to nie pozwala i nie bez powodu. Zasadniczo, jeśli możesz warunkować wyniki zapytania na Secret, możesz określić wartość Secret za pomocą powtarzających się zapytań, więc to, co ma być tajne, nie pozostaje tajne. Wyciek informacji jest bardzo łatwy.
Patrząc na zapytanie, które kończy się niepowodzeniem, ale „nie powinno”… z jego wyników, wiesz, że każdy zwrócony identyfikator ma wartość Secret równą 1, więc dla tych wartości identyfikatora Secret nie jest już tajny.
Jeśli zajrzysz do statystycznych baz danych, w których możesz przeszukiwać tylko dane zagregowane, odkryjesz, że istnieją rzeczy zwane unikalnymi modułami śledzącymi, które zasadniczo pozwalają zidentyfikować cechy jednej osoby, nawet jeśli możesz zobaczyć tylko dane zagregowane ( SUMA, LICZBA, ...) wartości w zestawach wyników. To bardziej złożony scenariusz niż ten, z którym się zmagasz (ale fascynujący). C J Date's (długo wyczerpany) "Wprowadzenie do systemów baz danych, tom II" ma omówienie bazy danych statystycznych i unikalnych elementów śledzących. (Wyszukiwarka Google pod kątem „unikatowego narzędzia do śledzenia bazy danych statystycznych” ujawnia przydatne, wyglądające informacje, które są bardziej dostępne.)
Tak więc, jeśli zrozumiałem, czego pragnę, uważam, że pragnienie to jest błędne — a standard SQL nie pozwala na to, czego szukasz.
Czy są jakieś obejścia?
Jeśli zapytanie może być wbudowane w widok, osoba tworząca widok może uzyskać dostęp do podstawowych danych szczegółowych i udzielić dostępu do widoku, ale osoby korzystające z widoku nie mogą wykonać nieprzetworzonego zapytania; to może zapewnić ci ochronę, której szukasz. Podobne komentarze dotyczą procedur składowanych i umożliwiają lepszą parametryzację zapytania.