Przywileje w sql, Dla wszystkich działa ale w detalach nie chodzi |
Przywileje w sql, Dla wszystkich działa ale w detalach nie chodzi |
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ś? |
|
|
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. |
|
|
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. |
|
|
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%) |
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.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. |
|
|
Wersja Lo-Fi | Aktualny czas: 27.04.2024 - 14:56 |