Mysql управление пользователями. Работа в командной строке MySQL

Характерная особенность MySQL - собственная безопасность, рассчитывающая на внешнюю защиту. Как современная, полнофункциональная и эффективная система управления базами данных, MySQL имеет собственные инструменты для управления пользователями и их доступом к ресурсам, которые контролирует.

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

В обычном режиме работы хостинга этого вполне достаточно. Непредвиденные ситуации, хакерские атаки и прочие неприятности - вопрос внешнего системного администрирования и службы безопасности. Такая концепция стала традиционной и практически не обсуждается.

Инсталляция сервера MySQL и пользователь root

В какой бы операционной среде ни была установлена система управления базами данных, в ней всегда есть хотя бы один пользователь: root. Установить MySQL, создать пользователя со всеми правами root - без этого работа с сервером невозможна. Привилегий этого пользователя достаточно, чтобы:

  • создавать и администрировать новых пользователей;
  • создавать базы данных и управлять ими.

Принципиально возможно существование в MySQL "беспарольных" пользователей, но делать это недопустимо.

Обычная практика:

  • сервер установлен на собственном компьютере, на котором может быть поставлен хостинг (локальный вариант);
  • сервер стоит на общедоступном хостинге в интернете.

В первом случае возможна работа с сервером из командной строки и использование phpMyAdmin, во втором случае только phpMyAdmin или ему подобное средство, но бывает доступна командная строка через удалённый SSH-доступ.

Собственные инструменты администрирования

Ощущение родственных отношений с семейством юниксоидов и с прошлым от серверов Apache - характерная черта MySQL: создать пользователя - это командная строка со странным синтаксисом. Для специалистов, работающих с Linux и ему подобными системами, это настолько же привычно, насколько дико выглядит в глазах пользователей Windows, которые никогда «не выходили в реальную жизнь».

Создание пользователя начинается с запуска командной строки сервера. В среде Windows это делается следующим образом.

Сначала (1) нужно запустить командную строку от имени администратора, затем перейти в папку, где находится MySQL (2), затем запустить сам сервер (3):

  • mysql -u... -p

здесь "-u..." и "-p" - ключи, которые указывают на имя "..." = root (или другое имя) и его пароль. В принципе пользователь может быть и не root, но такой, у которого есть "рутовые" (административные) права.

Существенно : сервер на самом деле работает всегда, здесь mysql -u... -p - это команда для доступа к серверу, а не его запуск.

В среде Linux и ему подобных систем такая команда - это "родное" действие и, как правило, определяется просто запуском mysqld в нужном месте (по нужному пути), это следует уточнить у администратора. Здесь обычно другое имя: не mysql, а mysqld. Также здесь не всегда это действие доступно всем пользователям (операционной системы, а не сервера MySQL). В отличие от Windows, в линуксоидах порядок и безопасность - это естественное и не обсуждаемое требование, к которому всегда цивилизованное отношение.

В любом случае, как только mysql запустился, он сообщит об этом приглашением (4):

  • mysql>

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

Примечание. При установке в среде Windows всё: Apache, MySQL, можно ставить по default-путям, но рекомендуется использовать более компактные и близкие места размещения этих важных инструментов:

  • c:\SCiA\Apache;
  • c:\SCiA\PHP;
  • c:\SCiA\MySQL;
  • c:\SCiB\localhost\www\phpMyAdmin\;
  • c:\SCiB\site1\www\;
  • c:\SCiB\site2\www\;
  • c:\SCiB\siteN\www\.

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

Работа в командной строке MySQL

Как только сервер ответил и предоставил свою командную строку, можно создавать пользователей и назначать им права.

В данном примере командой create user был создан пользователь Petrov с паролем 123DFG. Если при вводе команды допускается ошибка, сервер предлагает её исправить, но лучше при работе в командной строке никогда ошибок не допускать !

Следующая команда grant all privileges дает все права на всё. Команду flush можно не давать, но она "выталкивает" буфер команд, то есть закрепляет их исполнение.

MySQL: создать пользователя и дать права на базу

Команда, использованная в примере:

  • GRANT ALL PRIVILEGES ON *.* TO "Petrov"@"localhost";

на самом деле открывает доступ для пользователя Petrov для всех баз данных (первая звёздочка) ко всем таблицам (вторая звёздочка).

По общему правилу MySQL, создать пользователя -это:

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

Допускаются следующие привилегии:

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

С практической точки зрения, в MySQL "создать пользователя" подразумевает три варианта прав:

  • все права на все базы и всех пользователей;
  • чтение и запись;
  • только чтение.

