Рубрики
Uncategorized

Пройдите собеседование по PHP – организуйте базовые знания MySQL – управление учетными записями и разрешениями

Автор оригинала: David Wong.

Сортировка базовых знаний MySQL – управление учетными записями и разрешениями

1、 Управление учетными записями

1. Просмотр списка учетных записей

Учетные записи пользователей MySQL и информация хранятся в mysql В базе данных. Как правило, прямой доступ не требуется mysql Базы данных и таблицы, но иногда требуется прямой доступ. Например, при просмотре списка всех учетных записей пользователей в базе данных.

грамматика

USE mysql;
SELECT DISTINCT(`user`) FROM user;
  • база данных mysql Существует одна таблица с именем пользователь , содержащая все учетные записи пользователей. пользователь Существует таблица с именем пользователь Поле, в котором хранится имя учетной записи.
  • Введите базу данных mysql Представление пользователь В таблицу пользователь Столбец, потому что некоторые учетные записи будут записываться в несколько строк, РАЗНЫЕ Для удаления веса.

Пример

mysql> USE mysql;
Database changed

mysql> SELECT DISTINCT(`user`) FROM user;
+-----------+
| user      |
+-----------+
| root      |
| mysql.sys |
+-----------+
2 rows in set (0.07 sec)
  • Поле пользователя Указывает имя учетной записи, указывающее, что текущая база данных имеет корневой и mysql.sys Два аккаунта.

2. Создайте учетную запись

есть доступ к СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ Заявление для создания новой учетной записи пользователя.

грамматика

CREATE USER account_name IDENTIFIED BY 'password';
  • ИДЕНТИФИЦИРУЕТСЯ Используется для установки пароля. MySQL сначала шифрует пароль и сохраняет его в таблице пользователей.

Использовать ГРАНТ или ВСТАВИТЬ ГРАНТ Оператор также может создать учетную запись пользователя, но, вообще говоря, СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ Это самое ясное и простое предложение. Использовать СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ Чтобы создать учетную запись пользователя, необходимо затем назначить права доступа. Вновь созданная учетная запись пользователя не имеет прав доступа. Они могут войти в MySQL, но они не могут видеть данные и не могут выполнять какие-либо операции с базой данных. иметь доступ к ПРЕДОСТАВИТЬ Выписке для создания учетной записи пользователя и авторизации. Это утверждение будет объяснено в разделе авторизации этой статьи.

Все учетные записи хранятся в базе данных mysql пользователя В таблице, теоретически вы можете добавлять пользователей, вставляя строки непосредственно в таблицу пользователей, но по соображениям безопасности это не рекомендуется. Таблицы (и шаблоны таблиц), используемые Mysql для хранения информации об учетной записи пользователя, чрезвычайно важны, и любое их уничтожение может серьезно повредить сервер MySQL. Поэтому лучше не изменять базу данных напрямую mysql Данные из таблицы в.

Пример

  • Добавить учетную запись в базу данных чжансан Пароль 123456
mysql> CREATE USER zhangsan IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.06 sec)

mysql> SELECT DISTINCT(`user`) FROM user;
+-----------+
| user      |
+-----------+
| root      |
| zhangsan  |
| mysql.sys |
+-----------+
3 rows in set (0.07 sec)
  • Используйте учетную запись и пароль Чжансана для успешного входа в MySQL.
[vagrant~] ]$mysql -uzhangsan -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

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

3. Переименование учетной записи

есть доступ к ПЕРЕИМЕНОВАТЬ ПОЛЬЗОВАТЕЛЯ Заявление о переименовании учетной записи.

грамматика

RENAME USER old_name TO new_name;

Поддерживается только для MySQL 5 и более поздних версий ПЕРЕИМЕНОВАТЬ ПОЛЬЗОВАТЕЛЯ 。 До MySQL 5, чтобы переименовать пользователя, вы можете напрямую обновить таблицу пользователей с помощью обновления( Разумная операция ).

Пример

  • Учетная запись базы данных чжансан Переименовать в лиза
mysql> RENAME USER zhangsan TO lisi;
Query OK, 0 rows affected (0.34 sec)

