Я создал базу данных, например "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'
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
подходит только для суперпользователя, в противном случае это обычно представляет собой риск безопасности.
Надеюсь, что это поможет.
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
flush privileges
не нужны при использовании команд grant
. x4
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 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;
flush privileges
не нужны при использовании команд grant
. x4
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';
Работает для привилегий по схеме:)
Дополнительно: после mypasswd
вы можете добавить WITH GRANT OPTION
Для доступа только с удаленного сервера на базу данных mydb
GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';
Для доступа к удаленному серверу ко всем базам данных.
GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';
FLUSH PRIVILEGES
?