Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przywileje w sql, Dla wszystkich działa ale w detalach nie chodzi
frankiejojo
post
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
 
Start new topic
Odpowiedzi (1 - 3)
Xelah
post
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
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
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 02:49