mysql> SELECT DISTINCT(`user`) FROM user;
+-----------+
| user      |
+-----------+
| lisi      |
| root      |
| mysql.sys |
+-----------+
3 rows in set (0.08 sec)

4. Сбросьте пароль учетной записи

есть доступ к УСТАНОВИТЬ ПАРОЛЬ Выписке для сброса пароля учетной записи.

грамматика

SET PASSWORD FOR account_name = Password('password');

Используйте УСТАНОВИТЬ ПАРОЛЬ Сбросить пароль учетной записи. Новый пароль должен быть зашифрован с помощью функции password ().

Если имя пользователя не указано, УСТАНОВИТЕ ПАРОЛЬ Сбросит пароль текущего пользователя, вошедшего в систему.

грамматика

SET PASSWORD = Password('password');

Пример

  • Перевод учетной записи lisi Пароль изменен на abcdef
mysql> SET PASSWORD FOR lisi = Password('abcdef');
Query OK, 0 rows affected (0.03 sec)
  • Войдите в систему с учетной записью Lisi и новым паролем и успешно войдите в MySQL.
[vagrant~] ]$mysql -ulisi -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
  • Сбросьте пароль текущей учетной записи для входа на 10086
mysql> SET PASSWORD = Password('10086');
Query OK, 0 rows affected (0.00 sec)

5. Удалите учетную запись

иметь доступ к УДАЛИТЬ ПОЛЬЗОВАТЕЛЯ Заявление об удалении учетной записи (и соответствующие разрешения).

грамматика

DROP USER account_name;

MySQL 5 и более поздних версий, УДАЛИТЬ ПОЛЬЗОВАТЕЛЯ При удалении учетной записи пользователя все связанные разрешения учетной записи будут автоматически удалены. До MySQL 5, УДАЛИТЬ ПОЛЬЗОВАТЕЛЯ Он может использоваться только для удаления учетных записей пользователей и не может удалять связанные разрешения. Поэтому, если вы используете более старую версию MySQL, вам необходимо использовать ОТОЗВАТЬ Удалить разрешения, связанные с учетной записью, а затем использовать УДАЛИТЬ ПОЛЬЗОВАТЕЛЯ Удалить учетную запись.

Пример

  • Удалить учетную запись lisi
mysql> DROP USER lisi;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT DISTINCT(`user`) FROM user;
+-----------+
| user      |
+-----------+
| root      |
| mysql.sys |
+-----------+
2 rows in set (0.07 sec)

2, Управление правами

0. Контроль доступа

Основой безопасности сервера MySQL является то, что пользователи должны иметь соответствующий доступ к нужным им данным, ни больше, ни меньше.

Учесть следующее:

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

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

Серьезно отнеситесь к учетной записи root

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

Цель контроля доступа

  • Предотвращайте вредоносные попытки пользователей.
  • Чтобы предотвратить нарушение данных, вызванное неосознанной ошибкой пользователя. Это более распространенное явление. Например, неправильный ввод инструкций SQL, работа в неподходящей базе данных или другие ошибки пользователя.

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

1. Просмотр разрешений учетной записи

грамматика

SHOW GRANTS[ FOR account_name][@host];
  • Если не используется ДЛЯ При указании пользователей, по умолчанию используется просмотр их собственных разрешений учетной записи.
  • При использовании ПОКАЗАТЬ РАЗРЕШЕНИЯ ДЛЯ [email protected] Вы можете просмотреть разрешения указанной учетной записи на указанном хосте. Можно найти в базе данных mysql Использовать в ВЫБРАТЬ пользователя,хост ОТ пользователя; Просмотреть список хостов учетной записи.
mysql> USE mysql;
Database changed

mysql> SELECT user,host FROM user;
+-----------+-----------+
| user      | host      |
+-----------+-----------+
| root      | %         |
| mysql.sys | localhost |
| root      | localhost |
+-----------+-----------+
3 rows in set (0.06 sec)

