Это глючная СУБД ...?
Это не ошибка, это особенность!
(Я не могу сказать вам, как долго я ждал, чтобы сказать это без иронии.)
Ваши права показывают, что ваш пользователь phpmyadmin имеет права только для базы данных phpmyadmin.
Привилегия USAGE ON *.*
означает, что вы можете подключиться к серверу MySQL, но это не значит, что у вас есть какие-либо привилегии для любой из баз данных на этом сервере.
Привилегия ALL PRIVILEGES ON
phpmyadmin .*
означает, что у вас есть привилегии для всех таблиц базы данных phpmyadmin. У вас нет привилегий в любой другой базе данных. Поэтому, когда вы пытаетесь USE preciousMetals;
, он немедленно отклоняет запрос.
Тот факт, что у вас нет прав доступа к какому-либо конкретному ресурсу, не является ошибкой в программном обеспечении.
По аналогии, это похоже на Linux, если вы попытаетесь cd <directory>
, если у вас нет прав для этого. Вы бы - правильно - получили ошибку, если бы сделали это.
$ cd secret_directory
-bash: cd: secret_directory: Permission denied
Вам необходимо предоставить пользователю phpmyadmin более широкие привилегии. У вас есть доступ к root
учетной записи MySQL? Обычно это тот, который имеет все привилегии для всех баз данных и возможность предоставлять привилегии другим пользователям MySQL.
Что касается вашего второго вопроса, существует по крайней мере еще один продукт баз данных SQL, который вообще не обеспечивает GRANT / REVOKE или привилегии: SQLite . Пока у вас есть доступ на уровне Linux для открытия файла базы данных, у вас есть свободный доступ ко всем таблицам в нем. Там не реализована система привилегий доступа. Но SQLite не совсем альтернатива MySQL. Нет поддержки одновременного многопользовательского доступа, сетевых подключений или ряда других функций, которые вам, вероятно, необходимы.
Для MySQL вы можете запустить его в режиме без применения паролей или привилегий.
- Редактировать файл параметров MySQL (обычно
/etc/my.cnf
в системах Linux).
Добавить опцию, чтобы отключить принудительное применение. Это должно быть в любом месте ниже группы параметров [mysqld]
в файле параметров.
[mysqld]
skip_grant_tables
Перезапустите процесс mysqld. Это делается с помощью команды оболочки от имени пользователя root:
$ sudo service mysql restart
После этого вам не нужно будет вводить пароль, а права SQL не применяются.
Это явно не тот способ, которым вы бы использовали MySQL для живого приложения, потому что это ставит под угрозу всю безопасность. Но если вы боретесь с привилегиями и хотите просто изучить SQL на своем локальном экземпляре, продолжайте.