Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Nadanie uprawnień na rekordy - MYSQL
przemek89k
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 31.08.2011

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


Witam,
posiadam utworzoną bazę danych : załóżmy że są tam tabele Pracownik(idpracownik, imie, nazwisko), oraz Zlecenie(idzlecenie, idpracownik, opis). Stworzyłem program, z którego będzie korzystało wiele osób - umożliwia on dodawanie rekordów do tabel, edytowanie i usuwanie. Zawiera on moduł logowania, w którym wpisuje się identyfikator pracownika - na jego podstawie pobierane są rekordy z bazy danych - w ten sposób użytkownik pracuje wyłącznie na rekordach dla niego przeznaczonych.

Problemem jest zabezpieczenie bazy danych - do połączenia z bazą danych wykorzystywane jest konto "roota". Zastanawiam się nad stworzeniem użytkownika z uprawnieniami select, insert, update, oraz delete dla wybranej bazy danych - będzie to o wiele bezpieczniejsze (IMG:style_emoticons/default/smile.gif) Rodzi się kolejny problem - ponieważ w ten sposób, ktoś kto chciałby namieszać w bazie danych, mógłby nie korzystać ze stworzonego przeze mnie programu, ale bezpośrednio zalogować się do PhpMyAdmin. W ten sposób zobaczy on nie tylko swoje rekordy, ale wszystkie rekordy z tabel do których ma uprawnienia.

Jak w takim razie nadać uprawnienia użytkownikowi np. "user", aby miał dostęp do tabeli Pracownicy ale tylko rekordu, którego id = 1, oraz tabeli Zlecenia ale tylko rekordów gdzie idpracownik = 1. Tabele są ze sobą powiązane tzn. pracownik może mieć wiele zleceń, ale zlecenie należy do 1 pracownika (stąd klucz obcy idpracownik w tabeli Zlecenia).
Chodzi mi o to, że nawet jak ten user zaloguje się do phpmyadmin to będzie mógł robić tylko to samo co w moim programie - czyli przeglądać tabele z rekordami, których id = 1.

-------------------
Może jeszcze raz napiszę o co mi chodzi ....

W bazie danych posiadam tabelę "Zlecenia" z kolumnami "idzlecenie, idpracownik, opis". Tabela Zlecenie zawiera 5 rekordów :

id_zlecenie, id_pracownik, opis
1 1 aaaa
2 1 vvvv
3 2 dddd
4 3 ssss
5 1 cccc

W programie mam ustawione, że logując się na użytkownika o identyfikatorze 1 z bazy danych są pobierane rekordy z tabeli "Zlecenia" gdzie id_pracownik = 1 (to jest łatwe do zrobienia). Jednak do połączenia z bazą danych wykorzystywane jest konto z uprawnieniami, które pozwala przeglądać wszystkie rekordy w tabelach - czyli ktoś logując się na PhpMyAdmin zobaczy rekordy należące do pracownika z id =2, oraz z id=3 i może coś pomieszać. Czy można to jakoś zabezpieczyć ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
przemek89k
post
Post #2





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 31.08.2011

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


Cytat
Coś motasz.... najpierw piszesz ze to user sam wprowadza dane do własnej bazy.
Teraz piszesz, że to ty mu przekazujesz dane do bazy.... Weź się chłopie zdecyduj....


Chyba ty nie rozumiesz, co napisałem :

Cytat
Właśnie o to chodzi, że administrator (np. ja) przekazuje mu dane, które musi wpisać aby uzyskać połączenie z bazą danych.


User korzysta z programu - który łączy się z bazą danych. Aby nawiązać połączenie konieczne jest podanie informacji do klucza "mysql connection" (nazwa bazy danych, serwer, użytkownik i hasło). Program ma być uniwersalny, a więc jak ktoś założy sobie bazę danych o nazwie "ala ma kota", loginem "admin" i hasłem "admin" to z tą bazą danych ma się połączyć. Dlatego te dane muszą zostać wpisane w programie ręcznie ! Skoro zostaną wpisane ręcznie to użytkownik będzie je znał - i być może to wykorzysta logując się do phpmyadmin.

Zatem czy jest sposób, aby stworzyć konto z uprawnieniami, które ma dostęp do odpowiednich tabel w bazie danych, ale nie może logować się do phpmyadmin ?

Cytat
Co to za aplikacja, że ty przekazujesz userowi dane do bazy? W normalnej aplikacji co najwyżej możesz userowi utworzyć konto do aplikacji (nie do bazy) i mu te dane do aplikacji (nie do bazy) przekazać.


Program będzie podzielony na dwie części : program administratora (tutaj nie martwię się o dostęp do bazy danych), oraz program pracownika. Program pracownika może być uruchomiony na wielu maszynach jednocześnie. Nie są to aplikacje działające w przeglądarce, ale oddzielne programy (wykonane w C#). Te dwa programy (pracownika i administratora) nie komunikują się ze sobą bezpośrednio, ale przez bazę danych mysql. W jaki sposób chciałbyś zrealizować połączenie z bazą danych bez podania informacji umożliwiających dostęp do tej bazy danych ? Oczywiście mółbym login i hasło do bazy zaszyć w programie - ale tylko gdybym od samego początku (na etapie tworzenia programu) wiedział, że będzie wykorzystywana baza danych o nazwie "....", z uzytkownikiem "...." i loginem "....". Jednak te informacje ulegają zmianie - trzeba je wpisać ręcznie.
Go to the top of the page
+Quote Post

Posty w temacie


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: 31.12.2025 - 11:20