Поле Хост: Указывает, на какой хост или IP-адрес может войти учетная запись. % Вы можете войти в систему от имени любого IP-адреса (что очень опасно в производственной среде), localhost Указывает, что разрешены только локальные учетные записи.

возьмите хост Установите значение % , что означает, что любой IP-адрес может получить доступ к базе данных, что очень опасно в производственной среде. Другие методы также могут быть использованы для улучшения безопасности базы данных : например, настройка брандмауэра и IP-адреса; если это база данных облачной платформы, она также может повысить безопасность с помощью групп безопасности и другими способами.

Пример

  • Просмотрите свои собственные разрешения учетной записи (root).
mysql> SHOW GRANTS;
+-------------------------------------------------------------+
| Grants for [email protected]%                                           |
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+
1 row in set (0.00 sec)     
  • Проверьте разрешения корневой учетной записи в разделе localhost.
mysql> SHOW GRANTS FOR [email protected];
+---------------------------------------------------------------------+
| Grants for [email protected]                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)

Вывод результата отображения учетной записи root Имеет разрешение ВСЕ ПРИВИЛЕГИИ НА *.* Экспресс root Учетная запись может управлять всеми базами данных и таблицами.

  • Используйте СОЗДАЙТЕ ПОЛЬЗОВАТЕЛЯ Создайте учетную запись чжансан И посмотрите на нее. чжансан Разрешения учетной записи.
mysql> CREATE USER zhangsan IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR zhangsan;
+---------------------------------------------------------------------------------------------------------+
| Grants for [email protected]%                                                                                   |
+---------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhangsan'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
+---------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Вывод результата отображения учетной записи чжансан Имеет разрешение ИСПОЛЬЗОВАНИЕ НА *.*Использование означает отсутствие разрешения вообще , поэтому этот результат представляет чжансан Нет разрешения на работу с любой базой данных или любой таблицей.

  • Войдите в учетную запись чжансан и попробуйте войти в тестовую базу данных, отклонено.
[vagrant~] ]$mysql -uzhangsan -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use test;
ERROR 1044 (42000): Access denied for user 'zhangsan'@'%' to database 'test'

Используйте СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ Созданная учетная запись пользователя по умолчанию не имеет прав доступа. Они могут войти в MySQL, но они не могут видеть данные и не могут выполнять какие-либо операции с базой данных.

2. Установите разрешения для существующих учетных записей

иметь доступ к ПРЕДОСТАВИТЬ Выписке для установки разрешений для учетной записи. Предоставьте как минимум следующую информацию:

  • Имя учетной записи.
  • База данных или таблица, к которой предоставлен доступ.
  • Разрешение на предоставление.

грамматика

Grant < Permission > on < database name >. < table name > to < account name >;

Пример

  • Предоставление учетной записи чжансан Наделяет тестом Разрешением любой таблицы в базе данных на поиск и добавление данных.
mysql> GRANT SELECT, INSERT ON test.* TO 'zhangsan';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR zhangsan;
+---------------------------------------------------------------------------------------------------------+
| Grants for [email protected]%                                                                                   |
+---------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhangsan'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT SELECT, INSERT ON `test`.* TO 'zhangsan'@'%'                                                      |
+---------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

Права на сброс требуются после авторизации, в противном случае они не вступят в силу немедленно.

  • Учетная запись входа чжансан , может успешно войти в базу данных тест В пользователь Вставить фрагмент данных из пользователя Данных поиска в таблице.
mysql> USE test;
Database changed

mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| user           |
+----------------+
1 row in set (0.00 sec)

mysql> INSERT INTO user (username, email) VALUES ('zhangsan', '[email protected]');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> SELECT * FROM user;
+----+----------+--------------------+----------+--------+------------+
| id | username | email              | password | status | created_at |
+----+----------+--------------------+----------+--------+------------+
|  1 | zhangsan | [email protected] | NULL     |      0 |          0 |
+----+----------+--------------------+----------+--------+------------+
1 row in set (0.00 sec)
  • Когда чжансан Хочет использовать ОБНОВИТЬ и УДАЛИТЬ Когда команда изменяет и удаляет эти данные, вам будет предложено указать, что у вас нет разрешения.
