2016-08-29 3 views
-2

Мне нужно подключиться к удаленному серверу mysql с помощью php-страницы;
само соединение работает как шарм, но в тот момент я пытаюсь создать базу данных, так как она еще не существует, я получаю эту ошибку:PDO доступ запрещен для пользователя 'username' @ '%'

exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1044 Access denied for user '[myusername]'@'%' to database '[mydbname]'' in [myurl]/php/db_manager.php:76

Как вы можете видеть, у меня есть доступ отказано " %».
Теперь: что такое «%»?

Кроме того:

Основной файл

private function createDB() { 
if($this->cm->update("CREATE DATABASE IF NOT EXISTS " . $this->dbName . " DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;", array())) { // Error here 
    $this->cm->update("USE " . $this->dbName . ";", array()); 
    return true; 
} 
return false; 
} 

$ this-> см является экземпляром правильно инициализирован PDO обертке

PDO обертка файл

public function update($query, $values) 
try{ 
     $sql = $this->db->prepare($query); 
     $sql->execute($values); 
     return true; 
    } catch(PDOException $e) { 
     $this->l->error($e); // <- Error here 
     return false; 
    } 
} 

$ это -> db - правильно созданный, полностью связанный PDO-объект;
Эти строки используются для подключения

$this->db = new PDO($connection, $this->db_user, $this->db_password, array(PDO::ATTR_PERSISTENT => true)); 
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

У меня есть полный доступ на сервере Mysql

+0

Коренные привилегии для пользователя Mysql не предоставляются. То почему сервер SQL возвращает эту ошибку. –

+0

У меня их есть, так как если я подключусь вручную к серверу с моими регистрационными данными, я могу создавать/редактировать/удалять базы данных без каких-либо проблем. – Vkfan

+1

Посмотрите [здесь] (http://stackoverflow.com/questions/6239131/how -to-grant-remote-access-permissions-to-mysql-server-for-user) –

ответ

2

Access denied for user '[myusername]'@'%' to database '[mydbname]'

MySQL разрешение являются зернистые: не все пользователи имеют полный доступ ко всем базам данных на сервере.

Вам необходимо войти в систему с администратором и grant the appropriate permissions. Например, чтобы предоставить полный доступ:

GRANT ALL 
ON mydbname.* 
TO 'myusername'@'%' 
WITH GRANT OPTION; 
FLUSH PRIVILEGES; 

... или вы можете быть более избирательным по своему вкусу:

GRANT SELECT, ALTER, CREATE, DELETE, DROP, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE 
ON mydbname.* 
TO 'myusername'@'%'; 
FLUSH PRIVILEGES; 

Privileges Supported by MySQL Пожалуйста, проверьте для полного списка.

% - это подстановочный знак, подробно объясненный в Account Names and Passwords, что означает «соединение с любым хостом».

Смежные вопросы