Предоставяне на **всички** привилегии на базата данни

Създадох база данни, например '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;

Така създавам своите "Супер потребител" привилегии (въпреки че обикновено посочвам хост).

IMPORTANT NOTE

Въпреки че този отговор може да реши проблема с достъпа, WITH GRANT OPTION създава MySQL потребител, който може да редактира правата на други потребители.

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

От съображения за сигурност не бива да използвате този тип потребителски акаунт за процеси, до които ще има публичен достъп (напр. уебсайт). Препоръчително е да създадете потребител с права само за база данни за този вид употреба.

Коментари (14)

Това е стар въпрос, но не мисля, че приетият отговор е безопасен. Той'е добър за създаване на супер потребител, но не е добър, ако искате да дадете привилегии на една база данни.

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

Надявам се това да помогне.

Коментари (7)

Това ще бъде полезно за някои хора:

От командния ред на MySQL:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

За съжаление, в този момент newuser няма права да прави каквото и да било с базите данни. Всъщност, ако newuser дори се опита да влезе в системата (с паролата, password), той няма да може да достигне до шела на 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)