mysql> UPDATE user SET email='[email protected]' WHERE username='zhangsan';
ERROR 1142 (42000): UPDATE command denied to user 'zhangsan'@'localhost' for table 'user'

mysql> DELETE FROM user WHERE username='zhangsan';
ERROR 1142 (42000): DELETE command denied to user 'zhangsan'@'localhost' for table 'user'

3. Создайте учетную запись и установите разрешения

грамматика

Grant < Permission > on < database name >. < table name > to < account name > @ < host name / IP > identified by '< password >' [with grant option];

С ОПЦИЕЙ ПРЕДОСТАВЛЕНИЯ Используется для предоставления учетной записи ПРЕДОСТАВЛЕНИЯ и ОТЗЫВА Разрешение команды используется для авторизации и отмены авторизации учетной записи. Этот уровень разрешений очень высок. Как правило, это разрешение предоставляется только учетной записи администратора базы данных.

Пример

  • Создайте учетную запись lisi Пароль abcdef , можете войти на любой IP-адрес и назначить lisi пребывание тестирование Полномочия на добавление, удаление, изменение и запрос любых табличных данных в базе данных.
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON test.* TO 'lisi'@'%' IDENTIFIED BY 'abcdef';
Query OK, 0 rows affected (0.00 sec)

возьмите хост Установите значение % , что означает, что любой IP-адрес может получить доступ к базе данных, что очень опасно в производственной среде. Для повышения безопасности базы данных также могут использоваться другие методы: например, настройка брандмауэра и Ip-таблиц; если это база данных облачной платформы, она также может повысить безопасность с помощью групп безопасности и другими способами.

  • Учетная запись входа lisi , может успешно войти в базу данных тест И да. пользователь Добавляйте, удаляйте и изменяйте данные таблицы.
[vagrant~] ]$mysql -ulisi -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use test;
Database changed

mysql> INSERT INTO user (username, email) VALUES ('lisi', '[email protected]');
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> SELECT * FROM user;
+----+----------+--------------------+----------+--------+------------+
| id | username | email              | password | status | created_at |
+----+----------+--------------------+----------+--------+------------+
|  1 | zhangsan | [email protected] | NULL     |      0 |          0 |
|  2 | lisi     | [email protected]     | NULL     |      0 |          0 |
+----+----------+--------------------+----------+--------+------------+
2 rows in set (0.00 sec)

mysql> UPDATE user SET email='[email protected]' WHERE username='lisi';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> DELETE FROM user WHERE username='zhangsan';
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM user;
+----+----------+---------------------+----------+--------+------------+
| id | username | email               | password | status | created_at |
+----+----------+---------------------+----------+--------+------------+
|  2 | lisi     | [email protected] | NULL     |      0 |          0 |
+----+----------+---------------------+----------+--------+------------+
1 row in set (0.00 sec)

4. Отозвать указанные полномочия учетной записи

иметь доступ к ОТЗЫВУ Выписке об отзыве указанного разрешения учетной записи. ОТМЕНИТЬ да ПРЕДОСТАВИТЬ Обратную операцию.

грамматика

Revoke < Permission > on < database name >. < table name > from < account name >;

Пример

  • Удалить учетную запись lisi Разрешение на удаление для.
mysql> REVOKE DELETE ON test.* FROM lisi;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR lisi;
+-----------------------------------------------------------------------------------------------------+
| Grants for [email protected]%                                                                                   |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'lisi'@'%' IDENTIFIED BY PASSWORD '*C2D24DCA38E9E862098B85BF0AB35CAA52803797' |
| GRANT SELECT, INSERT, UPDATE ON `test`.* TO 'lisi'@'%'                                              |
+-----------------------------------------------------------------------------------------------------+
2 rows in set (0.04 sec)
  • Когда lisi Хотите использовать УДАЛИТЬ Когда команда удаляет данные, вам будет предложено указать, что у вас нет разрешения.
mysql> DELETE FROM user WHERE username='lisi';
ERROR 1142 (42000): DELETE command denied to user 'lisi'@'localhost' for table 'user'

5. Описание полномочий

ПРЕДОСТАВИТЬ и ОТОЗВАТЬ Доступ можно контролировать на нескольких уровнях:

  • Весь сервер, используя ПРЕДОСТАВИТЬ ВСЕ и ОТОЗВАТЬ ВСЕ ;
  • Вся база данных, используя В базе данных.* ;
  • Конкретные таблицы, используя В базе данных.таблица ;
  • Конкретные столбцы;
  • Конкретные хранимые процедуры.
за исключением ПРЕДОСТАВЛЕНИЯ дополнительных разрешений за пределами ВСЕ
Используйте ALTER TABLE ИЗМЕНЯТЬ
Используйте ПРОЦЕДУРУ ИЗМЕНЕНИЯ и ПРОЦЕДУРУ УДАЛЕНИЯ ИЗМЕНИТЬ РУТИНУ
Используйте СОЗДАТЬ ТАБЛИЦУ ТВОРИТЬ
Используйте ПРОЦЕДУРУ СОЗДАНИЯ СОЗДАЙТЕ РУТИНУ
Используйте СОЗДАТЬ ВРЕМЕННУЮ ТАБЛИЦУ СОЗДАНИЕ ВРЕМЕННЫХ ТАБЛИЦ
Используйте СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ, УДАЛИТЬ ПОЛЬЗОВАТЕЛЯ, ПЕРЕИМЕНОВАТЬ ПОЛЬЗОВАТЕЛЯ и ОТМЕНИТЬ ВСЕ ПРИВИЛЕГИИ СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ
Используйте СОЗДАТЬ ПРЕДСТАВЛЕНИЕ СОЗДАТЬ ПРЕДСТАВЛЕНИЕ
Пользователь удаляет УДАЛИТЬ
Используйте ТАБЛИЦУ ВЫПАДЕНИЯ КАПЛЯ
Используйте ВЫЗОВЫ И хранимые процедуры ВЫПОЛНЯТЬ
Используйте SELECT В OUTFILE и ЗАГРУЗИТЕ ДАННЫЕ В ФАЙЛ ФАЙЛ
Используйте ГРАНТ и ОТМЕНИТЕ ВОЗМОЖНОСТЬ ПРЕДОСТАВЛЕНИЯ
Используйте СОЗДАТЬ ИНДЕКС и УДАЛИТЬ ИНДЕКС ИНДЕКС
Используйте ВСТАВКУ ВСТАВЛЯТЬ
Используйте ТАБЛИЦЫ БЛОКИРОВОК БЛОКИРОВКА ТАБЛИЦ
Используйте ПОКАЗАТЬ ПОЛНЫЙ СПИСОК ПРОЦЕССОВ ПРОЦЕСС
Используйте ПРОМЫВКУ ПЕРЕЗАГРУЗИТЬ
Доступ к местоположению сервера КЛИЕНТ РЕПЛИКАЦИИ
Используется ведомыми устройствами репликации ВЕДОМОЕ УСТРОЙСТВО РЕПЛИКАЦИИ
Использовать ВЫБОР ВЫБИРАТЬ
Используйте ПОКАЗАТЬ БАЗЫ ДАННЫХ ПОКАЗАТЬ БАЗЫ ДАННЫХ
Используйте ПОКАЗАТЬ СОЗДАТЬ ПРЕДСТАВЛЕНИЕ ПОКАЗАТЬ ВИД
Используйте завершение работы mysqladmin(используется для закрытия MySQL) ВЫКЛЮЧЕНИЕ
Используйте ИЗМЕНИТЬ МАСТЕР,УБИТЬ,ЖУРНАЛЫ,ОЧИСТИТЬ,МАСТЕР и УСТАНОВИТЬ ГЛОБАЛЬНЫЙ. Также разрешите вход в систему отладки mysqladmin СУПЕР
Используйте ОБНОВЛЕНИЕ ОБНОВЛЕНИЕ
Нет доступа ИСПОЛЬЗОВАНИЕ

6. Процесс контроля полномочий

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

с помощью ВЫБЕРИТЕ идентификатор,имя ИЗ test.t4, где; Например.