Скрипт авторизации на php mysql: Авторизация на PHP+MySQL

Содержание

Пишем свою авторизацию на PHP и MySQL -Будни программиста

Ну что же, сегодня я вам расскажу о безопасной авторизации на PHP и Cookie. Ну о том что она абсолютна безопасна я не говорю, ибо взломать можно все, но для маленького сайта она вполне подходит. Так же я предвижу комментарии о том что сессии безопаснее. Не спорю куки уступают сессиям в безопасности но для реализации простенькой авторизации вполне подходят. Подробности ниже.

И так, в базе у нас будет 1 база из 4 полей: users_id, users_login, users_password и users_hash. SQL запрос:

1
2
3
4
5
6
7

CREATE TABLE IF NOT EXISTS `users` (
  `users_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `users_login` VARCHAR(30) NOT NULL,
  `users_password` VARCHAR(32) NOT NULL,
  `users_hash` VARCHAR(32) NOT NULL,
  PRIMARY KEY  (`users_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

    Сам скрипт авторизации будет тоже на 4 файлах. А именно:

  • conf.php — Файл конфигурации, в котором так же содержится подключение к бд;
  • register.php — Регистрация нового пользователя;
  • login.php — Авторизация пользователя;
  • check.php — Скрипт проверки авторизации;

Давайте разберем каждый файл.

conf.php

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

<?php
# настройки
define (‘DB_HOST’, ‘localhost’);
define (‘DB_LOGIN’, ‘example_user’);
define (‘DB_PASSWORD’, ‘example_password’);
define (‘DB_NAME’, ‘example_base’);
mysql_connect(DB_HOST, DB_LOGIN, DB_PASSWORD) or die («MySQL Error: » . mysql_error());
mysql_query(«set names utf8») or die («<br>Invalid query: » . mysql_error());
mysql_select_db(DB_NAME) or die («<br>Invalid query: » . mysql_error());

# массив ошибок
$error[0] = ‘Я вас не знаю’;
$error[1] = ‘Включи куки’;
$error[2] = ‘Тебе сюда нельзя’;
?>

register.php

Файл регистрации, тут содержится простейшая форма и ее обработчик. Исходный код прокомментирован, но общий процесс я коротко опишу. Вначале проверяем наш логин, он может содержать только английские буквы и цифры. Далее мы проверяем длину логина, от 3 до 30 символов. Проверяем свободен ли логин. При успешных проверках добавляем нового пользователя в базу. Из введенного пароля мы вырезаем пробелы на случай если пользователь хранит свои пароли в каком ни будь текстовом файле (в windows текстовые редакторы любят «хватать» пробелы в начале или конце выделяемого текста). Шифруем пароль в двойном MD5 и добавляем в базу данные о новом пользователе.[a-zA-Z0-9]+$/»,$_POST[‘login’]))
    {
        $err[] = «Логин может состоять только из букв английского алфавита и цифр»;
    }
     
    if(strlen($_POST[‘login’]) < 3 or strlen($_POST[‘login’]) > 30)
    {
        $err[] = «Логин должен быть не меньше 3-х символов и не больше 30»;
    }
     
    # проверяем, не сущестует ли пользователя с таким именем
  $query = mysql_query(«SELECT COUNT(users_id) FROM users WHERE users_login='».mysql_real_escape_string($_POST[‘login’]).»‘»)or die («<br>Invalid query: » . mysql_error());
    if(mysql_result($query, 0) > 0)
    {
        $err[] = «Пользователь с таким логином уже существует в базе данных»;
    }
 
     
    # Если нет ошибок, то добавляем в БД нового пользователя
   if(count($err) == 0)
    {
         
        $login = $_POST[‘login’];
         
        # Убераем лишние пробелы и делаем двойное шифрование
       $password = md5(md5(trim($_POST[‘password’])));
         
        mysql_query(«INSERT INTO users SET users_login='».$login.»‘, users_password='».$password.»‘»);
        header(«Location: login.php»); exit();
    }
}
?>

  <form method=»POST» action=»»>
  Логин <input type=»text» name=»login» /><br />
  Пароль <input type=»password» name=»password» /><br />
  <input name=»submit» type=»submit» value=»Зарегистрироваться»>
  </form>
  <?php
    if (isset($err)) {
      print «<b>При регистрации произошли следующие ошибки:</b><br>»;
      foreach($err AS $error)
      {
        print $error.»<br>»;
      }  
    }
  ?>

login.php

Опять кратко расскажу о действиях совершаемых в данном скрипте. В самом начале у нас висит функция для генерации случайной строки, она служит для хеша пользователя (чуть позже более подробно). Далее мы проверяем наличие куков с ошибками (они ставятся в check.php). Подключаем файл конфигурации и проверяем пользователя. Вытаскиваем из бд логин и пароль, сравниваем с введенными и генерируем хеш. Записываем в бд новый хеш пользователя и ставим куки. В куках находится id и хеш пользователя. Пересылаем пользователя на check.php.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

