---
title: 'MySQL/MariaDB: аутентификация по UNIX‑сокету | Zomro'
description: ''
image: 'https://cdn.zomro.com/uploads/blog/a48%40server-panel.net/2025/10/31/01_7NDnE9m_q50.jpg'
---

![opened image]()

  * [Zomro](https://zomro.com/rus/)
  * [FAQ](https://zomro.com/rus/blog/faq/)
  * MySQL/MariaDB: аутентификация по UNIX‑сокету 



# MySQL/MariaDB: аутентификация по UNIX‑сокету

26-10-2025

Инструкция по настройке входа в MySQL или MariaDB **без пароля** через локальный UNIX‑сокет с привязкой к системному пользователю. В статье учтены различия между **MySQL 8.x** и **MariaDB 10.4+** , приведены готовые команды, проверки, диагностика, чек‑листы, а также рекомендации по эксплуатации на продакшене.

## Что такое «аутентификация по сокету» и когда её применять

**Идея:** сервер БД доверяет удостоверению ОС‑пользователя локальной машины. Если имя ОС‑пользователя совпадает (или явно смэплено) с именем БД‑пользователя, вход разрешается **без пароля** по локальному сокету `mysqld.sock`.

**Когда уместно:**

  * Локальная админка/CI на том же хосте, где крутится БД.

  * Системные задачи (бэкапы, миграции, Ansible/cron), когда секреты хранить нежелательно.




**Когда лучше не использовать в одиночку:**

  * Доступ по сети (TCP/127.0.0.1/::1/удалённо) — сокет здесь не работает; используйте пароли/ключи/TLS и минимум привилегий.




## Ключевые различия MySQL vs MariaDB

  * **MySQL 8.x:** плагин называется `auth_socket`. Допускается явное **соответствие ОС‑юзера** : `IDENTIFIED WITH auth_socket AS 'osuser'`.

  * **MariaDB 10.4+:** плагин называется `unix_socket`. Поддерживаются **составные методы** : `IDENTIFIED VIA unix_socket OR ed25519 USING PASSWORD('…')` и пр.




> Внимание: синтаксис различается — не путайте `auth_socket` (MySQL) и `unix_socket` (MariaDB).

## Расположение сокета и доступ

  * Типовой путь в Debian/Ubuntu: `/var/run/mysqld/mysqld.sock` (часто владельцем каталога является группа `mysql`).

  * Убедитесь, что ваш ОС‑пользователь имеет **доступ к каталогу и сокету** (через группу/права). Иногда достаточно добавить пользователя в группу `mysql` и перелогиниться.

  * В контейнерах/Docker путь может отличаться; пробросьте сокет томом, либо используйте TCP.




Проверка на клиенте:
    
    
    mysql_config --socket  # если установлен
    # или
    mysql --print-defaults | tr ' ' '\n' | grep -i socket
    

## 

![](https://cdn.zomro.com/uploads/blog/a48%40server-panel.net/2025/10/31/01_7NDnE9m_q50.jpg)

## 

## MySQL 8.x — настройка шаг за шагом

### Создайте/проверьте ОС‑пользователя
    
    
    # пример: системный пользователь 'deploy'
    sudo adduser --disabled-password --gecos "" deploy
    # при необходимости добавьте в группу mysql для доступа к каталогу сокета
    sudo usermod -aG mysql deploy
    

### 

![](https://cdn.zomro.com/uploads/blog/a48%40server-panel.net/2025/10/31/02_1TUKGo7_q50.jpg)

### Подключитесь под админом и создайте БД‑пользователя
    
    
    -- Вариант A: имя БД‑пользователя = имя ОС‑пользователя
    CREATE USER 'deploy'@'localhost' IDENTIFIED WITH auth_socket;
    GRANT ALL ON appdb.* TO 'deploy'@'localhost';
    
    -- Вариант B: сопоставление с иным ОС‑логином (например, 'ci')
    CREATE USER 'deploy'@'localhost' IDENTIFIED WITH auth_socket AS 'ci';
    GRANT ALL ON appdb.* TO 'deploy'@'localhost';
    

### 

### Тест входа
    
    
    # должен выполняться от имени соответствующего ОС‑пользователя
    sudo -u deploy mysql -u deploy -S /var/run/mysqld/mysqld.sock -e "SELECT USER(),CURRENT_USER();"
    

Ожидаемо `USER()` покажет ОС‑сеанс, `CURRENT_USER()` — учетную запись MySQL (`deploy@localhost`).

### 

### Проверки
    
    
    SELECT user, host, plugin FROM mysql.user WHERE user='deploy';
    SHOW VARIABLES LIKE 'socket';
    SHOW PLUGINS LIKE 'auth_socket';
    

## 

## 

## MariaDB 10.4+ — настройка шаг за шагом

### 

### ОС‑пользователь
    
    
    sudo adduser --disabled-password --gecos "" deploy
    sudo usermod -aG mysql deploy
    

### 

### БД‑пользователь c unix_socket
    
    
    -- Чистая аутентификация через сокет
    CREATE USER deploy@localhost IDENTIFIED VIA unix_socket;
    GRANT ALL ON appdb.* TO deploy@localhost;
    
    -- Комбинированная аутентификация (альтернативы)
    -- Разрешим вход по сокету ИЛИ по паролю для сетевых подключений
    CREATE USER admin@'%' IDENTIFIED VIA unix_socket OR ed25519 USING PASSWORD('S3cret!');
    GRANT ALL ON *.* TO admin@'%' WITH GRANT OPTION;
    

### 

### Тест и проверки
    
    
    sudo -u deploy mysql -u deploy -S /var/run/mysqld/mysqld.sock -e "SELECT USER(),CURRENT_USER();"
    
    
    
    -- В MariaDB 10.4+ привилегии хранятся в таблице mysql.global_priv
    SELECT user, host FROM mysql.global_priv WHERE user='deploy';
    SHOW VARIABLES LIKE 'socket';
    

## 

## 

## Политика для root и админ‑доступов

  * На Ubuntu/Debian `root@localhost` часто по умолчанию использует сокет‑аутентификацию. **Не переводите root на пароль ради удалённого доступа.**

  * Для удалённой админки создайте отдельного суперпользователя: ограничьте хосты (`'admin'@'10.0.%'`), включите TLS и регулярно ревизуйте привилегии.




## Типовые роли и паттерны эксплуатации

  * **Локальные сервисные учётки** (backup/rotate/etl): сокет‑аутентификация, минимальные привилегии на нужные БД.

  * **Приложения по TCP** : отдельные аккаунты с паролем/сертификатами, ограниченные хосты, TLS, принцип минимально необходимых прав.

  * **CI/CD** : локальный пользователь `ci` \+ `IDENTIFIED WITH auth_socket AS 'ci'` (MySQL), либо чистый `unix_socket` (MariaDB) + гранты только на схему приложения.




## Диагностика и устранение неполадок

**Симптом:** `Access denied` при входе без пароля.

  * Вы действительно запустили клиент от **верного ОС‑пользователя**? Проверьте `whoami` и используйте `sudo -u <user>`.

  * Клиент соединяется именно по **UNIX‑сокету** , а не по TCP? Добавьте `-S /path/to/mysqld.sock`.

  * Есть ли у пользователя доступ к каталогу сокета (`ls -ld /var/run/mysqld`)? Добавьте в группу `mysql` и перелогиньтесь.

  * На MySQL проверьте, что плагин `auth_socket` **активен** и назначен аккаунту (`SELECT user,host,plugin FROM mysql.user`).

  * На MariaDB проверьте `IDENTIFIED VIA unix_socket` у нужного аккаунта.




**Симптом:** «Не видит» сокет или «No such file or directory».

  * Уточните путь сокета через `SHOW VARIABLES LIKE 'socket';` и используйте его в `mysql -S …`.

  * Если сервер запущен в контейнере — пробросьте сокет томом или подключайтесь по TCP.




**Симптом:** Вошёл «не тот пользователь»/привилегий слишком много.

  * Проверьте `CURRENT_USER()` — именно он участвует в проверке привилегий.

  * Уточните гранты: `SHOW GRANTS FOR 'deploy'@'localhost';` и сократите лишнее.




## Безопасность

  * **Принцип наименьших привилегий:** на сокетных аккаунтах давайте только необходимые `SELECT/INSERT/UPDATE/…`.

  * **Аудит:** логируйте административные действия (general log/slow log/инструменты SIEM).

  * **Секреты:** не сохраняйте пароли там, где достаточно сокета, но документируйте **соответствие имён** (кто к кому маппится).

  * **SELinux/AppArmor:** убедитесь, что профили разрешают доступ к сокету для нужных пользователей/служб.




## Чек‑лист

**Перед настройкой**

  * Понимание: сокет работает **только локально** , по TCP не применяется.

  * Знаете точный путь сокета и права на каталог.

  * Созданы необходимые ОС‑пользователи; определены роли и границы привилегий.




**Настройка**

  * Для MySQL: `CREATE USER … IDENTIFIED WITH auth_socket [AS 'osuser']`.

  * Для MariaDB: `CREATE USER … IDENTIFIED VIA unix_socket` (при необходимости — составные методы).

  * Выданы минимально необходимые привилегии на схемы.




**Проверка**

  * Вход `sudo -u <user> mysql -u <dbuser> -S <sock>` успешен.

  * `CURRENT_USER()` совпадает с ожидаемой учеткой БД.

  * Гранты соответствуют принципу наименьших прав.




**Эксплуатация**

  * Задокументировано сопоставление ОС↔БД пользователей.

  * У админ‑учеток по сети — TLS и ограниченные хосты.

  * Включён аудит/логирование.




## Частые вопросы (FAQ)

  * **Можно ли оставить root на сокете, а для удалёнки завести admin@'%'?** — Да, это рекомендуемый путь. Root по сокету, отдельный суперпользователь для сети.
  * **Можно ли «и сокет, и пароль»?** — В MariaDB да (составные методы). В MySQL — создайте пару учеток (сокет для локала, парольная для сетевых задач) либо используйте конкретное сопоставление `AS 'osuser'`.
  * **Почему`mysql -u user` просит пароль?** — Вы запускаете не от того ОС‑пользователя; либо клиент ушёл по TCP. Добавьте `-S` и/или используйте `sudo -u <os_user>`.



## Итог

Аутентификация по UNIX‑сокету упрощает и укрепляет локальную работу с MySQL/MariaDB: не нужно хранить пароли, снижается риск утечек, повышается управляемость. Главное — правильно разделять роли, понимать различия между MySQL и MariaDB, удостовериться в доступе к сокету и документировать соответствия пользователей. Такой подход отлично сочетается с автоматизацией и строгой моделью привилегий на продакшене.

Похожие статьи

[Дисковые квоты на Linux: контроль использования дискового пространства](https://zomro.com/rus/blog/faq/723-disk-quotas-on-linux-controlling-disk-space-usage) [Как заказать услугу DNS хостинга в новом биллинге](https://zomro.com/rus/blog/faq/233-kak-zakazat-uslugu-dns-hostinga-v-novom-billinge) [Обновление и понижение версии PHP на системе CentOS 7](https://zomro.com/rus/blog/faq/434-upgrading-and-downgrading-php-on-centos-7) [ISP: Как добавить альтернативную версию PHP](https://zomro.com/rus/blog/faq/73-isp-kak-dobavit-alternativnuyu-versiyu-php) [Команда dig в Linux - использование и примеры.](https://zomro.com/rus/blog/faq/404-linux-d-command-usage-examples)

[ Сервер для Forex от €7.95/мес ](/rus/server-for-forex)