Остальные варианты предоставления прав мало когда требуются. В среде Linux-систем оснований для "правовой" свободы (и необходимости) значительно больше, но там и возможностей гораздо больше, чем в Windows.

Операция, обратная MySQL "создать пользователя", - drop.

  • drop user "Petrov"@"localhost";

После исполнения этой команды пользователя Petrov не станет и его привилегии пропадут. Для изменения привилегий используется команда:

  • REVOKE [привилегия] ON [БД].[Таблица] TO "[пользователь]"@"localhost";

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

Использование phpMyAdmin

Существует множество реализаций этого замечательного инструмента. В зависимости от используемой версии Apache, PHP и MySQL часто приходится долго искать нужную версию этого продукта, но как только phpMyAdmin успешно установлен, у пользователя появляется много удобных возможностей и комфортный интерфейс.

Посредством phpMyAdmin можно указать MySQL создать пользователя для любого хоста и управлять действующими пользователями чуть ли не хирургическими методами.

phpMyAdmin - не единственное инструментальное средство с комфортным, интуитивно понятным и многофункциональным интерфейсом, но он является самым популярным инструментом для администрирования серверов MySQL.

О командной строке и безопасности

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

Версии программных продуктов так быстро развиваются, что разработчики просто не успевают совмещать возможности, например, PHP и MySQL, MySQL и phpMyAdmin. Если вдруг происходит какая-либо оказия, командная строка всегда спасет ситуацию.

Следует также никогда не забывать: администрирование MySQL касается только доступа к её базам данных и через её функционал. Файлы баз данных открыты для доступа вне MySQL. Внешняя защита MySQL и контролируемых ею ресурсов - реальная и важная необходимость.

От автора: я бы вам советовал быть внимательнее с привилегиями. Один мой знакомый, который обладает в своей квартире правами администратора, наделил жену «привилегией» ограничения доступа к холодильнику. В итоге уже второй месяц сидит на диете и питается только овощами. Поэтому даже перед тем, как добавить пользователя в MySQL, хорошо подумайте!

Тех, кому доверяем!

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

Это можно делать как через командную строку, так и через программные оболочки. Для начала рассмотрим легкий вариант. Воспользуемся для добавления нового пользователя программой phpMyAdmin. Но для начала давайте сделаем маленький экскурс в систему учетных записей, реализованную в СУБД.

Выше всех в иерархии стоит пользователь с учетной записью root. Изначально эта учетка поставляется с пустым значением пароля. Администратор (root) может в MySQL добавить пользователя, наделить его определенными правами, а также лишить привилегий.

Система привилегий реализована не только на сервере СУБД, но и на уровне баз. Можно наделить пользователя доступом к определенной БД, а также разрешить ему выполнять только определенные операции с «хранилищем». Например, запретить вставлять, удалять и обновлять данные, но разрешить делать выборки из таблиц. Но все это легче познается в деле, поэтому приступим.

Добавление учеток через phpMyAdmin

Откройте приложение, вверху перейдите по вкладке «Пользователи». После этого отобразится таблица «Обзор учетных записей». В ней указаны все учетные записи, которые существуют на экземпляре сервера, а также краткая информация об их привилегиях.

Чтобы добавить новую учетную запись, нужно нажать на ссылку «Добавить пользователя», которая расположена ниже таблицы. После чего система приложения выведет специальное диалоговое окно «Добавить пользователя».

В самом верхнем разделе («Информация учетной записи») следует задать имя нового пользователя, установить и подтвердить пароль. Также можно получить случайное значение пароля, которое будет автоматически подставлено в поля. Для этого нужно нажать кнопку «Генерировать».

Если прокрутить немного вниз, то станут доступными для редактирования глобальные привилегии, которыми можно наделить создаваемого пользователя. На снимке видно, что все привилегии разделены на несколько категорий: «Данные», «Структура» и «Администрирование». Перед тем, как добавить пользователя в MySQL ,ознакомьтесь с ними и отметьте нужные.

Для создания учетки нажмите внизу диалогового окна кнопку «Добавить пользователя». Теперь посмотрим на результат наших действий. Снова вернитесь к таблице «Обзор учетных записей» и ознакомьтесь с ее содержанием. Как видите, на сервере была создана новая учетка с заданным нами именем.

Добавляем нового пользователя БД

