Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przywileje w sql, Dla wszystkich działa ale w detalach nie chodzi
frankiejojo
post 24.05.2015, 09:38:17
Post #1





Grupa: Zarejestrowani
Postów: 111
Pomógł: 2
Dołączył: 20.07.2014

Ostrzeżenie: (0%)
-----


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ś?

Go to the top of the page
+Quote Post
Xelah
post 24.05.2015, 10:06:49
Post #2





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
frankiejojo
post 24.05.2015, 10:24:50
Post #3





Grupa: Zarejestrowani
Postów: 111
Pomógł: 2
Dołączył: 20.07.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Xelah
post 25.05.2015, 11:31:06
Post #4





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 14:56