MySQL / Хэрэглэгч ба эрх

Хэрэглэгч ба эрх

MySQL-д нэг сервер дээр олон хэрэглэгч байж болно. Хэрэглэгч бүр зөвхөн өөрт хэрэгтэй эрхтэй байх нь аюулгүй байдлын үндсэн зарчим.

Хамгийн бага эрхийн зарчим

Principle of least privilege — хэрэглэгч бүрт зөвхөн ажлаа хийхэд хангалттай хамгийн бага эрх олгох.

код
root           → зөвхөн DBA, хэзээ ч аппликейшнд ашиглахгүй
app_user       → зөвхөн тухайн database, SELECT/INSERT/UPDATE/DELETE
readonly_user  → зөвхөн SELECT
backup_user    → зөвхөн SELECT, LOCK TABLES

Аппликейшн root хэрэглэгчээр холбогдож байвал SQL injection халдлага бүх өгөгдлийг устгах боломжтой болно.

CREATE USER

sql
-- Хэрэглэгч үүсгэх
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'NuucUg@2025!';

-- Аль ч IP-ээс холбогдох зөвшөөрөлтэй
CREATE USER 'reporter'@'%' IDENTIFIED BY 'NuucUg@2025!';

-- Тодорхой IP-ээс
CREATE USER 'admin'@'192.168.1.10' IDENTIFIED BY 'NuucUg@2025!';

'username'@'host' — хэрэглэгчийн нэр ба холбогдох эх сурвалж хамт бүрдэж нэг хэрэглэгчийг тодорхойлдог. 'bold'@'localhost' ба 'bold'@'%' нь өөр өөр хэрэглэгч.

GRANT — эрх олгох

sql
-- Нэг database-н бүх хүснэгтэд бүрэн эрх
GRANT ALL PRIVILEGES ON myshop.* TO 'appuser'@'localhost';

-- Зөвхөн унших эрх
GRANT SELECT ON myshop.* TO 'reporter'@'%';

-- Тодорхой үйлдлүүд
GRANT SELECT, INSERT, UPDATE, DELETE ON myshop.* TO 'appuser'@'localhost';

-- Зөвхөн нэг хүснэгтэд
GRANT SELECT ON myshop.products TO 'reporter'@'%';

-- Зөвхөн тодорхой баганад
GRANT SELECT (id, username, email) ON myshop.users TO 'reporter'@'%';

-- Эрх олгосны дараа шинэчлэх
FLUSH PRIVILEGES;

Нийтлэг эрхүүд:

| Эрх | Утга | | ---------------- | ------------------------ | | SELECT | Унших | | INSERT | Нэмэх | | UPDATE | Өөрчлөх | | DELETE | Устгах | | CREATE | Хүснэгт, database үүсгэх | | DROP | Устгах | | INDEX | Index үүсгэх, устгах | | ALL PRIVILEGES | Бүх эрх |

SHOW GRANTS — эрх харах

sql
-- Одоогийн хэрэглэгчийн эрх
SHOW GRANTS;

-- Тодорхой хэрэглэгчийн эрх
SHOW GRANTS FOR 'appuser'@'localhost';
код
GRANT SELECT, INSERT, UPDATE, DELETE ON `myshop`.* TO `appuser`@`localhost`

REVOKE — эрх хураах

sql
-- Нэг эрх хураах
REVOKE DELETE ON myshop.* FROM 'appuser'@'localhost';

-- Бүх эрх хураах
REVOKE ALL PRIVILEGES ON myshop.* FROM 'appuser'@'localhost';

-- Эрх хураасны дараа шинэчлэх
FLUSH PRIVILEGES;

Нууц үг өөрчлөх

sql
-- Хэрэглэгчийн нууц үг өөрчлөх (root-оор)
ALTER USER 'appuser'@'localhost' IDENTIFIED BY 'ShineNuucUg@2025!';

-- Өөрийн нууц үг өөрчлөх
ALTER USER CURRENT_USER() IDENTIFIED BY 'ShineNuucUg@2025!';

FLUSH PRIVILEGES;

DROP USER — хэрэглэгч устгах

sql
-- Хэрэглэгч устгах (эрхүүд нь хамт устана)
DROP USER 'reporter'@'%';
DROP USER IF EXISTS 'olduser'@'localhost';

Бүх хэрэглэгч харах

sql
-- MySQL-н бүх хэрэглэгч
SELECT user, host FROM mysql.user;

Бодит жишээ: аппликейшны хэрэглэгч тохируулах

sql
-- 1. Аппликейшны хэрэглэгч — зөвхөн хэрэгтэй эрхтэй
CREATE USER 'shop_app'@'localhost' IDENTIFIED BY 'AppNuucUg!99';
GRANT SELECT, INSERT, UPDATE, DELETE ON myshop.* TO 'shop_app'@'localhost';

-- 2. Тайлангийн хэрэглэгч — зөвхөн унших
CREATE USER 'shop_reader'@'%' IDENTIFIED BY 'ReadNuucUg!99';
GRANT SELECT ON myshop.* TO 'shop_reader'@'%';

-- 3. Backup хэрэглэгч
CREATE USER 'shop_backup'@'localhost' IDENTIFIED BY 'BackupNuucUg!99';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON myshop.* TO 'shop_backup'@'localhost';

FLUSH PRIVILEGES;

Дараагийн хичээлд:

Backup ба restore — mysqldump ашиглан өгөгдлийг хадгалах, сэргээх аргыг үзнэ.