Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Nadanie uprawnień na rekordy - MYSQL
przemek89k
post 13.06.2012, 14:51:10
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 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ć ?


--------------------
http://pcfaq.pl - Portal komputerowy PCFAQ - porady i triki komputerowe, rozrywka, newsy IT, portal o komputerach 2012 !!
Go to the top of the page
+Quote Post
nospor
post 13.06.2012, 15:24:42
Post #2





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Cytat
ale bezpośrednio zalogować się do PhpMyAdmin.
No ale jak ktoś się loguje do twojej aplikacji to ni w ząb nie ma dostępu do phpmyadmin.... przecież to dwie rożne rzeczy.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
przemek89k
post 13.06.2012, 15:45:48
Post #3





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

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


Tylko, że program korzysta z bazy danych mysql zewnętrznej - gdzieś te dane użytkownik musi wpisać w programie. Skoro będzie znać te informacje to będzie mógł wejść do PHPMyAdmin. Aplikacja nie jest przypisana do konkretnej bazy danych tylko będzie ogólnodostępna.


--------------------
http://pcfaq.pl - Portal komputerowy PCFAQ - porady i triki komputerowe, rozrywka, newsy IT, portal o komputerach 2012 !!
Go to the top of the page
+Quote Post
nospor
post 13.06.2012, 16:06:28
Post #4





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




No ale skoro użytkownik sam podaje dane do bazy i ma dostęp do tej bazy to co cię obchodzi co z tą bazą porobi? Jak napsuje to jego problem nie twoj.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
przemek89k
post 13.06.2012, 17:59:59
Post #5





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

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


Tylko, że użytkownik ma dostęp do bazy za pomocą programu - który odpowiednio filtruje co ten ktoś dostanie. Tzn. podczas logowania jest wpisywanu numer pracownika i z bazy danych pobierane są dane przyporządkowane do tego pracownika. A gdy teraz on zaloguje się na konto phpmyadmin to będzie miał dostęp do wszystkich treści.


--------------------
http://pcfaq.pl - Portal komputerowy PCFAQ - porady i triki komputerowe, rozrywka, newsy IT, portal o komputerach 2012 !!
Go to the top of the page
+Quote Post
nospor
post 13.06.2012, 18:02:46
Post #6





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Cytat
A gdy teraz on zaloguje się na konto phpmyadmin to będzie miał dostęp do wszystkich treści.
No wiem. No przecież o tym mowie. Jak koleś ma dostęp do bazy danych to ma dostep do bazy danych i ty nic na to nie poradzisz. Przecież to on ci podaje dane do bazy więc on może tam robić co mu się żywnie podoba


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
przemek89k
post 14.06.2012, 08:22:56
Post #7





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

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


Cytat
Przecież to on ci podaje dane do bazy więc on może tam robić co mu się żywnie podoba


Właśnie o to chodzi, że administrator (np. ja) przekazuje mu dane, które musi wpisać aby uzyskać połączenie z bazą danych. Osoba korzystająca z tego programu będzie pracownikiem.


--------------------
http://pcfaq.pl - Portal komputerowy PCFAQ - porady i triki komputerowe, rozrywka, newsy IT, portal o komputerach 2012 !!
Go to the top of the page
+Quote Post
nospor
post 14.06.2012, 08:43:28
Post #8





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




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....

W pierwszej wersji, gdzie user sam wpisuje dane do swojej bazy - nic nie poradzisz.
W drugiej wersji, gdzie ty przekazujesz dane userowi do bazy to.... to ja już nic nie kumam.... 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ć.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
przemek89k
post 14.06.2012, 09:28:26
Post #9





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.


--------------------
http://pcfaq.pl - Portal komputerowy PCFAQ - porady i triki komputerowe, rozrywka, newsy IT, portal o komputerach 2012 !!
Go to the top of the page
+Quote Post
trafas
post 14.06.2012, 09:37:53
Post #10





Grupa: Zarejestrowani
Postów: 87
Pomógł: 12
Dołączył: 31.05.2006

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


To może zrób sobie swoją tabelę z userami w "twojej centralnej" bazie, gdzie będziesz trzymał:

- login
- hasło
- adres bazy
- nazwa_bazy
- login usera mysql do tej bazy


Wtedy użytkownikowi podajesz "login" i "hasło".
W aplikacji zaszywasz na stałe połączenie do twojej "centralnej bazy" ( tych danych nie zna user wcale )
On logując się na te dane pobiera z serwera już dane do połączenia się z docelową bazą danych.

Ograniczenie byłoby takie, że to ty musiałbyś zakładać bazę i usera

Ten post edytował trafas 14.06.2012, 09:39:40
Go to the top of the page
+Quote Post
nospor
post 14.06.2012, 09:38:32
Post #11





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Cytat
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.
Skoro pracownik ma program na swoim kompie, to do takiego kompa podchodzi admin i sam wypełnia co ma wypełnić. Wówczas pracownik nie zna danych do bazy.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
bpskiba
post 14.06.2012, 15:48:53
Post #12





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

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


Mam wrażenie, że przemkowi chodzi o szerszy temat pod nazwą aplikacje bazodanowe.

Gdy jedna aplikacja jest uruchamiana na wielu maszynach. Często wszystko, co potrzebne do połączenia do z bazą danych przechowuje się w pliku ini.
Wtedy aplikacja przy uruchomieniu zaczytuje plik ini, ustanawia połączenie z serwerem danych i przeprowadza autentykację użytkownika.
Jeżeli trafi się rozgarnięty złoczyńca otworzy sobie taki ini notatnikiem, przeczyta jaki jest silnik bazy danych, adres serwera danych, nazwa użytkowkika bazy oraz hasło.
Następnie MSSQL studio lub SqlYog w zależności od potrzeb i gotowy dostęp do całej bazy. Można na przykład sprawdzić ile zarabiają koledzy.
W przypadku serwerów web ten temat właścieie nie istnieje.
Jeżeli chodzi o aplikacje dane te należy przechowywać w postaci zaszyfrowanej.

Ten post edytował bpskiba 14.06.2012, 16:25:24
Go to the top of the page
+Quote Post
Crozin
post 14.06.2012, 16:41:50
Post #13





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Nie, nie trzyma się danych w postaci zaszyfrowanej - nie udostępnia się po prostu bezpośredniego dostępu do bazy danych.

Potrzebujesz:
1. Serwera z bazą danych oraz dedykowaną aplikację na nim. Aplikacja ta będzie posiadać konta użytkownika (np. rozpoznawane na podstawie loginu i hasła). Tylko ta aplikacja ma dostęp do bazy danych i pośredniczy ona w wymianie danych. To ta aplikacja jest gwarantem zachowania spójności i poprawności danych, to ona ma ostateczną decyzję nad tym co i komu udostępnić.
2. Aplikację klienta, która nie pobiera żadnych danych z bazy danych, a jedynie loguje się do aplikacji na serwerze i wysyła do tej aplikacji żądania pobrania bądź zmodyfikowania jakiś danych w bazie.

W skrócie, Google: WebServices, enterprise applications.

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: 25.04.2025 - 05:22