Предоставить ** все ** привилегии для базы данных
Я создал базу данных, например, "mydb".
CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;
Теперь я могу войти в базу данных отовсюду, но не могу создавать таблицы.
Как предоставить все привилегии для этой базы данных и (в будущем) таблиц. Я не могу создавать таблицы в базе данных mydb. Я всегда получаю:
CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'
10 ответов
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;
Так я создаю свои привилегии "Суперпользователь" (хотя обычно я указываю хост).
ВАЖНАЯ ЗАМЕТКА
Хотя этот ответ может решить проблему доступа, WITH GRANT OPTION
создает пользователя MySQL, который может редактировать разрешения других пользователей.
Привилегия GRANT OPTION позволяет вам предоставлять другим пользователям или удалять из них те привилегии, которыми вы сами владеете.
По соображениям безопасности вы не должны использовать этот тип учетной записи пользователя для любого процесса, к которому у общественности будет доступ (например, к веб-сайту). Рекомендуется создать пользователя только с правами доступа к базе данных для этого вида использования.
Это старый вопрос, но я не думаю, что принятый ответ является безопасным. Это хорошо для создания суперпользователя, но не хорошо, если вы хотите предоставить привилегии для одной базы данных.
grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';
%
кажется, не охватывает сокет связи, что localhost
для. WITH GRANT OPTION
подходит только для суперпользователя, в противном случае это обычно угроза безопасности.
Надеюсь это поможет.
Это будет полезно для некоторых людей:
Из командной строки MySQL:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
К сожалению, на данный момент newuser не имеет права что-либо делать с базами данных. Фактически, если newuser даже попытается войти в систему (с паролем, паролем), он не сможет получить доступ к оболочке MySQL.
Поэтому первое, что нужно сделать, - предоставить пользователю доступ к информации, которая ему потребуется.
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
Звездочки в этой команде относятся к базе данных и таблице (соответственно), к которым они имеют доступ - эта конкретная команда позволяет пользователю читать, редактировать, выполнять и выполнять все задачи во всех базах данных и таблицах.
После того, как вы завершили разрешения, которые вы хотите настроить для своих новых пользователей, всегда обязательно перезагрузите все привилегии.
FLUSH PRIVILEGES;
Ваши изменения вступят в силу.
Для получения дополнительной информации: http://dev.mysql.com/doc/refman/5.6/en/grant.html
Если вас не устраивает командная строка, вы можете использовать такой клиент, как MySQL Workbench, Navicat или SQLyog.
1. Создайте базу данных
CREATE DATABASE db_name;
2. Создайте имя пользователя для базы данных db_name
GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';
3. Используйте базу данных
USE db_name;
4. Наконец, вы находитесь в базе данных db_name и затем выполняете такие команды, как операции создания, выбора и вставки.
Этот SQL предоставляет все базы данных, но только основные привилегии. Их достаточно для Drupal или Wordpress и, как ни странно, позволяет создать одну учетную запись разработчика для локальных проектов.
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,
INDEX, ALTER, CREATE TEMPORARY TABLES
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';
Работает для привилегий на схеме:)
Необязательно: после mypasswd
можете добавить WITH GRANT OPTION
Я мог бы сделать это только добавив GRANT OPTION
, без этого всегда получаю разрешение, отказано в ошибке
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;
Здравствуйте, я использовал этот код, чтобы иметь супер пользователя в MySQL
GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE,
CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP,
EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, CREATE USER, FILE,
LOCK TABLES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN,
SUPER
ON *.* TO mysql@'%'
WITH GRANT OPTION;
а потом
FLUSH PRIVILEGES;
У меня была эта проблема, когда я работал над MySQL версии 8.0.21.
Я хотел предоставить разрешения для базы данных с именем
my_app_db
к
root
пользователь, работающий на
localhost
хост.
Но когда я запускаю команду:
use my_app_db;
GRANT ALL PRIVILEGES ON my_app_db.* TO 'root'@'localhost';
Я получаю сообщение об ошибке:
ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'my_app_db.* TO 'root'@'localhost'' в строке 1>
Вот как я исправил:
Войдите в свою консоль MySQL. Ты можешь измениться
root
к пользователю вы хотите войти в систему с:
mysql -u root -p
Введите свой пароль root mysql
Затем перечислите всех пользователей и их хост на сервере MySQL. В отличие от PostgreSQL, это часто хранится в
mysql
база данных. Итак, нам нужно выбрать
mysql
сначала база данных:
use mysql;
SELECT user, host FROM user;
Примечание: если вы не запустите
use mysql
вы получаете
no database selected
ошибка.
Это должно дать вам такой вывод:
+------------------+-----------+
| user | host |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)
Затем на основе информации, полученной из списка, предоставьте права пользователю, которого вы хотите. Нам нужно будет сначала выбрать базу данных, прежде чем предоставить ей разрешение. Для меня я использую
root
пользователь, который работает на
localhost
хост:
use my_app_db;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';
Примечание.
GRANT ALL PRIVILEGES ON database_name.* TO 'root'@'localhost';
команда может не работать для современных версий MySQL. Большинство современных версий MyQL заменяют
database_name
с участием
*
в команде предоставления привилегий после выбора базы данных, которую вы хотите использовать.
Затем вы можете выйти из консоли MySQL:
exit
Вот и все.
надеюсь, это поможет
Доступ только с удаленного сервера к базе данных mydb
GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';
Для доступа с удаленного сервера ко всем базам данных.
GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';
Чтобы предоставить все привилегии в базе данных: mydb
пользователю: myuser
просто выполните:
GRANT ALL ON mydb.* TO 'myuser'@'localhost';
или же:
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
PRIVILEGES
Ключевое слово не обязательно.
Также я не знаю, почему другие ответы предполагают, что IDENTIFIED BY 'password'
поставить на конец команды. Я считаю, что это не требуется.