Интересный вопрос: можно ли, минуя работу с терминалом, работать с базой данных MySQL phpMyAdmin исключительно из PHP напрямую? Например, рассмотрим такой код: PHP: <?php $dbServer = 'localhost'; $charst = 'utf8'; $dsn = "mysql:host=".$dbServer.";charset=".$charst; $pdoVar = new PDO($dsn); /* Установим аттрибуты, позволяющие видеть ошибки подключения и создания в БД */ $pdoVar->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); /* Создадим пользователя - администратора БД */ $pdoVar->exec("CREATE USER IF NOT EXISTS administrator@localhost IDENTIFIED BY 'password'"); $pdoVar = null; При запуске выдаёт ошибку на команде создания пользователя: SQLSTATE[42000]: Syntax error or access violation: 1227 Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation То есть он хочет, чтобы для создания пользователя я имел привилегии этого пользователя создавать. А как получить привилегии в PHP, не имея пользователя в phpMyAdmin? Возможно ли это? В терминале - нет проблем! В терминале я ввожу: Код (Text): mysql> CREATE USER IF NOT EXISTS administrator@localhost IDENTIFIED BY 'password'; И получаю: Query OK, 0 rows affected (0.00 sec) А без терминала?
@MouseZver, то есть вы имеете в виду, что надо подключаться к БД с использованием того пользователя, который там уже должен быть создан, и по-другому никак не получится, я верно понимаю?
Да, я так понимаю, надо сначала авторизоваться в Бд, чтобы иметь привелегии "авторизованного" пользователя
Тогда так (admin1 существует с паролем "12345"): PHP: $dbAdmin = 'admin1'; $adminPassword = '12345'; $dbServer = 'localhost'; $charst = 'utf8'; $dsn = "mysql:host=".$dbServer.";charset=".$charst; $pdoVar = new PDO($dsn, $dbAdmin, $adminPassword); /* Установим аттрибуты, позволяющие видеть ошибки подключения и создания в БД */ $pdoVar->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Берём привилегии $sql = "GRANT ALL PRIVILEGES ON *.* TO admin1@localhost"; $pdoVar->exec($sql); И получаем ошибку: SQLSTATE[28000]: Invalid authorization specification: 1045 Access denied for user 'admin1'@'localhost' (using password: YES) in PDO->exec('GRANT ALL PRIVI...') Не хочет он давать привилегии. Почему?
@ADSoft, в общем замкнутый круг: чтобы получить привилегии, надо войти под пользователем, имеющем привилегии! М-да... Ну, ладно. Значит в этом вопросе РНР несовершенен - и без терминала никуда.
Ура! Заработало! Если вдруг кому-нибудь тоже интересен этот вопрос, то подключаться к базе в PHP надо как пользователь root, потому что в терминале, запуская сокет mysql, мы тоже подключаемся как root (через sudo). Следовательно, в терминале поэтому всё работает. А в РНР мы создаём какого-то другого пользователя (зачем?), которому ещё надо привилегии дать, в то время, как в phpMyAdmin (по умолчанию?) есть пользователь root, уже имеющий все привилегии! И у него ещё, кстати, пароль не установлен, поэтому переменную $adminPassword можно не использовать. И вот если подключиться с пользователем root к phpMyAdmin в программе на РНР, тогда всё сразу работает без терминала! Вот оно как получилось... Век живи - век учись, как говорится!
Чтобы потом не было мучительно больно! --- Добавлено --- Да и создаём пользователя не в PHP, а в СУБД
phpMyAdmin это php-скрипт с открытым исходным кодом, и всё что он делает, делается обычными средствами php.
Вы когда в терминал заходите, вы заходите суперпользователем root, у которого все приведении есть... Разделение нужно для: - разделения пользователей по базам данных, чтоб один не мог входить во все - ограничение прав пользователя, ибо в большинстве веб приложениям хватает прав на insert/update/delete/ createт а привелегий там иного