MySQL में उपयोगकर्ता बनाना और अनुमतियाँ देना
MySQL में CREATE USER और GRANT स्टेटमेंट्स का उपयोग करके नए उपयोगकर्ता बनाए जाते हैं और विशिष्ट डेटाबेस/टेबल्स पर अनुमतियाँ दी जाती हैं।
सिंटैक्स अवलोकन
-- डेटाबेस बनाएं
CREATE DATABASE yourDatabaseName DEFAULT CHARACTER SET utf8mb4;
-- उपयोगकर्ता बनाएं
CREATE USER 'yourUserName'@'host' IDENTIFIED BY 'yourPassword';
-- अनुमतियाँ दें
GRANT privilege_type ON database.table TO 'yourUserName'@'host';
-- अनुमतियाँ लागू करें
FLUSH PRIVILEGES;
व्यावहारिक उदाहरण
1. डेटाबेस बनाएं
mysql> CREATE DATABASE demo_app DEFAULT CHARACTER SET utf8mb4;
Query OK, 1 row affected, 1 warning (0.00 sec)
नोट: utf8mb4 का उपयोग करें (पूर्ण यूनिकोड समर्थन के लिए), utf8 के बजाय।
2. उपयोगकर्ता बनाएं
mysql> CREATE USER 'John_123'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
'John_123': उपयोगकर्ता नाम'%': होस्ट (किसी भी होस्ट से कनेक्शन की अनुमति). विशिष्ट होस्ट के लिए 'localhost', '192.168.1.%', आदि उपयोग करेंIDENTIFIED BY: प्रमाणीकरण प्लगइन और पासवर्ड निर्दिष्ट करता है
3. अनुमतियाँ दें
mysql> GRANT SELECT ON demo_app.* TO 'John_123'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT INSERT ON demo_app.* TO 'John_123'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT UPDATE ON demo_app.* TO 'John_123'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT DELETE ON demo_app.* TO 'John_123'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT EXECUTE ON demo_app.* TO 'John_123'@'%';
Query OK, 0 rows affected (0.00 sec)
4. संक्षिप्त रूप (एक GRANT में कई अनुमतियाँ)
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE
ON demo_app.* TO 'John_123'@'%';
5. सभी अनुमतियाँ (सावधानी से उपयोग करें)
GRANT ALL PRIVILEGES ON demo_app.* TO 'John_123'@'%';
उपयोगकर्ता की अनुमतियाँ देखना
mysql> SHOW GRANTS FOR 'John_123'@'%';
+-----------------------------------------------------------------------------+
| Grants for John_123@% |
+-----------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `John_123`@`%` |
| GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `demo_app`.* TO `John_123`@`%` |
+-----------------------------------------------------------------------------+
2 rows in set (0.00 sec)
आम अनुमति प्रकार
| अनुमति | विवरण |
|---|---|
| SELECT | पढ़ने की अनुमति |
| INSERT | नई पंक्तियाँ जोड़ने की अनुमति |
| UPDATE | मौजूदा पंक्तियाँ संशोधित करने की अनुमति |
| DELETE | पंक्तियाँ हटाने की अनुमति |
| EXECUTE | स्टोर्ड प्रोसीजर/फ़ंक्शन चलाने की अनुमति |
| CREATE | टेबल/इंडेक्स बनाने की अनुमति |
| DROP | टेबल/व्यू हटाने की अनुमति |
| ALTER | टेबल संरचना बदलने की अनुमति |
| INDEX | इंडेक्स बनाने/हटाने की अनुमति |
| REFERENCES | विदेशी कुंजी बनाने की अनुमति |
स्तर-वार अनुमतियाँ
- ग्लोबल:
GRANT SELECT ON *.* TO 'user'@'host' - डेटाबेस:
GRANT SELECT ON db_name.* TO 'user'@'host' - टेबल:
GRANT SELECT ON db_name.table_name TO 'user'@'host' - कॉलम:
GRANT SELECT (col1, col2) ON db_name.table_name TO 'user'@'host'
अनुमतियाँ वापस लेना
REVOKE INSERT ON demo_app.* FROM 'John_123'@'%';
REVOKE ALL PRIVILEGES ON demo_app.* FROM 'John_123'@'%';
उपयोगकर्ता हटाना
DROP USER 'John_123'@'%';
सर्वोत्तम अभ्यास
- न्यूनतम विशेषाधिकार सिद्धांत: केवल आवश्यक अनुमतियाँ दें
- मजबूत पासवर्ड उपयोग करें
- होस्ट प्रतिबंधित करें: '%' के बजाय विशिष्ट IP/होस्ट उपयोग करें
- नियमित ऑडिट:
SHOW GRANTSके साथ अनुमतियों की समीक्षा करें - डिफ़ॉल्ट प्रमाणीकरण प्लगइन: MySQL 8.0+ में
caching_sha2_passwordडिफ़ॉल्ट है
MySQL 8.0+ में परिवर्तन
GRANTअब नए उपयोगकर्ता नहीं बनाता (पहलेCREATE USER IF NOT EXISTSकरता था)IDENTIFIED BYGRANT में पदावनत- रोल समर्थन जोड़ा गया:
CREATE ROLE,GRANT role TO user