Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में RBAC के लिए डेटाबेस डिज़ाइन करने के लिए मार्गदर्शिका

यह ट्यूटोरियल उपयोगकर्ताओं, भूमिकाओं और अनुमतियों को प्रबंधित करने के लिए रोल-बेस्ड एक्सेस कंट्रोल (RBAC) सिस्टम के डेटाबेस स्कीमा को डिज़ाइन करने के लिए पूर्ण चरण प्रदान करता है। इसका उपयोग विशिष्ट अनुमतियों के आधार पर विशिष्ट संसाधनों तक पहुंच तय करने के लिए किया जा सकता है। RBAC प्रणाली का उपयोग करना किसी भी एप्लिकेशन के एक अभिन्न अंग के रूप में माना जाना चाहिए जो कई उपयोगकर्ताओं के बीच संसाधनों को साझा करता है। उदा. किसी संगठन के कर्मचारी उन्हें दी गई अनुमतियों के आधार पर उत्पादों तक पहुंच या प्रबंधन कर सकते हैं। आदर्श रूप से, अनुमतियाँ भूमिकाओं के माध्यम से असाइन की जा सकती हैं।

इकाई संबंध आरेख या विज़ुअल डेटाबेस डिज़ाइन नीचे दिखाया गया है।

चित्र 1

नोट :इस ट्यूटोरियल में चर्चा की गई भूमिका और अनुमति तालिकाओं को ब्लॉग और पोल और सर्वेक्षण ट्यूटोरियल में चर्चा किए गए एप्लिकेशन डेटाबेस में जोड़ा जा सकता है। यह ट्यूटोरियल मानता है कि एक्सेस की जांच के लिए कोड स्तर पर अनुमतियों को हार्ड-कोड किया गया है।

आप लोकप्रिय ट्यूटोरियल पर भी जा सकते हैं, जिसमें उबंटू पर MySQL 8 कैसे स्थापित करें, विंडोज पर MySQL 8 कैसे स्थापित करें, MySql में ब्लॉग डेटाबेस, MySql में पोल ​​और सर्वे डेटाबेस, और MySQL में बेसिक SQL क्वेरीज़ सीखें।

आरबीएसी डेटाबेस

सबसे पहला कदम RBAC डेटाबेस बनाना है। इसे नीचे दिखाए गए अनुसार क्वेरी का उपयोग करके बनाया जा सकता है।

CREATE SCHEMA `rbac` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

मैंने वर्ण सेट का उपयोग किया है utf8mb4 पात्रों की एक विस्तृत श्रृंखला का समर्थन करने के लिए।

उपयोगकर्ता तालिका

इस अनुभाग में, हम उपयोगकर्ता तालिका . डिज़ाइन करेंगे उपयोगकर्ता जानकारी संग्रहीत करने के लिए। उपयोगकर्ता तालिका के सभी स्तंभों का विवरण नीचे दिया गया है।

Id उपयोगकर्ता की पहचान करने के लिए अद्वितीय आईडी।
प्रथम नाम उपयोगकर्ता का पहला नाम।
मध्य नाम उपयोगकर्ता का मध्य नाम।
उपनाम उपयोगकर्ता का अंतिम नाम।
मोबाइल उपयोगकर्ता का मोबाइल नंबर। इसका उपयोग लॉगिन और पंजीकरण उद्देश्यों के लिए किया जा सकता है।
ईमेल उपयोगकर्ता का ईमेल। इसका उपयोग लॉगिन और पंजीकरण उद्देश्यों के लिए किया जा सकता है।
पासवर्ड हैश उपयुक्त एल्गोरिथम द्वारा उत्पन्न पासवर्ड हैश। हमें सादा पासवर्ड रखने से बचना चाहिए।
पर पंजीकृत इस कॉलम का उपयोग एप्लिकेशन के साथ उपयोगकर्ता के जीवन की गणना करने के लिए किया जा सकता है।
अंतिम लॉगिन इसका उपयोग उपयोगकर्ता के अंतिम लॉगिन की पहचान करने के लिए किया जा सकता है।
पहचान उपयोगकर्ता का संक्षिप्त परिचय।
प्रोफाइल उपयोगकर्ता विवरण।

उपयुक्त बाधाओं वाली उपयोगकर्ता तालिका नीचे दर्शाई गई है।

CREATE TABLE `rbac`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NOT NULL,
`registeredAt` DATETIME NOT NULL,
`lastLogin` DATETIME NULL DEFAULT NULL,
`intro` TINYTEXT NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_mobile` (`mobile` ASC),
UNIQUE INDEX `uq_email` (`email` ASC) );

भूमिका तालिका

इस खंड में, हम भूमिका तालिका . डिजाइन करेंगे सिस्टम भूमिकाओं को संग्रहीत करने के लिए। रोल टेबल के सभी कॉलमों का विवरण नीचे दिया गया है।

Id भूमिका की पहचान करने के लिए अद्वितीय आईडी।
शीर्षक भूमिका शीर्षक।
स्लग भूमिका खोजने के लिए अद्वितीय स्लग।
विवरण भूमिका का उल्लेख करने के लिए विवरण।
सक्रिय यह जाँचने के लिए फ़्लैग कि क्या भूमिका वर्तमान में सक्रिय है।
पर बनाया गया यह उस दिनांक और समय को संग्रहीत करता है जब भूमिका बनाई जाती है।
पर अपडेट किया गया यह उस दिनांक और समय को संग्रहीत करता है जब भूमिका अद्यतन की जाती है।
सामग्री भूमिका के बारे में संपूर्ण विवरण।

उपयुक्त बाधाओं के साथ रोल टेबल नीचे दिखाया गया है।

CREATE TABLE `rbac`.`role` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
`description` TINYTEXT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC) );

अनुमति तालिका

इस खंड में, हम अनुमति तालिका . डिजाइन करेंगे सिस्टम अनुमतियों को संग्रहीत करने के लिए। अनुमति तालिका के सभी स्तंभों का विवरण नीचे दिया गया है।

Id अनुमति की पहचान करने के लिए अद्वितीय आईडी।
शीर्षक अनुमति शीर्षक।
स्लग अनुमति खोजने के लिए अद्वितीय स्लग।
विवरण अनुमति का उल्लेख करने के लिए विवरण।
सक्रिय यह जाँचने के लिए फ़्लैग कि अनुमति वर्तमान में सक्रिय है या नहीं।
पर बनाया गया यह उस दिनांक और समय को संग्रहीत करता है जिस पर अनुमति बनाई गई है।
पर अपडेट किया गया यह उस दिनांक और समय को संग्रहीत करता है जिस पर अनुमति अपडेट की जाती है।
सामग्री अनुमति के बारे में पूरी जानकारी।

उपयुक्त बाधाओं के साथ अनुमति तालिका नीचे दी गई है।

CREATE TABLE `rbac`.`permission` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
`description` TINYTEXT NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC) );

भूमिका अनुमति तालिका

भूमिका अनुमति तालिका भूमिकाओं के लिए अनुमतियों के मानचित्रण को संग्रहीत करने के लिए उपयोग किया जा सकता है। भूमिका अनुमति तालिका के सभी स्तंभों का विवरण नीचे दिया गया है।

भूमिका क्रमांक भूमिका की पहचान करने के लिए भूमिका आईडी।
अनुमति आईडी अनुमति की पहचान करने के लिए अनुमति आईडी।
पर बनाया गया यह उस दिनांक और समय को संग्रहीत करता है जिस पर मानचित्रण बनाया जाता है।
पर अपडेट किया गया यह उस दिनांक और समय को संग्रहीत करता है जिस पर मानचित्रण अद्यतन किया जाता है।

उपयुक्त बाधाओं के साथ भूमिका अनुमति तालिका नीचे दी गई है।

CREATE TABLE `rbac`.`role_permission` (
`roleId` BIGINT NOT NULL,
`permissionId` BIGINT NOT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL,
PRIMARY KEY (`roleId`, `permissionId`),
INDEX `idx_rp_role` (`roleId` ASC),
INDEX `idx_rp_permission` (`permissionId` ASC),
CONSTRAINT `fk_rp_role`
FOREIGN KEY (`roleId`)
REFERENCES `rbac`.`role` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_rp_permission`
FOREIGN KEY (`permissionId`)
REFERENCES `rbac`.`permission` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

उपयोगकर्ता भूमिका

हम उपयोगकर्ता को एक ही भूमिका सौंपकर प्रणाली को सरल रख सकते हैं। असाइन की गई भूमिका का उपयोग भूमिका के लिए मैप की गई अनुमतियों को खींचने के लिए किया जा सकता है। विशिष्ट संसाधन या अनुमति तक पहुंच को हार्ड-कोडेड अनुमति की तुलना उपयोगकर्ता को सौंपी गई भूमिका के लिए मैप की गई अनुमतियों की सूची से की जा सकती है।

यह नीचे दिखाए गए अनुसार क्वेरी का उपयोग करके किया जा सकता है।

ALTER TABLE `rbac`.`user` 
ADD COLUMN `roleId` BIGINT NOT NULL AFTER `id`,
ADD INDEX `idx_user_role` (`roleId` ASC);

ALTER TABLE `rbac`.`user`
ADD CONSTRAINT `fk_user_role`
FOREIGN KEY (`roleId`)
REFERENCES `rbac`.`role` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

उन्नत विकल्प

उपयोगकर्ता भूमिका तालिका का उपयोग करके उपयोगकर्ता को कई भूमिकाएँ सौंपने के बारे में सोच सकते हैं। अधिक उन्नत विकल्पों में अनुमतियों या भूमिकाओं को समूहीकृत करने के लिए पदानुक्रम प्रणाली शामिल है। ये विकल्प अनुमति सूची को खींचने के लिए क्वेरी को और अधिक जटिल बनाते हैं, इसलिए उपयुक्त कैश तंत्र होने के कारण अनुकूलन की आवश्यकता होती है।

सारांश

इस ट्यूटोरियल में, हमने विशिष्ट अनुरोधों और संसाधनों को सुरक्षित करने के लिए आरबीएसी सिस्टम के डेटाबेस डिज़ाइन पर चर्चा की है, यदि उपयोगकर्ता के पास उचित अनुमति हो तो ही एक्सेस की अनुमति दें।

आप चर्चा में शामिल होने के लिए अपनी टिप्पणियाँ प्रस्तुत कर सकते हैं। आप ब्लॉग और पोल और सर्वेक्षण अनुप्रयोगों के डेटाबेस को डिजाइन करने में भी रुचि ले सकते हैं।

संपूर्ण डेटाबेस स्कीमा GitHub पर भी उपलब्ध है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीडीओ उन्नत सीआरयूडी जेनरेटर टूल के साथ जल्दी से एक PHP सीआरयूडी इंटरफेस बनाएं

  2. MySQL में जाँच बाधा काम नहीं कर रही है

  3. मैसकल रिकर्सिव का चयन करें सभी बच्चे को कई स्तरों के साथ प्राप्त करें

  4. MySQL को कैसे प्रबंधित करें - Oracle DBA के लिए

  5. MySQL में SUBSTR () फ़ंक्शन कैसे काम करता है