Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przywileje w sql
Forum PHP.pl > Forum > Bazy danych > MySQL
frankiejojo
Witam,

Temat jest taki - uzytkownik ma prawo robić wszystko z rekordami, które sam wpisał tz insert, delete, update and select no i teraz zagwozda
GRANT DELETE, INSERT, Select, update ON table TO 'user' - działa bez problemowo
Tylko, że ja bym chciał by delikwent miał dostęp tylko do swoich rekordów a nie modyfikował rekordy kolegów
więc
GRANT DELETE, INSERT, Select, update ON table TO 'user' where user = uzytkownik

no i tu jest jakiś byk, którego nie widzę - podpowie ktoś?

Xelah
W MySQL nie ma czegoś takiego jak row level privileges. Nie ma czegoś takiego jak GRANT ... WHERE.

Takie coś musisz obsłużyć manualnie, na przykład poprzez dodawanie kolumny user_id do każdej tabeli. Tylko na dłuższą metę to nie zadziała, bo jak mam dostęp do bazy, bo mam swój login i hasło to i tak mogę zmieniać co popadnie. Ja bym na Twoim miejscu pomyślał o jakimś rozwiązaniu na wyższym poziomie, gdzie user niegdy nie dostaje credential-i do bazy, a tylko do aplikacji. Wtedy jesteś a stanie kontrolować dostęp wedle uznania.
frankiejojo
Można by co prawda załatwić ten temat perspektywami typu
Create view uprawnienia1 as select*from table where user ='uzytkownik';

tylko, że nie mogę nigdzie znaleźć wzorca do perspektywy z delete, insert i updatem - proste przeróbki nie działają. no i dobrze by było zrobić to jedną perspektywą a nie czterema.
Xelah
Cytat(frankiejojo @ 24.05.2015, 11:24:50 ) *
Można by co prawda załatwić ten temat perspektywami typu
Create view uprawnienia1 as select*from table where user ='uzytkownik';


Tylko musisz pamiętać, żeby użyć
Kod
SQL SECURITY DEFINER
i tenże definer musi mieć odpowiednie uprawnienia do wszystkich tabel czy kolumn z widoku. Inaczej doestaniesz ERROR 1356.

Cytat(frankiejojo @ 24.05.2015, 11:24:50 ) *
tylko, że nie mogę nigdzie znaleźć wzorca do perspektywy z delete, insert i updatem - proste przeróbki nie działają. no i dobrze by było zrobić to jedną perspektywą a nie czterema.


https://dev.mysql.com/doc/refman/5.0/en/vie...datability.html

Musisz pamiętać, że nie każdy widok można aktualizować. Obostrzenia są całkiem spore.

Poza tym w takiej sytuacji musisz mieć widoki do każdego możliwego zapytania. Nie ma widoku = nie ma możliwości czytania/zapisania. Czyli musisz mieć predefiniowaną listę tego, co, gdzie i jak user robić może.

Przydało by się jakieś dodatkowe info. Bo jakoś dalej nie rozumiem, dlaczego chcesz to robić na poziomie bazy a nie aplikacji. Jeśli zrobisz na poziomie aplikacji to możesz bez problemu podmienić bazę. Ale jak zrobisz na poziomie bazy to masz hard coupling pomiędzy aplikacją i bazą i bez modyfikacji obu nie zmienisz bazy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.