<?php
  # Функция для генерации случайной строки
  function generateCode($length=6) {
    $chars = «abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789»;
    $code = «»;
    $clen = strlen($chars) — 1;  
    while (strlen($code) < $length) {
        $code .= $chars[mt_rand(0,$clen)];  
    }
    return $code;
  }
 
  # Если есть куки с ошибкой то выводим их в переменную и удаляем куки
  if (isset($_COOKIE[‘errors’])){
      $errors = $_COOKIE[‘errors’];
      setcookie(‘errors’, », time() — 60*24*30*12, ‘/’);
  }

  # Подключаем конфиг
  include ‘conf.php’;

  if(isset($_POST[‘submit’]))
  {
   
    # Вытаскиваем из БД запись, у которой логин равняеться введенному
    $data = mysql_fetch_assoc(mysql_query(«SELECT users_id, users_password FROM `users` WHERE `users_login`='».mysql_real_escape_string($_POST[‘login’]).»‘ LIMIT 1″));
     
    # Соавниваем пароли
    if($data[‘users_password’] === md5(md5($_POST[‘password’])))
    {
      # Генерируем случайное число и шифруем его
      $hash = md5(generateCode(10));
           
      # Записываем в БД новый хеш авторизации и IP
      mysql_query(«UPDATE users SET users_hash='».$hash.»‘ WHERE users_id='».$data[‘users_id’].»‘») or die(«MySQL Error: » . mysql_error());
       
      # Ставим куки
      setcookie(«id», $data[‘users_id’], time()+60*60*24*30);
      setcookie(«hash», $hash, time()+60*60*24*30);
       
      # Переадресовываем браузер на страницу проверки нашего скрипта
      header(«Location: check.php»); exit();
    }
    else
    {
      print «Вы ввели неправильный логин/пароль<br>»;
    }
  }
?>
  <form method=»POST»>
  Логин <input name=»login» type=»text»><br>
  Пароль <input name=»password» type=»password»><br>
  <input name=»submit» type=»submit» value=»Войти»>
  </form>
  <?php
  # Проверяем наличие в куках номера ошибки
  if (isset($errors)) {print ‘<h5>’.$error[$errors].'</h5>’;}

  ?>

check.php

И последний файл, который содержит проверку авторизации пользователя. В начале подключаем конфиг и если существуют куки начинаем проверку, если их нет, то ставим куки с номером ошибки и отсылаем на login.php. И так проверка. Вытаскиваем из бд id и хеш. Если они не проходят проверку на соответствие с теми куками которые стоят у посетителя, то удаляем существующие куки посетителя и ставим куки с номером ошибки, пересылаем на login.php. Если же все нормально то пользователь увидит страницу.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

<?php
# подключаем конфиг
include ‘conf.php’;  

# проверка авторизации
if (isset($_COOKIE[‘id’]) and isset($_COOKIE[‘hash’]))
{    
    $userdata = mysql_fetch_assoc(mysql_query(«SELECT * FROM users WHERE users_id = ‘».intval($_COOKIE[‘id’]).»‘ LIMIT 1″));

    if(($userdata[‘users_hash’] !== $_COOKIE[‘hash’]) or ($userdata[‘users_id’] !== $_COOKIE[‘id’]))
    {
        setcookie(‘id’, », time() — 60*24*30*12, ‘/’);
        setcookie(‘hash’, », time() — 60*24*30*12, ‘/’);
    setcookie(‘errors’, ‘1’, time() + 60*24*30*12, ‘/’);
    header(‘Location: login.php’); exit();
    }
}
else
{
  setcookie(‘errors’, ‘2’, time() + 60*24*30*12, ‘/’);
  header(‘Location: login.php’); exit();
}
?>
<!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Transitional//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd»>
<html xmlns=»http://www.w3.org/1999/xhtml» xml:lang=»en»>
<head>
  <meta http-equiv=»Content-Type» content=»text/html;charset=UTF-8″ />
  <title></title>
</head>
<body>
  hello!
</body>
</html>

Выход

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

1
2
3
4
5
6
7
8
9

<form action=»» method=»post»><input type=’submit’ name=’exit’ value=’Выйти’/></form>
<?php
if($_REQUEST[‘exit’])
  {
        setcookie(‘id’, », time() — 60*60*24*30, ‘/’);
        setcookie(‘hash’, », time() — 60*60*24*30, ‘/’);
        header(‘Location: login.php’); exit();
  }
?>

Сразу хочу предупредить о том что ваши файлы должны быть в кодировке UTF8 и БЕЗ BOM! Приятного пользования!

Теги: Cookie, MD5, MySQL, PHP, Авторизация

Скрипт простой авторизации без MySQL

1шаг
Для начала рассмотрим 1 вариант, – это однотипный логин и пароль.
Открываем блокнот, копируем и вставляем указанный ниже скрипт в блокнот.

$login_user=“admin”;
$password_user=“admin”;
$login=$POST[‘login’];
$password=$POST[‘password’];
if( ($login_user == $login) and ($password_user == $password) )
{
echo “Добро пожаловать”;
}
else
{
echo “Не правильный логин или пароль”;
}
?>
Далее нажимаем “Файл”, выбираем “Сохранить как…”
Вылезет окно. Пишем в поле имя файла “registr.php”.
Ставим кодировку “UTF-8” (необязательно)
Сохраняем.
Копируем следующий скрипт:

Авторизация

Логин
Пароль

Сохраняем с названием “index.html”.
Скрипт готов для использования.
2 шаг
2)Авторизация с мини базой данных.
Копируем и сохраняем в блокнот PHP скрипт. Имя скрипта “registr.php”.

//мини база данных
$login_user=“admin”;
$password_user=“admin”;
$login_user1=“admin2”;
$password_user1=“admin2”;
$login_user2=“admin3”;
$password_user2=“admin3”;
//конец мини базы данных
//операция обробатывания полученных информации от пользователя
$login=$POST[‘login’];
$password=$POST[‘password’];
if
(
($login_user == $login) and ($password_user == $password)
or
($login_user1 == $login) and ($password_user1 == $password)
or
($login_user2 == $login) and ($password_user2 == $password)
)
{
echo “Добро пожаловать”;
}
else
{
echo “Не правильный логин или пароль”;
}
?>
Надеюсь ничего сложно здесь нету.
index.html такой же как и у 1 варианта авторизации.
Скрипт готов для использования.
3 шаг
Предупреждения:
PHP скрипты не будут работать от простого браузера.
Для того что бы проверить работоспособность скриптов авторизации, вам нужно либо залить на платный хостинг с поддержкой PHP, а самый просто способ это скачать denwer, или Easy PHP.
Решайте сами, всем хорошего настроения, на этом все…Пока

Брут http-авторизации на PHP

Однажды забыл пароль к удаленному хитрому роутеру. Казалось бы что проще — сбрось настройки, а нет, нельзя, там куча настроек для проброса портов для видео-наблюдения. Логин админа и так знал, а вот с паролем приходится возиться. Тем более роутер удаленный и времени на его подбор полным полно.

Для подбора пароля я решил использовать родной мне язык — PHP, кто то конечно скажет бред — как так, это же медленно и как брутить из браузера — действительно, спорить не буду, по этому запускаю быстрее через консоль Linux командой

php brut.php

Вот оно и работает. Для работы большинства брутов нужны словари паролей, но тут боюсь словарь будет бесполезен, так как используется набор букв не известной длины.

Чтобы не тратить время на подбор одних и тех же паролей — я подключил MySQL (да, скрипт работает только на PHP5)

С помощью функции генерации случайной последовательности — мы генерируем строку случайной длины в некоторых пределах — от 6 до 10 символов, проверяем, есть ли данная строка в БД, если нет — добавляем и пробуем подключиться к роутеру по HTTP-авторизации по нужному порту к нужной страничке.

Данный подбор работает в заданном количестве циклов с паузой в 1 секунду. То есть каждую секунду времени подбирается 1 пароль — это сделано специально, чтобы роутер не повис и успевал отправить ответ. Если убрать задержку — то рано или поздно скрипт собьется со считыванием ответов. Чтобы увеличить скорость — можно запустить скрипт в нескольких сессиях. Или с нескольких разных серверов, но опять же будут разные БД и возможные дубли паролей.

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

В MySQL в нужной базе надо создать табличку pwd с одной колонкой текстовой — pwd. Если PHP 7-й версии — то можно и не много исправить работу с MySQL и работать. Или вообще убрать подключение к БД.

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

По собственному опыту использования говорю — что пароль так и не подобрал, но до сих пор пытаюсь, было перебрано около 300 тысяч рандомных строк.

Вообще пытаться подбирать пароли можно не только к роутерам, но и к другим системам — IP-камерам, закрытым web-ресурсам, которые защищены простой http-авторизацией. Но такие методы защиты используются все реже, роутеры и прочее оборудование с выходом новых прошивок все умнеют и умнеют.

Просмотры: 416

Лайки:

Если вам помогла статья, помогите пожалуйста проекту не умереть =)

Понравилась статья? Поделитесь с друзьями:

Коментарии

Уроки по php | Как сделать регистрацию и авторизацию пользователей на сайте

2021-02-01 00:56:43

Как сделать регистрацию и авторизацию пользователей на сайте Не так давно один из моих посетителей попросил меня написать статью о том, как сделать регистрацию и авторизацию пользователей на сайте. Собственно, выполняю его просьбу, и в этой статье я расскажу о том, как это делается. Существует несколько способов создания регистрации и авторизации пользователей, но в этой статье я разберу свой любимый — через механизм сессий или cookie. Первым делом, если Вы хотите сделать регистрацию у себя на сайте, то необходимо понимать, где будут храниться данные о пользователях. Можно хранить в обычном текстовом файле, в XML-файле, либо в базе данных. Первые два варианта — очень опасные, поэтому не рекомендую Вам ими пользоваться. А вот третий вариант — хранение информации о пользователях в базе данных — самый популярный, и именно этим способом хранения информации я советую Вам пользоваться. С местом хранения определились. Теперь перейдём непосредственно к алгоритму авторизации: Создать форму регистрации на HTML. Получить данные из формы в скрипте-обработчике. Проверить полученные данные, и если они некорректны, то сделать редирект обратно на форму регистрации. Если данные корректны, то записать их в базу данных. Вот и весь процесс регистрации пользователя на сайте. То есть регистрация — это сохранение информации о пользователе на сайте. Дальнейшим пунктом является авторизация пользователя на сайте, однако, прежде чем к нему переходить, расскажу об одном важном моменте в форме регистрации — пароле. Я Вам настоятельно рекомендую не хранить пароли в открытом виде (например так, «123456»). Обязательно их шифруйте, хотя бы с помощью функции md5(). И в базе данных храните именно зашифрованный пароль. Теперь авторизация. Первое, что Вы должны понять — это то, что информация об авторизации должна где-то храниться. Самый простой вариант — это хранение информации в сессии (или в cookie). А теперь алгоритм: Создать форму авторизации пользователя на HTML, куда пользователь должен будет ввести свой логин и пароль. В скрипте-обработчике принять данные от пользователя. Если Вы меня послушались, и храните шифрованные пароли в базе данных, то сначала шифруйте полученный пароль. Если же в базе данных лежат открытые пароли, то шифровать не надо. Проверить правильность введённых данных, и если логин и пароль совпадают с существующим пользователем в базе данных, то записываете в cookie или сессию информацию с логином и шифрованным паролем (либо открытым паролем, если Вы его не шифровали). Если логин и/или пароль введены неверно, то делать редирект обратно на форму авторизации. Теперь у Вас есть необходимая информация об авторизации пользователя, которая хранится в его cookie или на сервере (если сессия). Фактически, теперь Вам нужно эту информацию проверять на каждой странице сайта и сверять её аналогично проверке формы авторизации. То есть считываете из cookie (сессии) логин и пароль, и проверяете его. Если они верные, то показываете одну страницу (для зарегистрированных пользователей), а если неверные, то показываете другую страницу (для гостей). И последнее. Как делается кнопка «Выход»? Очень просто. При нажатии на эту кнопку, стираются cookie, либо сессия. Таким образом, пользователь автоматически вылетает с сайта. Как видите, всё элементарно, но при реализации этого алгоритма у Вас обязательно возникнет множество вопросов. Например, что делать при регистрации пользователя, логин которого уже имеется в базе данных. Реализация различных проверок входных данных, реализация проверки существования e-mail и прочее — всё это является достаточно сложным, если Вы делаете это в первый раз. Однако, самый сок я выдал. Если будут вопросы при реализации, то спрашивайте либо на форуме, либо в комментариях. В данной статье я привёл лишь алгоритм, а чтобы научиться его реализовывать нужно знать PHP и MySQL.

PHP-скрипт входа в систему (PHP, MySQL, Bootstrap, jQuery, Ajax и JSON)

PHP-скрипт входа в систему (PHP, MySQL, Bootstrap, jQuery, Ajax и JSON)

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

Функции

  • Полная система регистрации пользователей и входа в систему.
  • Хранилище регистрационных данных пользователя в базе данных MySQL.
  • Войдите в систему, используя скрипт PHP и базу данных MySQL, и только после аутентификации пользователь может получить доступ к защищенной странице.
  • Войдите в систему, используя скрипт PHP и базу данных MySQL, и только после аутентификации пользователь может получить доступ к защищенной странице.
  • Отношения внешнего ключа между таблицами MySQL.
  • Пользователь может выйти из системы после входа в систему.
  • Сеанс PHP используется для сохранения статуса входа в систему до тех пор, пока не будет выполнен выход из системы.
  • Защищенный код для предотвращения атак SQL-инъекций.
  • Передача данных с использованием JSON.
  • Bootstrap был использован для улучшения пользовательского интерфейса.
  • jQuery Ajax используется для отправки форм без обновления страницы.

Структура базы данных

В базе данных создаются две таблицы для раздельного управления данными пользователей и профилей пользователей.

tbl_users

tbl_user_profile

Схема

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

Структура программы

PHP
  • /index.php — Эта страница может открываться только после аутентификации; в противном случае пользователь будет перенаправлен на страницу main.php.
  • /main.php — Эта страница содержит только формы входа и регистрации в формате HTML.
  • /submit.php — PHP-коды для входа в систему и регистрации существуют на этой странице, отправленной страницей main.php.
  • / выход.php — эта страница уничтожает сеанс, начатый страницей submit.php.
  • /inc/config.php — Эта страница включена во все страницы PHP и используется для запуска сеанса и подключения к базе данных MySQL.
  • /inc/functions.php — Эта страница содержит пользовательские функции PHP, используемые в программе.
  • /include/header.php — Эта страница содержит HTML.
  • /include/footer.php — Эта страница содержит HTML.
JS
  • /js/app.js — Эта страница содержит специальный код JavaScript, который используется для отправки форм входа и регистрации.
  • /js/jquery.min.js — плагин jQuery.
  • /js/bootstrap.min.js — плагин Bootstrap.
CSS
  • /css/style.js — Эта страница содержит собственный CSS.
  • /css/bootstrap.min.css — плагин Bootstrap.

© w3schools.in — Все права защищены.

5 лучших сценариев входа в систему PHP и MySQL / Учебники

Одним из факторов, влияющих на динамический веб-сайт, является форма регистрации и входа в систему.Вот список сценариев / руководств по входу в PHP и MySQL.

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

Создано Tutorialzine. Это руководство покажет вам классную, но простую систему входа / регистрации, которая позволит веб-разработчикам с легкостью создать на своем веб-сайте зону только для участников, а также простой, но эффективный процесс регистрации.Эта система входа в систему управляется PHP, что позволяет сохранять все регистрации в базе данных MySQL. Добавьте немного изящества, используя потрясающую скользящую панель jQuery, разработанную Web-kreation.

edrackham.com Учебное пособие по скрипту входа на PHP

Это простое, но замечательное руководство покажет вам, как можно заставить пользователей регистрироваться на вашем веб-сайте и входить в систему для доступа к защищенным областям. В Интернете есть множество руководств о том, как это можно сделать, но всем им не хватает безопасности.edrackham.com PHP Login Script Tutorial покажет вам лучший и более удобный способ аутентификации пользователей с легкостью после того, как они войдут в систему, используя свой идентификатор сеанса.

Не беспокойтесь о том, что ваши сценарии входа небезопасны и небезопасны с помощью этого замечательного руководства. Будьте спокойны, следуя этому руководству по созданию безопасного сценария входа в PHP и MySQL. Это руководство гарантирует, что ваш сайт будет защищен от всех видов атак, которые хакеры могут использовать для получения контроля над учетными записями других пользователей, удаления или изменения данных.

Прежде чем продолжить изучение этого руководства, вам сначала необходимо загрузить журнал PHP в Script, где вы можете найти zip-файл, содержащий полный исходный код PHP сценария аутентификации вместе с файлом SQL, который позволит вам создавать и заполнять необходимые таблицы. Когда вы закончите загрузку файла, извлеките его содержимое и запустите файл SQL, чтобы создать таблицу участников.

Как создать безопасную страницу входа в PHP | Шон Хиггинс

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

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

Из этой статьи вы узнаете, как создать безопасную страницу входа PHP, которую можно использовать в любом приложении.

Давайте разберем процесс создания безопасной страницы входа в PHP на несколько простых и понятных шагов.

Первым шагом является создание HTML-формы входа в систему, которая будет принимать учетные данные пользователя от пользователя. Вы можете использовать приведенный ниже фрагмент кода и поместить его в новый файл с именем login.php

. Затем мы применяем некоторые дополнительные стили CSS для заголовков и сообщений об ошибках. Вы можете использовать приведенный ниже фрагмент кода в качестве основы для стилизации формы и полей ввода.

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

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

Для создания этой таблицы можно использовать следующий оператор SQL:

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

Для этого поместите следующий код в новый файл с именем config.php

Здесь вы должны заменить параметры подключения на свои перед тестированием подключения к серверу.

Замените имя базы данных «logintest» на имя своей базы данных, а имя пользователя «root» — на имя пользователя базы данных. Вы также должны указать пароль базы данных, если таковой имеется.

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

Здесь начнем с проверки того, ввел ли пользователь ввод в форму входа, используя метод isset ().

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

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

Добавьте этот код в начало файла login.php.

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

Если комбинация имени пользователя и пароля не совпадает, система возвращает ошибку.

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

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

В приведенном выше примере кода функция html specialchars () используется для экранирования данных перед их отображением в браузере. Это очищает вводимые пользователем данные, которые могут содержать вредоносные данные, предназначенные для запуска атак.

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

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

Вы можете добавить приведенный ниже код в отдельный файл и назвать его logout.php

На этом этапе вы можете протестировать свою страницу входа в систему в браузере и посмотреть, как все работает.

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

16.2 Обзор приложения | Приложения веб-баз данных с PHP и MySQL, 2-е издание

Приложение winestore было разработано в соответствии с требованиями, изложенными в предыдущем разделе. Это полноценное приложение веб-базы данных PHP и MySQL, использующее шаблоны PEAR ITX и PEAR DB для абстрактного представления HTML и уровня базы данных. Он был разработан на платформе Linux с использованием СУБД MySQL 4.1 и PHP 4.3, но работает в средах Microsoft Windows и Mac OS X.

Он был протестирован с PHP 5.0.0 beta (b2). На момент написания PEAR DB не работает с PHP5 и MySQL 4.1. Скорее всего, это будет исправлено после выпуска PHP5, и мы предоставим обновленный код на веб-сайте нашей книги http://www.webdatabasebook.com.

Магазин вин содержит множество компонентов типичного приложения веб-базы данных, в том числе:

  • Поддерживаемые веб-страницы, созданные с помощью шаблонов и заполненные данными из базы данных.

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

  • Ввод и проверка данных.

  • Отслеживание пользователей с помощью методов управления сеансами.

  • Аутентификация и управление пользователями.

  • Запросы SQL, требующие блокировки таблицы.

  • Страницы квитанции, которые позволяют избежать проблем с повторной загрузкой.

  • Надежная обработка ошибок с помощью настраиваемого модуля ошибок.

  • Квитанции по электронной почте и через браузер.

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

Управление клиентами

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

Корзина для покупок

Добавление вин в корзину, удаление товаров из корзины, корректировка количества и опорожнение корзины. Корзина для покупок обсуждается в главе 18.

Заказ и доставка

Обработка корзины для превращения ее в заказ, проверка кредитной карты, подтверждение сведений о доставке по электронной почте и подтверждение сведений о доставке с помощью квитанции в формате HTML. Эти сценарии являются предметом главы 19.

Просмотр и поиск

Поиск и просмотр вин с использованием параметров, задаваемых пользователем. Описано в главе 20.

Аутентификация

Вход в систему, выход из системы и смена паролей.Также обсуждается в главе 20.

Приложение также имеет набор общих компонентов, включая расширения шаблонов PEAR ITX, функции аутентификации, настраиваемый обработчик ошибок, функции проверки, а также функции и константы общего назначения. За исключением функций аутентификации, эти общие компоненты обсуждаются далее в этой главе. Функции аутентификации общего назначения обсуждаются в главе 20.

16.2.1 Сценарии Winestore

На рисунках 16-1 и 16-2 показаны сценарии, разработанные для приложения winestore, и их взаимодействие.Скрипты показаны в виде прямоугольников. Сплошные прямоугольники указывают сценарии, которые генерируют HTML, а пунктирные прямоугольники не производят вывод, а вместо этого перенаправляют на другие сценарии. Линии со стрелками показывают, как скрипты вызывают друг друга, а пунктирные линии показывают, по какому пути следует путь, когда проверка не выполняется или возникает ошибка. На обоих рисунках показаны три основных сценария пользовательского интерфейса: index.php, customer / details.php и cart / showcart.php .

16.2.1.1 Обзор функций
Рисунок 16-1.Архитектура приложения винного магазина

Главная или домашняя страница онлайн-магазина вин показана на рис. 16-1 и рис. 16-2 и называется index.php. Эта страница позволяет пользователю добавлять бутылки и ящики трех выбранных «новых горячих вин» в свою корзину и получать доступ к другим частям приложения. Функциональность корзины покупок показана двусторонней стрелкой на скрипте добавления в корзину с меткой cart / addtocart.php . Скрипт cart / a ddtocart.php показан пунктирным прямоугольником на рис. 16-1, что указывает на то, что это однокомпонентный модуль запроса, который не имеет вывода и вместо этого перенаправляет на вызывающую страницу.

Домашняя страница также позволяет пользователю просматривать свою корзину покупок, щелкнув значок корзины вверху страницы или кнопку «Просмотреть корзину» внизу страницы. Функциональность просмотра корзины обеспечивается сценарием cart / showcart.php, представленным далее в этом разделе. С домашней страницы также возможны три других действия:

  • Поиск вин с помощью скрипта search / sea rchform.php

  • Стать участником или изменить данные клиента с помощью customer / details.php скрипт

  • Вход или выход с использованием сценариев auth / login.php и auth / logout.php, соответственно

На рисунках 16-1 и 16-2 показаны тележка, покупатель, аутентификация, смена пароля , скрипты поиска, заказа и доставки. В деталях, это следующие функции:

Управление данными о клиенте

Это обеспечивается с помощью файлов customer / details.php, customer / validate.php и customer / чек.php, которые реализуют функции присоединения и изменения деталей. Сценарии показывают, как создать реальный модуль ввода, проверки и получения данных, используя методы, которые мы обсуждаем в главах 6–9.

Сценарий customer / details.php представляет новым клиентам пустую форму клиента. Форма позволяет вводить все данные о клиенте, включая адрес электронной почты, который используется в качестве имени для входа пользователя и пароль для будущих посещений сайта. Заказчик / проверка.Сценарий php проверяет данные клиента и, в случае успеха, записывает в базу данных и перенаправляет на сценарий получения клиента customer /icing.php.

При ошибке проверки customer / validate.php перенаправляется на customer / details.php, где ошибки проверки сообщаются как пакетные ошибки, которые чередуются с виджетами формы.

Для клиентов, которые изменяют свои данные, виджеты ввода пароля и адреса электронной почты не указываются в форме клиента.

Управление паролями

Это обеспечивается auth / password.php и скрипты auth / changepassword.php . Сценарии показывают, как создать часть реального модуля аутентификации, используя методы, описанные в главах 10 и 11, в сочетании с основными методами, описанными в главах 6–9.

Зарегистрированные пользователи могут изменить свои пароли, нажав на кнопка «Изменить пароль» в нижней части страницы «Изменить подробности», которая затем вызывает сценарий auth / password.php .

Чтобы изменить свой пароль, пользователи должны ввести свой текущий пароль, чтобы снизить риск несанкционированного изменения, а затем ввести новый пароль дважды, чтобы минимизировать вероятность ошибки при вводе.Смена пароля подтверждается сценарием авторизации auth / changepassword.php. Квитанция об успешном изменении отображается путем перенаправления пользователя на страницу сведений о клиенте customer / details.php, , которая затем отображает подтверждающее сообщение; мы решили не добавлять страницу квитанции в этот модуль, потому что в ней нет необходимости, когда нет информации, которую пользователь должен записать.

Неудачная попытка смены пароля перенаправляет пользователя на auth / password.php , где отображаются сообщения об ошибках.

Аутентификация

Остальные три сценария авторизации auth / login.php , auth / logincheck.php и auth / logout.php показаны на рисунке 16-2. Эти сценарии продолжают наши реальные примеры создания модуля аутентификации.

Сценарий auth / login.php создает форму для ввода пользователем своего адреса электронной почты и пароля.Сценарий auth / logincheck.php проверяет адрес электронной почты и пароль и проверяет, является ли соответствующий пользователь участником. Если это так, сценарий регистрирует пользователя в приложении и перенаправляет пользователя на сценарий главной страницы index.php , где их статус входа отображается в верхней части страницы. Если процесс входа не удается, они возвращаются на auth / login.php и отображаются ошибки.

Сценарий auth / logout.php выводит пользователя из приложения и перенаправляет его на главную страницу index.php ; сценарий выхода не производит вывода. На рисунке 16-2 также показаны три сценария с рисунка 16-1, которые взаимодействуют с процессами входа в систему и выхода из системы.

Рисунок 16-2. Дополнительная архитектура приложения winestore

Корзина

Скрипты корзины покупок cart / showcart.php , cart / updatecart.php и cart / emptycart.php показаны на рисунке 16- 1. Эти сценарии показывают вам, как создать масштабируемую корзину покупок на основе базы данных, используя методы, описанные в главах 5 и 8, а также методы сеансов в главе 10 и базовые методы запросов к веб-базе данных из главы 6.

Скрипт cart / showcart.php показывает пользователю содержимое его корзины покупок. Если в корзине есть товары, количества представлены в форме, позволяющей пользователю изменять их. Сценарий просмотра корзины cart / showcart.php также позволяет пользователю вернуться на домашнюю страницу, выполнить поиск, войти в систему и выйти из нее.

Чтобы обновить изменения в количествах, скрипт cart / updatecart.php запрашивается нажатием кнопки «Обновить количества»; этот сценарий перенаправляет на cart / showcart.php и либо показывает пользователю правильно обновленные количества, либо сообщает об ошибке, описывающей причину сбоя обновления.

Пользователь также может полностью очистить свою корзину, нажав кнопку, запрашивающую скрипт cart / emptycart.php.

Заказ и доставка

Процессы заказа и доставки реализованы в скриптах order / order-step1.php , order / order-step2.php , order / order-step3.php , order / order-step4.php , order / order-step5.php и order / receive.php .Эти сценарии показывают все аспекты ввода данных, запросов, записи в базы данных с использованием блокировок, проверки и квитанций, и они используют большинство методов, обсуждаемых в главах 5–10.

Пользователи, вошедшие в систему, размещают заказы, щелкая на кнопке Совершить покупку на экране просмотра корзины. При нажатии на кнопку запрашивается сценарий order / order-step1.php и отображается форма, в которой пользователю требуется ввести номер своей кредитной карты и дату истечения срока действия, а также любые дополнительные инструкции по доставке.Приложение поддерживает вымышленную кредитную карту SurchargeCard, которая проверяется в соответствии с алгоритмом Луна, описанным в главе 9.

Когда пользователь отправляет форму кредитной карты, для выполнения проверки запрашивается сценарий order / order-step2.php . Если карта проверяется, то скрипт перенаправляется на order / order-step3.php , в противном случае скрипт возвращается на order / order-step1.php и отображает сообщения об ошибках.

Сложная обработка базы данных, используемая для завершения заказа, выполняется с помощью шага заказа / заказа3.php . Если процесс заказа завершается неудачно, сценарий перенаправляется на order-step1.php , где сообщается об ошибках. Если процесс заказа успешен, он перенаправляется на order / order-step4.php. Этот скрипт отправляет пользователю квитанцию ​​по электронной почте о его заказе и перенаправляет его на order / receive.php, который показывает пользователю ту же квитанцию, что и HTML-страница. Из order / Receiver.php пользователь может вернуться на домашнюю страницу.

Поиск и просмотр

Поиск и просмотр реализованы в скриптах search / searchform.php и search / search.php . Эти сценарии демонстрируют расширенный пример встраивания ссылок в документ HTML и создания раскрывающихся списков с использованием методов из главы 6. ​​Они также показывают, как добавить валидацию и сеансы в модуль запросов с помощью методов из глав 9 и 10.

Скрипт search / searchform.php показывает форму, которая позволяет пользователю вводить критерии поиска вина. Пользователи могут выбрать для просмотра определенный тип вина (например, красное или белое) и конкретный регион (например, Маргарет-Ривер).Они также могут выбрать для просмотра все типы вин или все регионы. Когда пользователь отправляет форму, запрашивается сценарий search / search.php . Критерии поиска сохраняются с использованием сеансов, когда пользователь повторно посещает страницу.

Скрипт search / search.php показывает вина, которые соответствуют критериям поиска на страницах по 12 вин в каждой, и пользователь может перемещаться по страницам, используя предыдущие и следующие ссылки, или щелкать ссылку с номером страницы для перехода к конкретная страница. Бутылки или ящики с вином можно добавить в корзину, щелкнув ссылку, которая запрашивает и передает параметры в корзину / addtocart.php скрипт.

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

16.2.1.2 Использование и доступ к исходному коду

Приложение winestore можно использовать на веб-сайте этой книги или на вашем локальном сервере, если вы следовали инструкциям по установке примеров из Приложения A к Приложению C. исходный код также можно просмотреть на веб-сайте книги и (при соблюдении инструкций по установке) отредактировать и просмотреть в каталоге / usr / local / apache2 / htdocs / wda2-winestore / на вашем локальном сервере Unix, в C: \ Program Files \ EasyPHP1-7 \ www \ wda2-winestore в Microsoft Windows или в / Library / WebServer / Documents / wda2-winestore в Mac OS X.Сводка скриптов и функций винного магазина приведена в Таблице 16-1.

действительный

шаг

3.

Таблица 16-1. Скрипты и функции магазина winestore

Скрипт

Функция

index.php

905 templates / index.tpl

Шаблон главной страницы

ВЕРСИЯ

Информация о версии приложения для разработчиков

лицензия.txt

Информация о лицензировании приложений

включает / Authenticate.inc

Функции аутентификации

0

Форма входа пользователя

auth / logincheck.php

Аутентификация входа пользователя

auth / logout.php

Выход из системы

auth / password.php

Форма смены пароля пользователя

смена пароля и пароля

обновить

cart / addtocart.php

Добавить товар в корзину

корзина / пусто.php

Очистите корзину

cart / showcart.php

Показать пользователю содержимое корзины

16 9.tpl templates / showc Шаблон корзины

cart / updatecart.php

Обновить количество корзины

клиент / детали.php

Введите или измените данные пользователя

customer / validate.php

Подтвердите и обновите измененные данные пользователя

клиент / квитанция

Квитанция об обновлении пользователя

templates / custreceipt.tpl

Шаблон квитанции об обновлении пользователя

заказ- заказ.php

Соберите данные кредитной карты и инструкции по доставке

order / order-step2.php

Подтвердите данные кредитной карты

step

Завершить заказ

order / order-step4.php

Отправить квитанцию ​​по электронной почте

order / чек.php

Показать квитанцию ​​о заказе в формате HTML

search / searchform.php

Собрать критерии поиска

  • 0
  • search / Browse search.ph4

    templates / search.tpl

    Шаблон просмотра вин

    включает / customHandler.inc

    Пользовательский обработчик ошибок

    templates / winestore.tpl

    Каркасный шаблон для всех страниц winestore

    5 details для большинства страниц формы winestore

    includes / validate.inc

    Функции проверки

    включает / winestore.inc

    Функции общего назначения и define () операторов

    includes / db.inc

    Учетные данные СУБД

    6 Использование системы входа в систему PHP и MySQL

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

    Это руководство состоит из 4 частей.


    1. Система регистрации
    2. Система входа в систему
    3. Страница приветствия
    4. Сценарий выхода

    1) Создание системы регистрации

    В этой части мы создадим систему регистрации, которая позволит пользователям создавать новую учетную запись в системе.Наш первый шаг — создать регистрационную форму HTML. Форму создать довольно просто. Он запрашивает только имя, адрес электронной почты, пароль и пароль для подтверждения. Адреса электронной почты будут уникальными для каждого пользователя. Использование нескольких учетных записей для одного и того же адреса электронной почты не допускается. Он покажет сообщение об ошибке пользователям, которые попытаются создать несколько учетных записей с одним и тем же адресом электронной почты.

    Шаг 1. Создание регистрационной формы в HTML

    Мы создадим файл PHP с именем register.php со следующим кодом в нем.Это простая HTML-форма с некоторой базовой проверкой. Если вы не знакомы с HTML, вы можете получить его на многих интернет-сайтах, которые предоставляют готовые шаблоны форм входа в систему html5.

    Вывод HTML-формы выше будет выглядеть следующим образом.

    Зарегистрироваться

    Все поля ввода обязательны с добавлением атрибута «обязательный» , который является атрибутом HTML по умолчанию. Использование type = "email" проверит адрес электронной почты, предоставленный пользователями, и выдаст ошибку, если адрес электронной почты недействителен.Для регистрационной формы мы использовали бутстрап для быстрой разработки. Если вы хотите сэкономить время на HTML-коде, вы всегда можете использовать несколько бесплатных шаблонов html5 для своего проекта.

    Шаг 2. Создание таблицы базы данных MySQL

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

    Шаг 3. Создание файла конфигурации базы данных

    Теперь мы создали таблицу пользователей.Давайте создадим новый файл PHP с именем config.php для подключения к базе данных MySQL. Вставьте следующий код в файл config.php и измените имя базы данных на любое, выбранное вами при создании базы данных.

    Шаг 4. Создание файла сеанса

    Создадим файл с именем session.php . В этом файле мы запустим сеанс и проверим, вошел ли уже пользователь в систему, если да, то мы перенаправим пользователя в файл welcome.php .

    Шаг 5. Создайте регистрационную форму в PHP

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

    Замените следующий код в файле register.php .

    После того, как пользователь нажмет кнопку отправки, он проверит, установлена ​​ли переменная $ _SERVER ["REQUEST_METHOD"] == "POST" и $ _POST ['submit'] .Из соображений безопасности мы всегда рекомендуем не хранить пароль в базе данных в виде обычного текста. Мы использовали функцию password_hash () , которая создает новый хэш пароля, используя надежный односторонний алгоритм хеширования.

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

    2) Создание системы входа в систему

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

    Шаг 1. Создание формы входа в HTML

    Ниже представлена ​​форма входа в HTML. Вставьте его в файл с именем login.php

    Результат вышеупомянутого кода будет выглядеть так:

    Логин

    Шаг 2. Создание системы входа в PHP

    После создания формы входа в систему в HTML мы напишем код для проверки учетных данных для входа.При отправке формы мы проверим, заполнены ли адрес электронной почты и пароль. Если они заполнены, мы выполним запрос SELECT , чтобы найти запись в базе данных на основе адреса электронной почты и пароля. Если какая-либо запись найдена, мы сохраним «userID» в сеансе, и пользователь будет перенаправлен в файл welcome.php , в противном случае пользователь получит сообщение об ошибке.

    Давайте заменим следующий код в файле login.php .

    3) Создание страницы приветствия

    Ниже приведен код для файла welcome.php . Пользователи будут перенаправлены на эту страницу после успешного входа в систему. Мы добавили код вверху страницы, чтобы проверить, не вошел ли пользователь в систему, а затем перенаправить пользователя на страницу входа.

    Давайте создадим файл welcome.php и вставим в него следующий код.

    4) Сценарий выхода из системы

    Наконец, давайте создадим выход из системы .php со следующим кодом.

    После того, как пользователь щелкнет ссылку Log Out , будет вызван приведенный выше сценарий для уничтожения сеанса и перенаправления пользователя к файлу login.php .

    Заключение

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

    MySQL :: Справочное руководство по MySQL 8.0 :: 13.7.1.3 CREATE USER Statement

    13.7.1.3 CREATE USER Заявление
      СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ [ЕСЛИ НЕ СУЩЕСТВУЕТ]
          пользователь  [ auth_option ] [,  user  [ auth_option ]] ...
        ПО УМОЛЧАНИЮ РОЛЬ  роль  [,  роль ] ...
        [ТРЕБУЕТСЯ {НЕТ |  tls_option  [[И]  tls_option ] ...}]
        [С  параметром_ресурса  [ параметром_ресурса ]...]
        [ password_option  |  lock_option ] ...
        [КОММЕНТАРИЙ ' comment_string ' | АТРИБУТ ' json_object ']
    
      пользователь :
        (см. Раздел 6.2.4, «Указание имен учетных записей»)
    
      auth_option : {
        ИДЕНТИФИЦИРОВАНО ' auth_string '
      | ОПРЕДЕЛЕННЫЙ СЛУЧАЙНЫМ ПАРОЛЕМ
      | ИДЕНТИФИЦИРОВАНО  auth_plugin 
      | ИДЕНТИФИЦИРОВАНО  auth_plugin  BY ' auth_string '
      | ИДЕНТИФИЦИРОВАНА С ПОМОЩЬЮ  auth_plugin  СЛУЧАЙНЫМ ПАРОЛЕМ
      | ИДЕНТИФИЦИРОВАНО  auth_plugin  AS ' auth_string '
    }
    
      tls_option : {
       SSL
     | X509
     | CIPHER ' cipher '
     | Эмитент " эмитент "
     | SUBJECT ' Subject '
    }
    
      resource_option : {
        MAX_QUERIES_PER_HOUR  количество 
      | MAX_UPDATES_PER_HOUR  количество 
      | MAX_CONNECTIONS_PER_HOUR  количество 
      | MAX_USER_CONNECTIONS  количество 
    }
    
      password_option : {
        ИСТОЧНИК ПАРОЛЯ [ПО УМОЛЧАНИЮ | НИКОГДА | ИНТЕРВАЛ  N  ДЕНЬ]
      | ИСТОРИЯ ПАРОЛЕЙ {ПО УМОЛЧАНИЮ |  N }
      | ИНТЕРВАЛ ПОВТОРНОГО ИСПОЛЬЗОВАНИЯ ПАРОЛЯ {ПО УМОЛЧАНИЮ |  N  ДЕНЬ}
      | ТРЕБУЕТСЯ ПАРОЛЬ [ПО УМОЛЧАНИЮ | ПО ЖЕЛАНИЮ]
      | FAILED_LOGIN_ATTEMPTS  N 
      | PASSWORD_LOCK_TIME { N  | НЕОГРАНИЧЕННЫЙ}
    }
    
      lock_option : {
        БЛОКИРОВКА УЧЕТНОЙ ЗАПИСИ
      | РАЗБЛОКИРОВКА СЧЕТА
    }  

    Оператор CREATE USER создает
    новые учетные записи MySQL.Он включает аутентификацию, роль, SSL / TLS,
    resource-limit и свойства управления паролями должны быть
    установлены для новых учетных записей. Он также контролирует,
    изначально заблокированы или разблокированы.

    Чтобы использовать CREATE USER , у вас должен быть
    глобальная привилегия CREATE USER ,
    или привилегия INSERT для
    Системная схема mysql . Когда
    read_only системная переменная
    включен, СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ дополнительно
    требуется CONNECTION_ADMIN
    привилегия (или устаревшая
    SUPER привилегия).

    Начиная с MySQL 8.0.22, СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ
    завершается с ошибкой, если любая создаваемая учетная запись названа как
    DEFINER атрибут для любого сохраненного объекта.
    (То есть утверждение не выполняется, если создание учетной записи вызовет
    учетную запись, чтобы принять в настоящее время осиротевший хранимый объект.)
    все равно выполнить операцию, у вас должен быть
    SET_USER_ID привилегия; в этом
    В этом случае инструкция завершается успешно с предупреждением, а не с ошибкой
    с ошибкой.Без
    SET_USER_ID , чтобы выполнить
    операция создания пользователя, отбросьте бесхозные объекты, создайте
    учетной записи и предоставьте ее привилегии, а затем заново создайте удаленный
    объекты. Для получения дополнительной информации, в том числе о том, как идентифицировать
    какие объекты называют данную учетную запись
    Атрибут DEFINER , см.
    Сиротские хранимые объекты.

    CREATE USER либо успешно для
    всех названных пользователей или откатывается и не действует, если какая-либо ошибка
    имеет место.По умолчанию при попытке создать пользователя возникает ошибка.
    это уже существует. Если ЕСЛИ НЕ СУЩЕСТВУЕТ
    дается предложение, оператор выдает предупреждение для каждого названного
    пользователь, который уже существует, а не ошибка.

    У CREATE есть несколько аспектов.
    Заявление USER
    , описанное в следующих разделах:

    Для каждой учетной записи СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ
    создает новую строку в файле mysql .пользовательская система
    Таблица. Строка учетной записи отражает свойства, указанные в
    заявление. Неуказанные свойства устанавливаются по умолчанию
    значения:

    • Аутентификация: плагин аутентификации, определяемый
      default_authentication_plugin
      системная переменная и пустые учетные данные

    • Роль по умолчанию: НЕТ

    • SSL / TLS: НЕТ

    • Лимиты ресурсов: Без ограничений

    • Управление паролями: СРОК СРОК ДЕЙСТВИЯ ПАРОЛЯ ПО УМОЛЧАНИЮ
      ПАРОЛЬ ИСТОРИЯ ПО УМОЛЧАНИЮ ПАРОЛЬ ПОВТОРНОЕ ИСПОЛЬЗОВАНИЕ ИНТЕРВАЛ ПО УМОЛЧАНИЮ
      ТРЕБУЕТСЯ ПАРОЛЬ ПО УМОЛЧАНИЮ
      ; не удалось войти
      отслеживание и временная блокировка аккаунта отключены

    • Блокировка счета: РАЗБЛОКИРОВКА АККАУНТА

    Учетная запись при первом создании не имеет привилегий и используется по умолчанию.
    роль НЕТ .Чтобы назначить привилегии или
    ролей используйте оператор GRANT .

    Каждое имя учетной записи использует формат, описанный в
    Раздел 6.2.4, «Указание имен учетных записей». Например:

      СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost', ОПРЕДЕЛЕННЫЙ ' паролем ';  

    Часть имени хоста в имени учетной записи, если она не указана, используется по умолчанию.
    к % .

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

    Следуя спецификациям пользователя ,
    заявление может включать опции для SSL / TLS, ограничения ресурса,
    управление паролями и свойства блокировки.Все такие варианты
    глобальные к заявлению и применяются к
    всех счетов, указанных в выписке.

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

      СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost'
      ИДЕНТИФИЦИРОВАНО ' новый_пароль ' ИСКЛЮЧЕНИЕ ПАРОЛЯ;  

    Пример: создайте учетную запись, которая использует
    caching_sha2_password Плагин аутентификации
    и заданный пароль.Требовать выбора нового пароля
    каждые 180 дней и включите отслеживание неудачных попыток входа, чтобы
    три последовательных неверных пароля вызывают временную учетную запись
    блокировка на два дня:

      СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost'
      ИДЕНТИФИЦИРОВАНО caching_sha2_password ПО « new_password »
      ИНТЕРВАЛ ИСТЕЧЕНИЯ ПАРОЛЯ 180 ДНЕЙ
      FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 2;  

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

      СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ
      'jeffrey' @ 'localhost' ИДЕНТИФИЦИРОВАН mysql_native_password
                                       BY ' new_password1 ',
      'jeanne' @ 'localhost' ИДЕНТИФИЦИРОВАНО caching_sha2_password
                                      BY ' new_password2 '
      ТРЕБУЕТСЯ X509 С MAX_QUERIES_PER_HOUR 60
      ИСТОРИЯ ПАРОЛЕЙ 5
      БЛОКИРОВКА СЧЕТА;  

    Каждые auth_option значение
    ( ИДЕНТИФИЦИРОВАН... BY в данном случае)
    применяется только к учетной записи, названной непосредственно перед ней, поэтому
    каждая учетная запись использует следующую аутентификацию
    плагин и пароль.

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

    • Соединения должны выполняться с использованием действующего сертификата X.509.

    • Допускается до 60 запросов в час.

    • При изменении пароля нельзя повторно использовать ни один из пяти последних
      пароли.

    • Учетная запись изначально заблокирована, поэтому фактически это
      заполнитель и не может использоваться до тех пор, пока администратор
      разблокирует его.

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

    • Комментарий пользователя

      Чтобы установить комментарий пользователя, добавьте КОММЕНТАРИЙ
      ' user_comment '
      в
      CREATE USER оператор, где
      user_comment — текст
      комментарий пользователя.

      Пример (без других опций):

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jon' @ 'localhost' КОММЕНТАРИЙ 'Некоторая информация о Джоне';  
    • Атрибут пользователя

      Атрибут пользователя — это объект JSON, состоящий из одного или нескольких
      пары ключ-значение и задаются включением
      АТРИБУТ
      ' json_object '
      как часть
      из СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ . json_object должен быть действительным
      Объект JSON.

      Пример (без других опций):

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jim' @ 'localhost'
          АТРИБУТ '{"имя": "Джеймс", "имя": "Скотт", "телефон": "123-456-7890"}';  

    Комментарии пользователей и атрибуты пользователей хранятся вместе в
    АТРИБУТ столбец
    ИНФОРМАЦИЯ_СХЕМА.USER_ATTRIBUTES
    Таблица. Этот запрос отображает строку в этой таблице, вставленную пользователем
    только что показанный оператор для создания пользователя
    джин @ localhost :

      mysql> ВЫБРАТЬ * ИЗ INFORMATION_SCHEMA.USER_ATTRIBUTES
        -> ГДЕ ПОЛЬЗОВАТЕЛЬ = 'jim' И ХОСТ = 'localhost' \ G
    ************************** 1. строка ******************** *******
         ПОЛЬЗОВАТЕЛЬ: Джим
         ВЕДУЩИЙ: localhost
    АТРИБУТ: {"fname": "Джеймс", "lname": "Скотт", "phone": "123-456-7890"}
    1 ряд в комплекте (0.00 сек)  

    Вариант КОММЕНТАРИЙ на самом деле обеспечивает
    ярлык для установки атрибута пользователя, единственный элемент которого имеет
    комментарий в качестве ключа, значение которого
    аргумент, предоставленный для опции. Вы можете увидеть это по
    выполнение инструкции CREATE USER 'jon' @ 'localhost'
    КОММЕНТАРИЙ 'Некоторая информация о Джоне'
    и наблюдение
    строка, которую он вставляет в
    USER_ATTRIBUTES таблица:

      mysql> СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jon' @ 'localhost' КОММЕНТАРИЙ 'Некоторая информация о Джоне';
    Запрос выполнен, затронуты 0 строк (0.06 сек)
    
    mysql> ВЫБРАТЬ * ИЗ ИНФОРМАЦИИ_SCHEMA.USER_ATTRIBUTES
        -> ГДЕ ПОЛЬЗОВАТЕЛЬ = 'Джон' И ХОСТ = 'локальный хост';
    + ------ + ----------- + ------------------------------ ------------- +
    | ПОЛЬЗОВАТЕЛЬ | ВЕДУЩИЙ | АТРИБУТ |
    + ------ + ----------- + ------------------------------ ------------- +
    | Джон | localhost | {"comment": "Немного информации о Джоне"} |
    + ------ + ----------- + ------------------------------ ------------- +
    1 ряд в комплекте (0,00 сек)  

    Вы не можете использовать КОММЕНТАРИЙ и
    АТРИБУТ вместе в одном
    CREATE USER инструкция; пытаюсь сделать это
    вызывает синтаксическую ошибку.Чтобы установить комментарий пользователя одновременно с
    установив атрибут пользователя, используйте ATTRIBUTE и
    включить в свой аргумент значение с
    комментарий ключ, например:

      mysql> СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'bill' @ 'localhost'
        -> АТРИБУТ '{"fname": "Уильям", "lname": "Шмидт",
        -> "комментарий": "Разработчик сайта"} ';
    Запрос в порядке, затронуты 0 строк (0,16 сек)  

    Поскольку содержимое строки ATTRIBUTE является
    JSON, вы можете использовать любой подходящий MySQL JSON
    функции или операторы для управления им, как показано здесь:

      mysql> ВЫБРАТЬ
        -> ПОЛЬЗОВАТЕЛЬ КАК Пользователь,
        -> ХОЗЯИН КАК Хост,
        -> СЦЕПИТЬ (АТРИБУТ - >> "$.fname "," ", АТРИБУТ - >>" $. lname ") AS 'Полное имя',
        -> АТРИБУТ - >> "$. Comment" AS Комментарий
        -> ИЗ INFORMATION_SCHEMA.USER_ATTRIBUTES
        -> ГДЕ ПОЛЬЗОВАТЕЛЬ = 'счет' И ХОСТ = 'локальный хост';
    + ------ + ----------- + ----------------- + ------------ ------- +
    | Пользователь | Хост | Полное имя | Комментарий |
    + ------ + ----------- + ----------------- + ------------ ------- +
    | счет | localhost | Уильям Шмидт | Разработчик веб-сайтов |
    + ------ + ----------- + ----------------- + ------------ ------- +
    1 ряд в комплекте (0.00 сек)  

    Чтобы установить или внести изменения в пользовательский комментарий или пользовательский
    атрибут для существующего пользователя, вы можете использовать
    КОММЕНТАРИЙ или АТРИБУТ
    вариант с ALTER USER
    утверждение.

    Поскольку пользовательский комментарий и пользовательский атрибут сохраняются
    вместе внутри в едином
    JSON столбец, устанавливает верхний
    ограничение на их максимальный комбинированный размер; видеть
    Требования к хранилищу JSON, подробнее
    Информация.

    См. Также описание информационной схемы.
    USER_ATTRIBUTES таблица для получения дополнительной информации
    информация и примеры.

    СОЗДАТЬ параметры аутентификации ПОЛЬЗОВАТЕЛЯ

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

    Примечание

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

    • auth_plugin именует
      плагин аутентификации. Имя плагина можно заключить в кавычки.
      строковый литерал или имя без кавычек.Имена плагинов
      хранится в подключаемом модуле столбце
      mysql.user системная таблица.

      Для auth_option синтаксис, который
      не указывает плагин аутентификации, по умолчанию
      плагин обозначается значением
      default_authentication_plugin
      системная переменная. Описание каждого плагина см.
      Раздел 6.4.1, «Плагины аутентификации».

    • Учетные данные, которые хранятся внутри, хранятся в
      mysql.user системная таблица. An
      ' auth_string '
      значение или СЛУЧАЙНЫЙ ПАРОЛЬ указывает
      учетные данные в виде открытого текста (в незашифрованном виде)
      строка или хеширование в формате, ожидаемом
      плагин аутентификации, связанный с учетной записью,
      соответственно:

      • Для синтаксиса, использующего BY
        ' auth_string '
        ,
        строка является открытым текстом и передается в
        плагин аутентификации для возможного хеширования.Результат
        возвращаемый плагином сохраняется в
        mysql.user таблица. Плагин может использовать
        значение, как указано, и в этом случае хеширование не выполняется
        имеет место.

      • Для синтаксиса, использующего BY RANDOM
        ПАРОЛЬ
        , MySQL генерирует случайный пароль
        и как открытый текст и передает его аутентификации
        плагин для возможного хеширования.Результат, возвращенный
        плагин хранится в
        mysql.user таблица. Плагин может использовать
        значение, как указано, и в этом случае хеширование не выполняется
        имеет место.

        Случайно сгенерированные пароли доступны в MySQL.
        8.0.18 и имеют характеристики, описанные в
        Генерация случайного пароля.

      • Для синтаксиса, использующего AS
        ' auth_string '
        ,
        предполагается, что строка уже имеет формат
        плагин аутентификации требует и хранится как есть в
        файл mysql.таблица пользователя . Если плагин
        требуется хешированное значение, значение должно быть уже
        хеширование в формате, подходящем для плагина;
        в противном случае значение не может быть использовано плагином и
        правильная аутентификация клиентских подключений не
        происходить.

        Начиная с MySQL 8.0.17, хешированная строка может быть либо
        строковый литерал или шестнадцатеричное значение. Последний
        соответствует типу значения, отображаемого
        SHOW CREATE USER для
        хэши паролей, содержащие непечатаемые символы, когда
        в
        print_identified_with_as_hex
        системная переменная включена.

      • Если плагин аутентификации не выполняет хеширование
        строка аутентификации, BY
        ' auth_string '
        и
        AS
        ' auth_string '

        предложения имеют тот же эффект: аутентификация
        строка хранится как в
        mysql.user системная таблица.

    СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ разрешает эти
    auth_option синтаксисы:

    • ИДЕНТИФИЦИРОВАНО
      ' auth_string '

      Устанавливает плагин аутентификации учетной записи по умолчанию
      плагин, передает открытый текст
      ' auth_string '
      значение плагина для возможного хеширования и сохраняет
      результат в строке счета в
      MySQL.Системная таблица пользователя .

    • ОПРЕДЕЛЕНО СЛУЧАЙНЫМ ПАРОЛЕМ

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

    • ИДЕНТИФИЦИРОВАНО
      auth_plugin

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

    • ИДЕНТИФИЦИРОВАНО
      auth_plugin BY
      ' auth_string '

      Устанавливает плагин аутентификации учетной записи на
      auth_plugin , передает
      открытый текст
      ' auth_string '
      значение плагина для возможного хеширования и сохраняет
      результат в строке счета в
      MySQL.Системная таблица пользователя .

    • ИДЕНТИФИЦИРОВАНО
      auth_plugin СЛУЧАЙНО
      ПАРОЛЬ

      Устанавливает плагин аутентификации учетной записи на
      auth_plugin , генерирует случайный
      пароль, передает значение пароля в открытом виде в
      плагин для возможного хеширования и сохраняет результат в
      строка account в файле mysql.пользовательская система
      Таблица. Оператор также возвращает пароль в открытом виде.
      в результирующем наборе, чтобы сделать его доступным для пользователя или
      приложение, выполняющее инструкцию. Подробнее о
      набор результатов и характеристики случайно сгенерированных
      пароли, см.
      Генерация случайного пароля.

    • ИДЕНТИФИЦИРОВАНО
      auth_plugin AS
      ' auth_string '

      Устанавливает плагин аутентификации учетной записи на
      auth_plugin и хранит
      ' auth_string '
      значение, как в MySQL .аккаунт пользователя
      строка. Если плагину требуется хешированная строка, она будет
      предполагается, что уже хеширован в формате плагина
      требует.

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

      СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost'
      ОПРЕДЕЛЯЕТСЯ ' паролем ';  

    Пример: укажите плагин аутентификации вместе с
    значение пароля в открытом виде:

      СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost'
      ИДЕНТИФИЦИРОВАНО mysql_native_password ПО ' пароль ';  

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

    Для получения дополнительной информации об установке паролей и
    плагины аутентификации, см.
    Раздел 6.2.14, «Назначение паролей учетных записей» и
    Раздел 6.2.17, «Подключаемая аутентификация».

    Пункт DEFAULT ROLE определяет, какие роли
    становятся активными, когда пользователь подключается к серверу и
    аутентифицирует, или когда пользователь выполняет
    УСТАНОВИТЬ РОЛЬ
    DEFAULT
    во время сеанса.

    Каждое имя роли использует формат, описанный в
    Раздел 6.2.5, «Указание имен ролей». Например:

      СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'joe'@'10.0.0.1' РОЛЬ ПО УМОЛЧАНИЮ администратор, разработчик;  

    Часть имени хоста в имени роли, если она не указана, по умолчанию
    % .

    Пункт DEFAULT ROLE разрешает список
    одно или несколько имен ролей, разделенных запятыми. Эти роли не должны
    существуют в то время СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ
    выполняется.

    CREATE USER SSL / TLS Options

    MySQL может проверять атрибуты сертификата X.509 в дополнение к
    обычная аутентификация, основанная на имени пользователя и
    реквизиты для входа. Для справочной информации об использовании SSL / TLS
    с MySQL см. Раздел 6.3, «Использование зашифрованных соединений».

    Чтобы указать параметры SSL / TLS для учетной записи MySQL, используйте
    REQUIRE Предложение , определяющее один или несколько
    tls_option значения.

    Порядок ТРЕБОВАТЬ опций значения не имеет,
    но ни один из вариантов не может быть указан дважды. В
    Ключевое слово И является необязательным между
    ТРЕБУЕТСЯ опций.

    СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ разрешает эти
    tls_option значения:

    • НЕТ

      Указывает, что все счета, указанные в выписке, не имеют
      SSL или X.509 требований. Незашифрованные соединения
      разрешено, если имя пользователя и пароль действительны.
      По желанию клиента могут использоваться зашифрованные соединения.
      если у клиента есть соответствующий сертификат и файлы ключей.

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost' НЕ ТРЕБУЕТСЯ НЕТ;  

      Клиенты пытаются установить безопасное соединение с помощью
      дефолт. Для клиентов, у которых есть ТРЕБУЕТСЯ
      НЕТ
      , попытка подключения возвращается к
      незашифрованное соединение, если безопасное соединение не может быть
      учредил.Чтобы потребовать зашифрованное соединение, клиент
      нужно указать только
      --ssl-mode = ТРЕБУЕТСЯ
      вариант; попытка подключения не удалась, если безопасный
      соединение не может быть установлено.

      НЕТ — значение по умолчанию, если не связано с SSL
      REQUIRE Указаны параметры .

    • SSL

      Сообщает серверу разрешить только зашифрованные соединения для
      все счета, указанные в выписке.

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost' ТРЕБУЕТСЯ SSL;  

      Клиенты пытаются установить безопасное соединение с помощью
      дефолт. Для аккаунтов с ТРЕБУЕТСЯ
      SSL
      , попытка подключения не удалась, если безопасный
      соединение не может быть установлено.

    • X509

      Для всех счетов, указанных в заявлении, требуется, чтобы
      клиенты представляют действующий сертификат, но точный
      сертификат, эмитент и тема не имеют значения.Единственный
      требование состоит в том, что должна быть возможность проверить его
      подпись одним из сертификатов ЦС. Использование X.509
      сертификаты всегда подразумевают шифрование, поэтому
      Параметр SSL в этом случае не нужен.

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost' REQUIRE X509;  

      Для счетов с REQUIRE X509 клиенты
      необходимо указать --ssl-key
      и --ssl-cert варианты для
      соединять.(Рекомендуется, но не обязательно,
      --ssl-ca также необходимо указать
      чтобы публичный сертификат, предоставленный сервером, мог
      быть проверенным.) Это верно для ЭМИТЕНТА
      и SUBJECT , потому что те
      ТРЕБОВАТЬ варианты подразумевают требования
      из X509 .

    • ЭМИТЕНТ
      ' эмитент '

      Для всех счетов, указанных в заявлении, требуется, чтобы
      клиенты представляют действительный сертификат X.509 сертификат, выданный ЦС
      ' эмитент ' . Если
      клиент представляет действительный сертификат, но имеет
      другой эмитент, сервер отклоняет соединение. Использовать
      сертификатов X.509 всегда подразумевает шифрование, поэтому
      Параметр SSL в этом случае не нужен.

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost'
        ТРЕБУЕТСЯ ЭМИТЕНТА '/ C = SE / ST = Stockholm / L = Stockholm /
          O = MySQL / CN = CA / emailAddress = ca @ example.com ';  

      Поскольку ЭМИТЕНТ подразумевает требования
      из X509 , клиенты должны указать
      --ssl-key и
      --ssl-cert варианты для
      соединять. (Рекомендуется, но не обязательно,
      --ssl-ca также необходимо указать
      чтобы публичный сертификат, предоставленный сервером, мог
      быть проверено.)

    • ТЕМА
      ' субъект '

      Для всех счетов, указанных в заявлении, требуется, чтобы
      клиенты представляют действительный сертификат X.509 сертификат, содержащий
      субъект субъект . Если клиент
      представляет сертификат, который действителен, но имеет другой
      субъект, сервер отклоняет соединение. Использование X.509
      сертификаты всегда подразумевают шифрование, поэтому
      Параметр SSL в этом случае не нужен.

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost'
        ТРЕБУЕТСЯ ТЕМА '/ C = SE / ST = Stockholm / L = Stockholm /
          O = демонстрационный клиентский сертификат MySQL /
          CN = client / emailAddress = client @ example.com ';  

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

      Поскольку SUBJECT подразумевает
      требования X509 , клиенты должны
      укажите --ssl-key и
      --ssl-cert варианты для
      соединять.(Рекомендуется, но не обязательно,
      --ssl-ca также необходимо указать
      чтобы публичный сертификат, предоставленный сервером, мог
      быть проверено.)

    • ШИФР
      ' шифр '

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

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost'
        ТРЕБУЕТСЯ ШИФРА «EDH-RSA-DES-CBC3-SHA»;  

    SUBJECT , ISSUER и
    CIPHER Опции могут быть объединены в
    ТРЕБОВАТЬ пункт:

      СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost'
      ТРЕБУЕТСЯ ТЕМА '/ C = SE / ST = Stockholm / L = Stockholm /
        O = демонстрационный клиентский сертификат MySQL /
        CN = client / emailAddress = client @ example.com '
      И Эмитент '/ C = SE / ST = Stockholm / L = Stockholm /
        O=MySQL/CN=CA/[email protected] '
      И ШИФР 'EDH-RSA-DES-CBC3-SHA';  
    CREATE USER Resource-Limit Options

    Можно установить ограничения на использование ресурсов сервера
    учетной записи, как описано в Раздел 6.2.20, «Установка ограничений ресурсов учетной записи».
    Для этого используйте предложение WITH , которое указывает
    одно или несколько resource_option значений.

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

    СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ разрешает эти
    resource_option значения:

    • MAX_QUERIES_PER_HOUR
      кол-во
      ,
      MAX_UPDATES_PER_HOUR
      кол-во
      ,
      MAX_CONNECTIONS_PER_HOUR
      кол-во

      Для всех счетов, указанных в выписке, эти параметры
      ограничить количество запросов, обновлений и подключений к
      сервер разрешен для каждой учетной записи в течение любого заданного
      часовой период.Если count
      0 (по умолчанию), это означает, что есть
      нет ограничений для учетной записи.

    • MAX_USER_CONNECTIONS
      кол-во

      Для всех счетов, указанных в заявлении, ограничивает
      максимальное количество одновременных подключений к серверу
      по каждой учетной записи. Ненулевой
      count задает предел для
      аккаунт явно.Если
      счет это 0
      (по умолчанию) сервер определяет количество
      одновременные подключения к аккаунту из глобальной
      ценность
      max_user_connections
      системная переменная. Если
      max_user_connections — это
      тоже ноль, лимита на счет нет.

    Пример:

      СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost'
      С MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;  
    СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ Параметры управления паролями

    CREATE USER поддерживает несколько
    password_option значения пароля
    управление:

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

    • Параметры повторного использования пароля: вы можете ограничить повторное использование пароля
      в зависимости от количества смен пароля, прошедшего времени или
      оба.

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

    • Параметры отслеживания неудачного входа в систему с неверным паролем: вы можете
      заставляют сервер отслеживать неудачные попытки входа в систему и
      временно заблокировать учетные записи, для которых слишком много последовательных
      даны неверные пароли. Необходимое количество
      сбои и время блокировки настраиваются.

    В этом разделе описан синтаксис для управления паролями.
    опции. Для получения информации об установлении политики для
    управление паролями, см.
    Раздел 6.2.15, «Управление паролями».

    Если несколько параметров управления паролями заданного типа
    указано, последний имеет приоритет. Например,
    ИСТОЧНИК ПАРОЛЯ ПО УМОЛЧАНИЮ ИСТОЧНИК ПАРОЛЯ ПО УМОЛЧАНИЮ
    НИКОГДА
    не совпадает с ПАРОЛЬ EXPIRE
    НИКОГДА
    .

    Примечание

    За исключением параметров, относящихся к неудачному входу в систему
    отслеживание, параметры управления паролями применяются только к учетным записям
    которые используют плагин аутентификации, который хранит учетные данные
    внутри MySQL.Для учетных записей, использующих плагин,
    выполняет аутентификацию по системе учетных данных, которая
    внешний по отношению к MySQL, управление паролями должно осуществляться
    внешне против этой системы. За дополнительной информацией
    о внутреннем хранилище учетных данных см.
    Раздел 6.2.15, «Управление паролями».

    У клиента просрочен пароль, если пароль учетной записи был
    истек вручную или считается, что срок действия пароля больше
    чем его разрешенный срок службы на автоматическое истечение срока
    политика.В этом случае сервер либо отключает клиента
    или ограничивает разрешенные ему операции (см.
    Раздел 6.2.16, «Обработка сервером просроченных паролей»). Операции
    выполняется ограниченным клиентом, приводит к ошибке до тех пор, пока
    пользователь устанавливает новый пароль учетной записи.

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

    • ИСТОЧНИК ПАРОЛЯ

      Сразу помечает, что срок действия пароля истек для всех учетных записей
      названный в заявлении.

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost' ИСТОЧНИК ПАРОЛЯ;  
    • ПО УМОЛЧАНИЮ ИСТОЧНИК ПАРОЛЯ

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

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost' ПАРОЛЬ ИСКЛЮЧИТЬСЯ ПО УМОЛЧАНИЮ;  
    • ПАРОЛЬ НЕ СРОК ДЕЙСТВИЯ

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

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost' ПАРОЛЬ НЕ ИСПОЛЬЗУЕТСЯ НИКОГДА;  
    • ИНТЕРВАЛ ИСКЛЮЧЕНИЯ ПАРОЛЯ
      N ДЕНЬ

      Этот вариант истечения срока отменяет глобальную политику для всех
      счета, указанные в выписке. Для каждого он устанавливает
      Срок действия пароля до N дня.Следующее утверждение требует, чтобы пароль был
      меняется каждые 180 дней:

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost' ПАРОЛЬ ИСТОЧНИК ИНТЕРВАЛА 180 ДНЕЙ;  

    СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ разрешает эти
    password_option значения для
    контроль повторного использования предыдущих паролей в зависимости от необходимости
    минимальное количество смен пароля:

    • ИСТОРИЯ ПАРОЛЕЙ ПО УМОЛЧАНИЮ

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

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost' ИСТОРИЯ ПАРОЛЕЙ ПО УМОЛЧАНИЮ;  
    • ИСТОРИЯ ПАРОЛЯ
      N

      Этот параметр длины истории переопределяет глобальную политику для
      все счета, указанные в выписке. Для каждого он устанавливает
      длина истории паролей до N
      пароли, чтобы запретить повторное использование любого из
      N последний выбранный
      пароли.Следующее заявление запрещает повторное использование любых
      из 6 предыдущих паролей:

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost' ИСТОРИЯ ПАРОЛЕЙ 6;  

    СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ разрешает эти
    password_option значения для
    контроль повторного использования предыдущих паролей в зависимости от прошедшего времени:

    • ИНТЕРВАЛ ПОВТОРНОГО ИСПОЛЬЗОВАНИЯ ПАРОЛЯ ПО УМОЛЧАНИЮ

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

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost' ПАРОЛЬ ПОВТОРНОЕ ИСПОЛЬЗОВАНИЕ ИНТЕРВАЛ ПО УМОЛЧАНИЮ;  
    • ИНТЕРВАЛ ПОВТОРНОГО ИСПОЛЬЗОВАНИЯ ПАРОЛЯ
      N ДЕНЬ

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

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost' ПАРОЛЬ ПОВТОРНОЕ ИСПОЛЬЗОВАНИЕ ИНТЕРВАЛ 360 ДНЕЙ;  

    СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ разрешает эти
    password_option значения для
    контроль за попытками изменить пароль учетной записи
    необходимо указать текущий пароль в качестве подтверждения того, что
    пользователь, пытающийся внести изменение, действительно знает текущий
    пароль:

    • ТРЕБУЕТСЯ ПАРОЛЬ

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

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost' ТРЕБУЕТСЯ ПАРОЛЬ ТЕКУЩИЙ;  
    • ПАРОЛЬ ТРЕБУЕТСЯ ТЕКУЩИЙ ДОПОЛНИТЕЛЬНО

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

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost' ТРЕБУЕТСЯ ПАРОЛЬ ТЕКУЩИЙ ДОПОЛНИТЕЛЬНО;  
    • ПАРОЛЬ ТРЕБУЕТСЯ ПО УМОЛЧАНИЮ

      Устанавливает все операторы, названные учетной записью, так, чтобы
      применяется глобальная политика проверки пароля, так как
      указанный
      password_require_current
      системная переменная.

        СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost' ПАРОЛЬ ТРЕБУЕТСЯ ТЕКУЩИЙ ПО УМОЛЧАНИЮ;  

    Начиная с MySQL 8.0.19, СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ
    разрешает эти password_option
    значения для управления отслеживанием неудачных попыток входа в систему:

    • FAILED_LOGIN_ATTEMPTS
      N

      Следует ли отслеживать попытки входа в учетную запись с указанием
      неверный пароль. N должен быть
      число от 0 до 32767. Значение 0 отключает неудачный вход в систему.
      отслеживание. Значения больше 0 указывают, сколько
      последовательные сбои пароля вызывают временную учетную запись
      блокировка (если PASSWORD_LOCK_TIME также
      ненулевое).

    • PASSWORD_LOCK_TIME { N
      | UNBOUNDED}

      Как долго блокировать учетную запись после слишком большого количества операций подряд
      попытки входа в систему дают неверный пароль. N должно быть числом от 0 до
      32767 или НЕОГРАНИЧЕННЫЙ . Значение 0
      отключает временную блокировку учетной записи. Значения больше 0
      укажите, на какой срок блокировать учетную запись в днях. Ценность
      UNBOUNDED вызывает блокировку учетной записи
      продолжительность быть неограниченной; после блокировки учетная запись остается
      в заблокированном состоянии до разблокировки. Для получения информации о
      условия, при которых происходит разблокировка, см.
      Отслеживание неудачных попыток входа в систему и временная блокировка учетной записи.

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

      СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost'
      FAILED_LOGIN_ATTEMPTS 4 PASSWORD_LOCK_TIME 2;  
    СОЗДАТЬ параметры блокировки учетной записи ПОЛЬЗОВАТЕЛЯ

    MySQL поддерживает блокировку и разблокировку учетной записи с помощью
    БЛОКИРОВКА УЧЕТНОЙ ЗАПИСИ и УЧЕТНАЯ ЗАПИСЬ
    Опции UNLOCK
    , которые определяют состояние блокировки для
    счет.Для дополнительного обсуждения см.
    Раздел 6.2.19, «Блокировка учетной записи».

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

    СОЗДАТЬ ПОЛЬЗОВАТЕЛЬ Двоичный журнал

    СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ записывается в
    двоичный журнал в случае успеха, но не в случае сбоя; в таком случае,
    происходит откат без изменений. Заявление написано
    в двоичный журнал входят все указанные пользователи.Если IF
    НЕ СУЩЕСТВУЕТ пункт
    , он включает даже пользователей
    которые уже существуют и не были созданы.

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

    • Плагин, названный в исходном заявлении, если он был
      указано.

    • В противном случае плагин аутентификации по умолчанию.В
      в частности, если пользователь u1 уже существует
      и использует нестандартный плагин аутентификации, оператор
      записано в двоичный журнал для СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ, ЕСЛИ НЕ
      EXISTS u1
      называет аутентификацию по умолчанию
      плагин. (Если оператор, записанный в двоичный журнал, должен
      указать для пользователя плагин аутентификации не по умолчанию,
      включите его в исходное заявление.)

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

    Если в исходном заявлении указывается
    FAILED_LOGIN_ATTEMPTS или
    PASSWORD_LOCK_TIME опция, инструкция
    записанный в двоичный журнал включает параметр.

    Используете MySQL с PHP и GPL?

    Используете MySQL с PHP и GPL? — Обмен стеками с открытым исходным кодом

    Сеть обмена стеком

    Сеть Stack Exchange состоит из 178 сообществ вопросов и ответов, включая Stack Overflow, крупнейшее и пользующееся наибольшим доверием онлайн-сообщество, где разработчики могут учиться, делиться своими знаниями и строить свою карьеру.

    Посетить Stack Exchange

    1. 0

    2. +0

    3. Авторизоваться
      Зарегистрироваться

    Open Source Stack Exchange — это сайт вопросов и ответов для людей, занимающихся организацией, маркетингом или лицензированием проектов разработки с открытым исходным кодом.Регистрация займет всего минуту.

    Зарегистрируйтесь, чтобы присоединиться к этому сообществу

    Кто угодно может задать вопрос

    Кто угодно может ответить

    Лучшие ответы голосуются и поднимаются наверх

    Спросил

    Просмотрено
    576 раз

    Я разрабатываю собственное приложение, которое вызывает скрипт PHP с помощью POST-запросов.Скрипт PHP взаимодействует с сервером сообщества MySQL, который находится под лицензией GPL. Он считывает, вставляет и удаляет данные из базы данных MySQL только на сервере, где он установлен, и возвращает результаты в собственное приложение.

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

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

    Создан 17 авг.

    Ответ сложен. Если ваш PHP-код был выпущен под одной из лицензий с открытым исходным кодом в списке исключений MySQL FOSS License Exception, вам не нужно было бы выпускать его под GPL.

    Исключение из лицензии FOSS разрешает использование клиентских библиотек MySQL под лицензией GPL с программными приложениями, лицензированными в соответствии с некоторыми другими лицензиями FOSS, без того, чтобы вся производная работа подпадала под действие GPL.

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

    Вот похожие вопросы, которые я исследовал:

    Этот ответ на второй вопрос хорошо описывает ситуацию. Все зависит от того, как вы общаетесь с сервером MySQL.

    Вопрос в том, как ваша программа может использовать протокол MySQL? Одна из возможностей — использовать официальную клиентскую библиотеку MySQL (коннектор) под лицензией GPL. Если вы это сделаете, вы статически связываете свою программу с библиотекой под GPL, и, следовательно, вам нужно выпустить свое программное обеспечение под GPL.

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

    Создан 20 авг.

    Нет, если вы разрабатываете приложение с сервером на PHP + MySQL, вы обычно не распространяете серверную часть.Следовательно, это считается частным использованием, и вам не нужно выпускать какой-либо серверный код. Клиентская часть — это совершенно другая программа, поэтому на нее также не распространяется действие лицензии MySQL.

    Создан 21 авг.

    Zimm i48 Zimm i48

    1,955 1111 серебряных знаков3636 бронзовых знаков

    Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками gpl или задайте свой вопрос.

    Open Source Stack Exchange лучше всего работает с включенным JavaScript

    Ваша конфиденциальность

    Нажимая «Принять все файлы cookie», вы соглашаетесь с тем, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в ​​отношении файлов cookie.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *