Как создать базу данных, пользователя и дать ему права в MySQL

Мы созда­дим базу дан­ных test_db с поль­зо­ва­те­лем john и паро­лем pass.

Thank you for reading this post, don't forget to subscribe!

Поль­зо­ва­тель полу­чит все пра­ва на эту базу дан­ных и будет иметь воз­мож­ность под­клю­чать­ся толь­ко локально.

Шаг 1 : Под­клю­ча­ем­ся к кон­со­ли MySQL под рутом.

$ mysql -u root -p

Шаг 2 : Созда­ем базу дан­ных test_db.

mysql> CREATE DATABASE test_db;

Шаг 3 : Добав­ля­ем поль­зо­ва­те­ля john для новой базы дан­ных. Назна­ча­ем ему пароль pass и даем доступ к базе толь­ко с само­го сер­ве­ра (localhost).

mysql> GRANT ALL PRIVILEGES ON test_db.* TO john@localhost IDENTIFIED BY 'pass';

Гото­во!

Теперь мы можем под­клю­чать­ся к MySQL сер­ве­ру под поль­зо­ва­те­лем john.

$ mysql -u john -p

Для отоб­ра­же­ния спис­ка баз дан­ных, выпол­ни­те сле­ду­ю­щую команду :

mysql> SHOW DATABASES;

Немного подробнее о создании пользователя и назначении прав:

Созда­ние поль­зо­ва­те­ля через MySQL shell:

Имей­те в виду сей­час мы про­сто созда­дим ново­го поль­зо­ва­те­ля без ника­ких привилегии.

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

Поль­зо­ва­тель был создан, но у него нет при­ви­ле­гии и от его име­ни ниче­го нель­зя выпол­нить. Точ­нее даже авто­ри­зо­вать­ся не полу­чит­ся. Все из-за отсут­ствия привилегии.

Дать привилегию для нового пользователя MySQL.

OK, даем при­ви­ле­гию для создан­но­го пользователя:

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

Эта коман­да даст ново­му поль­зо­ва­те­лю воз­мож­ность чте­ния, редак­ти­ро­ва­ния, добав­ле­ния и выпол­не­ния команд во всех базах дан­ных и таблицах.

Теперь нуж­но обно­вить все привилегии.

FLUSH PRIVILEGES;

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

Как дать пользователю права на определенную базу/таблицу

Отве­том на это может послу­жить сле­ду­ю­щее пояс­не­ние кода, выпол­нен­но­го чуть выше:

GRANT [тип привилегии] ON [название БД].[название таблицы] TO '[пользователь]'@'localhost';

При­ве­дем еще один при­мер. Допу­стим нуж­но дать пра­ва юзе­ру 'newuser' толь­ко к базе дан­ных 'wordpress':

GRANT ALL PRIVILEGES ON wordpress.* TO 'newuser'@'localhost';

Теперь думаю ста­ло понят­но поче­му в при­ме­ре, где дали доступ ко-всем базам дан­ных и таб­ли­цам в них был постав­лен символ *

Привилегии в MySQL

Во всех преды­ду­щих при­ме­рах юзе­ру предо­став­ля­лись все при­ви­ле­гии, но ино­гда может воз­ник­нуть ситу­а­ция, когда нуж­но дать доступ толь­ко на чте­ние, напри­мер. Сле­ду­ю­щая свод­ка при­ви­ле­гии помо­жет вам в таких ситуациях:

  • ALL PRIVILEGES - дает поль­зо­ва­те­лю все права
  • CREATE - поз­во­ля­ет поль­зо­ва­те­лю пра­во созда­вать новые таб­ли­цы или базы данных
  • DROP - поз­во­ля­ет уда­лять таб­ли­цы или базы данных
  • DELETE - поз­во­ля­ет уда­лять инфор­ма­цию в таблицах
  • INSERT - поз­во­ля­ет встав­лять или запи­сы­вать новую инфор­ма­цию в таблицы
  • SELECT - поз­во­ля­ет выпол­нить коман­ду SELECT, что поз­во­лит читать инфор­ма­цию с таблиц
  • UPDATE - эта при­ви­ле­гия поз­во­лит обнов­лять инфор­ма­цию в таблицах
  • GRANT OPTION - поз­во­ля­ет давать или уда­лять при­ви­ле­гии у дру­гих пользователей

Как удалить привилегию

Уже ясно как дают­ся при­ви­ле­гии поль­зо­ва­те­лю в MySQL, а как насчет удаления?

REVOKE [тип привилегии] ON [название БД].[название таблицы] TO '[username]'@'localhost';

Как види­те син­так­сис прак­ти­че­ски иден­ти­чен коман­де GRANT.

Как удалить пользователя в MySQL

Пред­ста­вим, что ново­го юзе­ра нуж­но уда­лить. Син­так­сис коман­ды уда­ле­ния еще про­ще и короче:

DROP USER 'newuser'@'localhost';

После того, как закон­чи­ли со всем нуж­но вый­ти с MySQL shell, выпол­нив команду

quit