Через phpMyAdmin можно заниматься администрированием ролей не только глобально, но и на уровне отдельных БД. Чтобы в MySQL добавить пользователя к базе, в списке слева выберите нужную. Затем перейдите через пункт меню «Привилегии», где в таблице отобразятся все пользователи, которые имеют доступ к этой базе. Чтобы создать новую учетку БД, нажмите на ссылку «Добавить пользователя», которая расположена немного ниже (под таблицей).

После чего появится знакомый нам уже диалог «Добавить пользователя». Заполняем все поля, как и в предыдущем примере. Наделим leha2 глобальными привилегиями на базу world – пусть что хочет, то и делает с этим миром . И нажимаем внизу «Добавить пользователя».

Контроль возможностей созданных юзеров

Разберемся, что может созданным нами последний «Леха». Переходим в командную строку. Входим на сервер и выполним выборку из базы, для которой в MySQL добавили пользователя: Z:\usr\local\mysql-5.5\bin\mysql.exe -u leha2 -p123

Теперь попробуем под этой учеткой (leha2) попасть в другую базу, и тоже сделать из нее выборку. Например, вот из этой БД:

SELECT * FROM `db1`.`animal`;

SELECT * FROM ` db1 ` . ` animal ` ;

Но в ответ получаем от MySQL «в тык», поскольку используемая учетка обладает правами только на базу world.

Но это еще не все возможности администрирования привилегий. Можно в MySQL добавить пользователя с правами только на просмотр. Для этого редактируется таблица прав существующей учетной записи или создается новая.

Снова заходим на вкладку «Привилегии». В таблице пользователей возле нужной учетки жмем «Редактирование привилегий». Затем в появившемся окне диалога выключаем все привилегии кроме select. Таким образом пользователь сможет лишь просматривать таблицы или делать из них выборки с помощью SQL-команды SELECT.

Создание юзера через консоль

Давайте научимся, как добавить пользователя в MySQL через консоль. Для этого нам нужно зайти на сервер БД с правами администратора. Затем с помощью команды CREATE создать нового юзера и задать ему пароль:

CREATE USER "verter"@"localhost" IDENTIFIED BY "12345";

CREATE USER "verter" @ "localhost" IDENTIFIED BY "12345" ;

Теперь снова зайдем в программную оболочку и глянем, появился ли созданный нами «робот» в таблице «Обзор учетных записей».

Как видите, verter стал пользователем нашего сервера MySQL. Но он вообще не имеет никаких прав (как и любой робот). Так неэтично по отношению к братьям нашим «железным», поэтому снабдим его всеми привилегиями на любую из баз. Например, world.

При подключении к серверу MySQL пользователь указывает имя и пароль, а сервер проверяет, имеет ли клиент право получить доступ к серверу, и в случае успеха наделяет пользователя соответствующими привилегиями. Данные о привилегиях пользователей хранятся в системной базе mysql.

Проверка пользователя осуществляется по трем полям таблицы user (host, user и password) базы mysql. Сервер устанавливает соединение только в том случае, если находит в таблице user запись, в которой имя пользователя и пароль совпадают с введенными значениями.

Посмотреть, в каком виде хранятся пароли в таблице user можно при помощи следующих команд:

mysql>USE mysql

mysql>SELECT password FROM user;

Ознакомиться со всеми таблицами базы mysql можно подав команду

mysql>show tables;

После установления соединения сервер начинает сеанс работы с пользователем. Для каждого поступающего запроса сервер проверяет, имеется ли у пользователя достаточно привилегий для выполнения запроса. Информация о привилегиях находится в таблицах -- user, db, host, tables_priv или columns_priv.

Список привилегий представлен ниже:

Сервер MySQL считывает содержимое этих таблиц во время запуска и в случаях, когда изменения в привилегиях вступают в силу.

Привилегии SELECT, INSERT, UPDATE И DELETE позволяют выполнять операции над строками таблиц баз данных. Привилегия index обеспечивает создание или уничтожение индексов. Привилегия alter позволяет использовать команду alter table. Привилегии create и drop позволяют создавать новые или уничтожать существующие базы данных и таблицы. Привилегия GRANT gram позволяет вам предоставлять другим пользователям привилегии, которыми обладаете вы сами.

Остальные привилегии используются для администрирования SQL - сервера.. Команда shutdown завершает работу сервера.

При запуске сервера MySQL все сведения о привилегиях пользователей загружаются в память, и с этого момента привилегии вступают в силу.

Команды grant и revoke позволяют системным администраторам создавать пользователей MySQL а также предоставлять права пользователям или лишать их прав на четырех уровнях.

