Bindowanie nazwy bazy danych przy CREATE DATABASE

0

Dlaczego poniższe zapytanie powoduje błąd?

$addDatabase = $db->prepare("CREATE DATABASE IF NOT EXISTS :dbName");
$addDatabase->bindValue(":dbName", $dbName, PDO::PARAM_STR);
if(!$addDatabase->execute()){
	print_r($addDatabase->errorInfo());
}

Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''adasdasda'' at line 1 )

0

ponieważ nazwa bazy musi być częścią zapytania a nie parametrem (w tym przypadku typu string)

0

Taka konstrukcja dodaje nową bazę danych:

$addDatabase = $db->prepare("CREATE DATABASE IF NOT EXISTS ".$dbName."");
if(!$addDatabase->execute()){
    print_r($addDatabase->errorInfo());
}

Tylko czy będzie to odorne na działanie sql injection?

0

W jakich to okolicznościach pobierasz od użytkownika nazwę bazy danych?

0

Używam w pliku instalacyjnym mojego sklepu internetowego. Tworzę właśnie taki plik. Podaję dane do logowani: host, usera i hasło, następnie właśnie, tworzę nową bazę, wybieram ją i jeśli jest wszystko ok to tworzę strukturę.

0

Plik instalacyjny nie powinien tworzyć własnej bazy, to jest w pełni rola administratora.

0
Patryk27 napisał(a):

Plik instalacyjny nie powinien tworzyć własnej bazy, to jest w pełni rola administratora.

Dlaczego nie powinien? Staram się ograniczyć potencjalnemu użytkownikowi obsługę bazy danych do minimum.

0

Ponieważ wymaga to istnienia w bazie i wpisania do konfiguracji aplikacji użytkownika, który ma dostęp do wszystkich baz danych, co w przypadku włamania na serwer daje atakującemu dostęp do wszystkich baz na danym serwerze.

Dlatego właśnie zwyczajowo administrator tworzy ręcznie wymaganą bazę oraz od razu użytkownika przypisanego wyłącznie do niej.

0

Aa, teraz rozumirm. Czyli najlepszym sposobem będzie po prostu tworzyć to ręcznia a potem tylko się do tego podłączyć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1