Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Blokowanie tabeli
wijet
post 3.02.2006, 12:10:01
Post #1





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Łódź

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


Mam tabele na której intensywnie wykonywane są INSERTY, SELECT raz na tydzień do generowania raportów.
Istnieje możliwość że dwaj użytkownicy będa chcieli wstawić w tym samym czasie wiersz do tabeli.

Mam własną klase obsługi bazy, moje pytanie jest nastepujace czy wystarczy

  1. <?php
  2.  
  3. function Query($SqlQuery)
  4. {
  5.   if(ereg('INSERT',$SqlQuery))
  6.    {
  7.        //kod zablokowania tabeli do zapisu odczyt dozwolony
  8.    }
  9.    //dalszy kod tej metody
  10.  
  11. //odblokowanie tabeli
  12. }
  13.  
  14. ?>


Aby zabezpieczyc sie przed taka sytuacją na 100%? a tabela MyISAM

Ten post edytował wijet 3.02.2006, 12:18:56


--------------------
Go to the top of the page
+Quote Post
Kinool
post 3.02.2006, 12:22:20
Post #2





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

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


hmm moze przejdz na InnoDB i zrob transakcje smile.gif a jakich INSERTOW sie boisz?? bo niebardzo cie rozumie smile.gif tego ze ktos wyiera dane a ktos inny w tym czasie wstawia cos do tabeli?

bardziej nalezy sie przejmowac UPDATE niz insert bo tutaj jest zagrozenie gdy dwie osoby edytuja ten sam rekord


--------------------
Go to the top of the page
+Quote Post
wijet
post 3.02.2006, 12:40:13
Post #3





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Łódź

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


Wydaje mi się że nie potrzebuje tych możliwości jakie daje InnoDB wystarczy do tego MyISAM.
Boje sie że jednocześnie wysłane zostanie INSERT od odwóch klientów.
Chodzi mi oto czy jedno z tych zapytań wpadnie do kolejki, a nastepnie zostanie wykonane czy MySQL na chama bedzie próbował wykonać dwa(jakoś) worriedsmiley.gif
a może warto użyć INSERT DELAYED i to załatwi sprawe ?


--------------------
Go to the top of the page
+Quote Post
kszychu
post 3.02.2006, 12:46:38
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Obydwa zostaną wykonane, nie musisz się tym przejmować. Przejmować się należy UPDATE'ami a nie INSERT'ami.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
wijet
post 3.02.2006, 12:51:08
Post #5





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Łódź

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


Zakładam że użytkownik którym skrypt loguje się do bazy ma możliwość Tylko
i wyłącznie INSERTowania.
A tak dla mojej wiedzy w przypadku UPDATEów wystarczy blokować tabele do zapisu a można zostawić odczyt? MyISAM


--------------------
Go to the top of the page
+Quote Post
Kinool
post 3.02.2006, 13:38:23
Post #6





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

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


jezeli dwuch userow wstawia cos do tej samej tabeli (zakladam ze kozystasz z pola auto_increment) wiec ktorez z nich zawsze trafi jako pierwsze smile.gif wiec ni musisz sie tym przejmowac, inaczej jesli klucz glowny sam przydzielasz za pomoca jakiegos schematu, wtedy mzoe sie zdazyc ze dwie osoby dostana ten sam identyfikator wiec ta ktorej zapytanie bedzie pierwsz wykona sie poprawnie a tej innej osoby wygeneruje blad

Cytat
A tak dla mojej wiedzy w przypadku UPDATEów wystarczy blokować tabele do zapisu a można zostawić odczyt?


skoro jedna osoba bedzie mogla (miala prawa) do zrobienia UPDATE to czemu inna nie smile.gif jest to sztandarowy przyklad problemu rezerwacji biletow smile.gif dwie osoby cha zamowic bilet, zadaja zapytanie do boazy czy sa wolne mijsca, jest wolne wiec jedna i druga osoba rezerwuja miejsce (nie swiadome swojego istnienia:)) gosc, ktory pierwszy wysle formulaz dostanie bilet a gosc numer 2 wyplni frmulaz, kasa zostanie mu scagnieta z konta a biletu nie dostanie tongue.gif i dlatego nalezy sie martwic UPDATE smile.gif


--------------------
Go to the top of the page
+Quote Post
wijet
post 3.02.2006, 14:41:58
Post #7





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Łódź

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


Nie chodzi mi o użytkownika portalu czy aplikacji php tylko o użytkownika bazy danych, który powinien miec maksymalnie waskie uprawnienia.
W wypadku błedu pozwalajacego na wstrzykniecie swojego kodu SQL np "DELETE from tabelka" nie wykona sie bo użytkownik bazy nie ma takich uprawnien, o takiego użytkownika mi chodziło.


--------------------
Go to the top of the page
+Quote Post
spenalzo
post 3.02.2006, 14:45:04
Post #8





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


No to od tego są uprawnienia użytkowników, a nie blokowanie tabel.


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

Go to the top of the page
+Quote Post
wijet
post 3.02.2006, 14:46:43
Post #9





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 20.12.2005
Skąd: Łódź

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


Nie chodzi mi o użytkownika portalu czy aplikacji php tylko o użytkownika bazy danych, który powinien miec maksymalnie waskie uprawnienia.
W wypadku błedu pozwalajacego na wstrzykniecie swojego kodu SQL np "DELETE from tabelka" nie wykona sie bo użytkownik bazy nie ma takich uprawnien, o takiego użytkownika mi chodziło.


--------------------
Go to the top of the page
+Quote Post
spenalzo
post 3.02.2006, 14:54:06
Post #10





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


...? blink.gif

Ten post edytował spenalzo 3.02.2006, 14:54:57


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

Go to the top of the page
+Quote Post
kszychu
post 3.02.2006, 14:57:49
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Cytat(wijet @ 2006-02-03 14:46:43)
Nie chodzi mi o użytkownika portalu czy aplikacji php tylko o użytkownika bazy danych, który powinien miec maksymalnie waskie uprawnienia.
W wypadku błedu pozwalajacego na wstrzykniecie swojego kodu SQL np "DELETE from tabelka" nie wykona sie bo użytkownik bazy nie ma takich uprawnien, o takiego użytkownika mi chodziło.

Baza mysql, tabele user, db, tables_priv i pozostałe. Tam definiujesz uprawnienia dla użytkownika bazy danych.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
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: 6.07.2025 - 20:17