· Глобальный уровень.

Глобальные привилегии применяются ко всем базам данных на указанном сервере. Эти привилегии хранятся в таблице mysql.user.

· Уровень базы данных.

Привилегии базы данных применяются ко всем таблицам указанной базы данных. Эти привилегии хранятся в таблицах mysql .db и mysql .host.

· Уровень таблицы.

Привилегии таблицы применяются ко всем столбцам указанной таблицы.

Эти привилегии хранятся в таблице mysql. tables_priv.

· Уровень столбца.

Привилегии столбца применяются к отдельным столбцам указанной таблицы. Эти привилегии хранятся в таблице mysql .columns_priv.

Команда grant позволяет добавлять новых пользователей сервера:

mysql> GRANT SELECT, INSERT ON taxi.* TO Mike@localhost

IDENTIFIED BY "secret";

Эта команда дает права insert и select на базу taxi (на все таблицы - это задается символом звездочки) пользователю Mike, который подключается локально (localhost), причем, при подключении к серверу пользователь должен указать пароль "secret". Пароль хранится на сервере в зашифрованном виде.

mysql> GRANT ALL PRIVILEGES ON *.* TO Ann@"%"

->IDENTIFIED BY "some_pass" WITH GRANT OPTION;

Здесь Anna получает все права (all privileges) на все таблицы всех баз сервера (* . *), причем подключаться она может как локально, так и удаленно через сеть (это указано символом % после Anna@). Вдобавок Anna может передавать свои права другим пользователям (with grant option), т. е. сама может подавать команду grant и создавать новых пользователей системы.

mysql> GRANT USAGE ON *.* TO dummy@localhost

