Предоставить ** все ** привилегии для базы данных

492

Я создал базу данных, например "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
    Что вы получаете, когда ПОКАЗЫВАЕТЕ ГРАНТЫ ДЛЯ CURRENT_USER;
  • 5
    Вы пытались запустить FLUSH PRIVILEGES ?
Показать ещё 4 комментария
Теги:
mariadb
mysql-error-1142

9 ответов

785
Лучший ответ
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

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

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

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

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

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

  • 34
    @ Ромэн, вы на самом деле не приносите сюда много информации - я не называю своих пользователей myuser - спрашивающий просто использовал имя пользователя в качестве примера - я использовал то же имя пользователя в качестве примера для согласованности.
  • 22
    Справедливо. Но нужно также подумать о других людях, возможно, новичках, которые могли бы прийти, чтобы прочитать этот вопрос позже. Разве это не так важно?
Показать ещё 11 комментариев
448

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

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

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

  • 19
    +1 за не включение WITH GRANT OPTION и таргетинг на указанную базу данных вместо всех ( * ).
  • 0
    @IanBussieres грамматика «%, кажется, не охватывает сокетные коммуникации, для которых предназначен localhost», неясно. Что это на самом деле означает?
Показать ещё 5 комментариев
84

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

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

  • 4
    flush privileges не нужны при использовании команд grant . x4
Показать ещё 2 комментария
21

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

  • 0
    Сегодня это предупредило меня: «Использование оператора GRANT для изменения свойств существующего пользователя, кроме привилегий, устарело и будет удалено в следующем выпуске. Используйте оператор ALTER USER для этой операции». Так я должен понимать, что я должен создать пользователя, а затем предоставить привилегии, сейчас?
18

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

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
    INDEX, ALTER, CREATE TEMPORARY TABLES 
ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
10

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

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

Здравствуйте, я использовал этот код для суперпользователя в 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;
  • 11
    flush privileges не нужны при использовании команд grant . x4
Показать ещё 1 комментарий
8
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';

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

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

4

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню