Хэрэглэгч ба эрх
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
-- Хэрэглэгч үүсгэх
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 — эрх олгох
-- Нэг 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 — эрх харах
-- Одоогийн хэрэглэгчийн эрх
SHOW GRANTS;
-- Тодорхой хэрэглэгчийн эрх
SHOW GRANTS FOR 'appuser'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON `myshop`.* TO `appuser`@`localhost`
REVOKE — эрх хураах
-- Нэг эрх хураах
REVOKE DELETE ON myshop.* FROM 'appuser'@'localhost';
-- Бүх эрх хураах
REVOKE ALL PRIVILEGES ON myshop.* FROM 'appuser'@'localhost';
-- Эрх хураасны дараа шинэчлэх
FLUSH PRIVILEGES;
Нууц үг өөрчлөх
-- Хэрэглэгчийн нууц үг өөрчлөх (root-оор)
ALTER USER 'appuser'@'localhost' IDENTIFIED BY 'ShineNuucUg@2025!';
-- Өөрийн нууц үг өөрчлөх
ALTER USER CURRENT_USER() IDENTIFIED BY 'ShineNuucUg@2025!';
FLUSH PRIVILEGES;
DROP USER — хэрэглэгч устгах
-- Хэрэглэгч устгах (эрхүүд нь хамт устана)
DROP USER 'reporter'@'%';
DROP USER IF EXISTS 'olduser'@'localhost';
Бүх хэрэглэгч харах
-- MySQL-н бүх хэрэглэгч
SELECT user, host FROM mysql.user;
Бодит жишээ: аппликейшны хэрэглэгч тохируулах
-- 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 ашиглан өгөгдлийг хадгалах, сэргээх аргыг үзнэ.