IDENTIFIED BY `password";

Пользователь dummy, созданный в этом примере, может подсоединяться к серверу, но только с локального компьютера. Привилегия USAGE означает, что у пользователя отсутствуют все другие привилегии. Такое может потребоваться, когда человек принят на работу, но обязанности его еще не определены. Предполагается, что относящиеся к базам данных привилегии будут назначены позже. Не удастся создать пользователя с пустым паролем -- система не позволяет это из соображений безопасности.

Команда REVOKE позволяет администратору лишать пользователей прав:

REVOKE SELECT (use_on) ON taxi.timetable FROM Mike @ localhost;

Пользователь Mike не может просматривать значения поля use_on в таблице timetable.

Команда set может устанавливать различные опции, влияющие на работу сервера или клиента. Пароль для пользователя root также можно задать с помощью этой команды:

mysql> SET PASSWORD FOR root@localhost=PASSWORD("new_password") ;

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

mysql> USE mysql;

Mysql> UPDATE user SET Password=PASSWORD("new_password")

-> WHERE user="root";

После этого следует подать команду, заставляющую сервер перечитать таблицы привилегий -- тогда они вступят в силу:

mysql> FLUSH PRIVILEGES;

Если пароль задается при помощи оператора grant. . .identified by, нет необходимости использовать функцию password (). Эта команда самостоятельно производит шифрацию пароля, поэтому пароль следует указывать в простом текстовом виде, например, таким образом:

mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY "biscuit";

Изменения, которые вносятся в таблицы назначения привилегий при помощи команд grant, revoke или set password, учитываются сервером сразу после выполнения этих инструкций.

Если вы интересуетесь web-разработкой или программной разработкой в целом, вы наверняка слышали о базах данных. Базы данных – это виртуальные хранилища для данных, необходимых для создания web-приложений. Они используются для хранения сведений о пользователе, таких как: имя пользователя, пароль, email-адрес и другие. В целом, любой вид информации, который вам может понадобиться в дальнейшем может храниться в базе данных.

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

MySQL – одна из таких систем управления базами данных. Это одна из самых известных систем, благодаря своей лёгкости в использовании и поддержке сообщества. К слову, её распространённость привлекла даже такие крупные компании как, Facebook и Twitter, которые в некоторой степени используют её.

В этом руководстве мы сделаем обзор основ MySQL и изучим как создать пользователя MySQL. Также мы изучим, как предоставлять привилегии доступа для пользователей MySQL. В этом руководстве всё это мы будем делать из командной строки.

Перед тем как начать, вам понадобится следующее:

  • Установленный на вашем компьютере MySQL. Руководство пользователя о том, как установить его на .

Шаг 1 – Создать пользователя MySQL и предоставить неограниченные права доступа

Как только вы начнёте использовать MySQL, вам будет предоставлено имя пользователя и пароль. Эти начальные учётные данные дают вам привелегии ‘root-доступа’. Пользователь с правами доступа root имеют полный доступ ко всем базам данных и таблицам внутри этих баз.

Но часто, вам нужно предоставить доступ к базе данных для кого-то ещё, не давая полного управления. Например, компании, которые нанимают разработчиков для ведения баз данных, но не хотят давать им возможность удалять или изменять какую-либо конфиденциальную информацию, скорее всего предоставят им права доступа не root пользователя. В таком случае, компания может контролировать то, что её разработчики могут и не могут делать с данными.

Создать пользователя MySQL очень просто. Мы вам покажем как создать пользователя MySQL и как назначить ему права доступа к базе данных. Если пользователь не является root, то давать ему все права нецелесообразно и это хороший повод, чтобы изучить, как можно назначать права доступа для пользователей. Для создания нового пользователя выполните следующие шаги:

  1. Запустите командную строку и из неё сервер MySQL: mysql
  2. Выполните следующую команду: CREATE USER "non-root"@"localhost" IDENTIFIED BY "123";

    В этой команде, ‘non-root’ – это имя, которое мы назначаем нашему новому пользователю. А ‘123’ – это его пароль. Вы можете заменить на свои значения внутри кавычек.

  3. Просто создать нового пользователя недостаточно. Вам необходимо назначить для него права доступа. Чтобы назначить вновь созданном пользователю неограниченные права доступа к базе данных, выполните следующую команду: GRANT ALL PRIVILEGES ON * . * TO "non-root"@"localhost";
  4. Для того, чтоб изменения вошли в силу запустите команду обновления: FLUSH PRIVILEGES;

Это всё! Ваш новый пользователь получил те же права доступа в базе данных, что и пользователь root.

Шаг 2 – Назначить специальные права доступа для пользователя MySQL

Как было сказано выше, не очень разумно давать уровень доступа root-а не root-пользователю. Чаще всего, вам будет необходимо предоставлять разные уровни доступа для разных пользователей. MySQL позволяет сделать это легко и быстро, выполнив следующую команду:

GRANT [тип прав] ON [имя базы данных].[имя таблицы] TO ‘non-root’@"localhost’;

Вам просто нужно заменить значение ‘тип прав’ на тот вид прав доступа, который вы хотите предоставить новому пользователю. Также вам нужно указать базу данных и имена таблиц, доступ к которым предоставляется. Аналогично предыдущему примеру, ‘non-root’ – это имя пользователя, то есть вы можете его заменить на нужное вам. В MySQL есть несколько типов прав доступа, некоторые из них описаны ниже:

  • CREATE – Позволяет пользователям создавать базы данных/таблицы
  • SELECT – Позволяет пользователям делать выборку данных
  • INSERT – Позволяет пользователям добавлять новые записи в таблицы
  • UPDATE – Позволяет пользователям изменять существующие записи в таблицах
  • DELETE – Позволяет пользователям удалять записи из таблиц
  • DROP – Позволяет пользователям удалять записи в базе данных/таблицах

Для использования любой из этих опций, просто замените [тип прав] необходимым словом. Чтобы назначить несколько видов прав доступа, разделите их запятыми как в следующей команде. Например, мы можем назначить такие привилегии как CREATE и SELECT для нашего non-root пользователя MySQL такой командой:

GRANT CREATE, SELECT ON * . * TO "non-root"@"localhost";

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

REVOKE [тип прав] ON [имя базы данных].[имя таблицы] FROM ‘non-root’@‘localhost’;

Например, чтобы отменить все привилегии у пользователя non-root user нужно сделать:

REVOKE ALL PRIVILEGES ON *.* FROM "non-root"@"localhost";

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

DROP USER ‘non-root’@‘localhost’;

Помните, что для выполнения любой из этих команд вам нужно иметь права доступа root. Также, обязательно выполняйте FLUSH PRIVILEGES после любого изменения в правах доступа.

Заключение

В этом руководстве мы изучили некоторые основы работы с правами доступа в MySQL и как создать пользователя MySQL. В частности:

  • Создание нового пользователя и назначение ему всех прав доступа
  • Назначение специальных прав доступа пользователям, а также их отмена и удаление пользователей

Назначение прав доступа может показаться трудным, когда разрабатываешь новое web-приложение, но это очень важные действия для управления и поддержки базы данных. Практически все современные приложения строятся на базах данных, поэтому очень важно, чтобы разработчик умел назначать/отменять права доступа к базам данных в MySQL.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: