MySQL / Apache Błąd w zapytaniu PHP MySQL

głosy
23

Otrzymuję następujący błąd:

Access denied for user 'apache' @ 'localhost' (using password: NO)

Podczas korzystania z następującego kodu:

<?php

include(../includes/connect.php);

$query = SELECT * from story;

$result = mysql_query($query) or die(mysql_error());

echo <h1>Delete Story</h1>;

if (mysql_num_rows($result) > 0) {
    while($row = mysql_fetch_row($result)){
          echo '<b>'.$row[1].'</b><span align=right><a href=../process/delete_story.php?id='.$row[0].'>Delete</a></span>';
      echo '<br /><i>'.$row[2].'</i>';
    }
}
else {
   echo No stories available.;
}
?>

connect.phpPlik zawiera mój MySQL połączyć połączenia, które są w porządku pracy z moich INSERT IGNORE kwerend w innej części oprogramowania. Jeśli komentarz I poza $result = mysql_querylinię, to przechodzi do rachunku innego. Tak, to jest to, że linia lub zawartość w IF.

I zostały poszukiwania netto za rozwiązaniami, a większość z nich wydaje się być związane z zbyt wiele połączeń MySQL lub że użytkownik loguje się do mnie jak MySQL nie ma uprawnień. Sprawdziłem oba. Wciąż mogę wykonywać inne moje pytania gdzie indziej w oprogramowaniu, a ja sprawdzić, czy konto ma odpowiednie uprawnienia.

Utwórz 05/08/2008 o 22:45
źródło użytkownik
W innych językach...                            


11 odpowiedzi

głosy
10

A jeśli ma to znaczenie w ogóle, apache @ localhost nie jest nazwą konta użytkownika, że ​​mogę używać, aby dostać się do bazy danych. Nie mam żadnych kont użytkowników z nazwą Apache w nich w ogóle o to chodzi.

Jeśli jest powiedzenie „apache @ localhost” nazwa użytkownika nie jest uzyskiwanie prawidłowo przeszły do ​​połączenia MySQL. 'Apache zazwyczaj użytkownik, który uruchamia proces httpd (co najmniej w układach RedHat'cie bazie), a jeśli brak użytkownika jest przekazywane podczas połączenia MySQL wykorzystuje kogo jest wywołanie połączenia.

Jeśli zrobisz sobie prawo połączenia w skrypcie, a nie w nazwie pliku, nie można dostać ten sam błąd?

Odpowiedział 06/08/2008 o 01:05
źródło użytkownik

głosy
4

Zmień include (), require (). Jeśli „connect.php” plik nie może być require () d, skrypt zakończy się niepowodzeniem z błędem krytycznym, natomiast include () tylko generuje ostrzeżenie . Jeśli nazwa użytkownika jesteś przechodząc do mysql_connect () nie jest „Apache”, niepoprawna ścieżka do skryptu connect jest najczęstszym sposobem na uzyskanie tego rodzaju błędu.

Odpowiedział 21/10/2008 o 19:30
źródło użytkownik

głosy
2

Koleś odpowiedź jest wielkim DUH! który niestety zajęło mi trochę czasu, aby dowiedzieć się, jak dobrze. Prawdopodobnie masz funkcję jak dbconnect () i używasz zmiennych z pliku dołączanego do nawiązania połączenia. $ Conn = mysql_connect ($ dbhost, $ dbuser, $ dbpass).

Dobrze, ponieważ jest wewnątrz funkcji zmienne z pliku obejmować muszą być przekazywane do funkcji lub innego funkcji nie będzie wiedział, co $ dbhost, $ i $ dbpass dbuser jest. Sposób, aby rozwiązać ten problem jest, aby te zmienne globalne dzięki czemu funkcje mogą je odebrać. Innym rozwiązaniem, które nie jest bardzo bezpieczny byłoby napisać host, użytkownika i przekazać w funkcji mysql_connect.

Nadzieję, że to pomoże, ale miałem ten sam problem.

Odpowiedział 02/03/2009 o 20:47
źródło użytkownik

głosy
2

Czy skrypt connect.php faktycznie nawiązać połączenie, czy też po prostu zdefiniować funkcję trzeba zadzwonić, aby utworzyć połączenie? Błąd dostajesz jest symptomatyczne nie mając wcześniej nawiązane połączenie w ogóle.

ETA: zmienić Również należą do require. Podejrzewam, że to nie jest faktycznie w tym pliku w ogóle. Ale to może nie cicho.

Odpowiedział 21/10/2008 o 18:57
źródło użytkownik

głosy
2

Nie zapomnij sprawdzić logi błędów bazy danych. Powinieneś być w stanie zobaczyć, jeśli nawet uderzanie DB. Jeśli nie, należy sprawdzić reguły zapory na opakowaniu. Na polu linux można uruchomić iptables -L dostać zasady lista firewall.

W przeciwnym razie będzie to czysta kwestia dostępu. Zrobić „select * from mysql.user”, aby sprawdzić, czy użytkownik apache nawet założyć tam. Ponadto polecam zakładania konta specjalnie dla aplikacji w przeciwieństwie do używania apache, od jakiejkolwiek innej aplikacji tworzonych będzie działał jak Apache domyślnie i może dostać nieautoryzowanemu dostępowi do db.

