Предоставить ** все ** привилегии для базы данных - PullRequest
580 голосов
/ 16 февраля 2011

Я создал базу данных, например '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 ]

864 голосов
/ 16 февраля 2011
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

Так я создаю свои привилегии «Суперпользователь» (хотя обычно я указываю хост).

ВАЖНОЕ ПРИМЕЧАНИЕ

Хотя этот ответ может решить проблему доступа, WITH GRANT OPTION создает пользователя MySQL, который может редактировать разрешения других пользователей .

Привилегия GRANT OPTION позволяет вам предоставлять другим пользователям или удалять из других пользователей те привилегии, которыми вы сами обладаете.

В целях безопасности вы не должны использовать этот тип учетной записи пользователя для любого процесса, к которому у общественности будет доступ (например, к веб-сайту). Для такого использования рекомендуется создать пользователя с правами доступа только к базе данных .

504 голосов
/ 29 марта 2013

Это старый вопрос, но я не думаю, что принятый ответ является безопасным.Это хорошо для создания суперпользователя, но не очень хорошо, если вы хотите предоставить привилегии для одной базы данных.

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 подходит только для суперпользователя, в противном случае это обычно угроза безопасности.

Надеюсь, это поможет.

110 голосов
/ 19 ноября 2013

Это будет полезно для некоторых людей:

Из командной строки 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

28 голосов
/ 20 марта 2016

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 и затем выполняете такие команды, как операции создания, выбора и вставки.

20 голосов
/ 09 декабря 2014

Этот SQL предоставляет все базы данных, но только основные привилегии. Их достаточно для Drupal или Wordpress и, как ни странно, позволяет создать одну учетную запись разработчика для локальных проектов.

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
15 голосов
/ 07 июня 2015
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

Работает для привилегий на схеме :)

Необязательно: после mypasswd вы можете добавить WITH GRANT OPTION

12 голосов
/ 25 октября 2015

Я мог бы заставить его работать только добавив GRANT OPTION, без этого всегда получаю ошибку "Отказано в разрешении"

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;
12 голосов
/ 07 октября 2014

Здравствуйте, я использовал этот код, чтобы иметь супер пользователя в 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;
5 голосов
/ 25 июня 2015

Для доступа с удаленного сервера только к базе данных mydb

GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';

Для доступа с удаленного сервера ко всем базам данных.

GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';
1 голос
/ 29 марта 2018

Чтобы предоставить все привилегии в базе данных: mydb пользователю: myuser, просто выполните:

GRANT ALL ON mydb.* TO 'myuser'@'localhost';

или

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';

Ключевое слово PRIVILEGES необязательно.

Также я не знаю, почему другие ответы предполагают, что IDENTIFIED BY 'password' ставится в конце команды. Я считаю, что это не требуется.

...