Wystarczy spojrzeć w górę „Grant” w dokumentacji @ dev.mysql.com, aby uzyskać więcej informacji. Jeśli masz bardziej konkretny questiosn dotyczące db, po prostu edytować swoje pytanie, a ja spojrzeć.

Odpowiedział 21/10/2008 o 18:53
źródło użytkownik

głosy
2

Czy użytkownik apache wymagają hasła, aby połączyć się z bazą danych? Jeśli tak, to fakt, że mówi „za pomocą hasła: NO” doprowadzi mnie do przypuszczenia, że ​​kod próbuje połączyć bez hasła.

Jeśli jednak użytkownik apache nie wymaga hasła, podwójnie kontrola uprawnień może być dobrym pomysłem (co wspomniałeś cię już zaznaczone). Wciąż może być korzystne, aby spróbować wykonanie czegoś takiego w wierszu mysql:

GRANT ALL PRIVILEGES ON `*databasename*`.* to 'apache'@'localhost';

Że składnia powinna być prawidłowe.

Poza tym, jestem zakłopotany tak jak ty.

Odpowiedział 05/08/2008 o 22:56
źródło użytkownik

głosy
2

Wystarczy, aby sprawdzić, czy używasz tylko tę część pojawi się błąd?

<?php
include("../includes/connect.php");

$query = "SELECT * from story";
$result = mysql_query($query) or die(mysql_error());

Jeśli tak, to czy nadal pojawia się błąd, jeśli skopiować i wkleić jeden z tych wkładek do tej strony, staram się zobaczyć, czy to lokalny do tej strony lub rzeczywistej linii.

Ponadto, można umieścić kopie wezwań przyłączeniowych (minus haseł), chyba wkładki użyć dokładnie taką samą składnię, jak w tym przykładzie.

Odpowiedział 05/08/2008 o 22:52
źródło użytkownik

głosy
1

Czy pamiętacie zrobić:

flush privileges;

Jeśli użytkownik nie jest skonfigurowany to będzie dać „apache” @ „localhost” błąd.

Odpowiedział 19/09/2013 o 11:46
źródło użytkownik

głosy
1

można wykonać jedną z następujących czynności:

  • Dodaj użytkownika „apache” i konfigurację swoje przywileje z phpMyAdmin lub MySQL na powłoce
  • Powiedz php do uruchomienia mysql_connectjako inny użytkownik, kogoś, kto ma już uprawnienia potrzebne (ale może nie root), poszukaj mysql.default_user w pliku php.ini.
Odpowiedział 21/06/2009 o 22:06
źródło użytkownik

głosy
1

Wystarczy, aby sprawdzić, czy używasz tylko tę część pojawi się błąd?

Jeśli tak, to czy nadal pojawia się błąd, jeśli skopiować i wkleić jeden z tych wkładek do tej> strony, staram się zobaczyć, czy to lokalny do tej strony lub rzeczywistej linii.

Ponadto, można umieścić kopie wezwań przyłączeniowych (minus haseł), chyba wkładek> użyć dokładnie taką samą składnię, jak w tym przykładzie.

Oto co jest w pliku connection.php. I połączone z plikiem przez to w taki sam sposób jak gdzie mogę wykonać zapytania INSERT IGNORE gdzie indziej w kodzie.

$conn = mysql_connect("localhost", ******, ******) or die("Could not connect");
mysql_select_db("adbay_com_-_cms") or die("Could not select database");

Postaram INSERT pracy IGNORUJ zapytanie w tej dziedzinie, aby sprawdzić, czy na zewnątrz.

Co do pozostałych wypowiedź na temat dostępu hasłem. Zrobiłem, jak stwierdzono w moim pierwszym delegowania, sprawdź uprawnienia. Kiedyś phpMyAdmin, aby sprawdzić, czy prawa dostępu do konta użytkownika używałem były prawidłowe. A jeśli ma to znaczenie w ogóle, apache @ localhost nie jest nazwą konta użytkownika, że ​​mogę używać, aby dostać się do bazy danych. Nie mam żadnych kont użytkowników z nazwą Apache w nich w ogóle o to chodzi.

Odpowiedział 05/08/2008 o 23:40
źródło użytkownik

głosy
1

Jeśli rzeczywiście jesteś w stanie wprowadzić za pomocą tych samych połączeń z połączeniem, problem najprawdopodobniej leży w użytkownika „apache” nie mający uprawnienia SELECT w bazie danych. Jeśli masz zainstalowany phpMyAdmin można spojrzeć na uprawnienia dla użytkownika w okienku przywileje. phpMyAdmin również sprawia, że ​​bardzo łatwo zmodyfikować uprawnienia.

Jeśli masz tylko dostęp do linii poleceń, można sprawdzić uprawnienia z bazy mysql.

Prawdopodobnie będziesz musiał zrobić coś takiego:

GRANT SELECT na myDatabase.myTable do 'apache' @ 'localhost';

Odpowiedział 05/08/2008 o 23:02
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more