ব্যবহারকারী, ভূমিকা এবং অধিকারগুলির সাথে ডেটাবেস মডেল


40

আমি ব্যবহারকারীর টেবিল এবং রোল টেবিল সহ একটি ডাটাবেস মডেল আছে। আমি 10 টি আলাদা আলাদা উপাদান পর্যন্ত অ্যাক্সেস (অধিকারগুলি) নিয়ন্ত্রণ করতে চাই। কোনও ভূমিকা বা একক ব্যবহারকারীকে অ্যাক্সেস দেওয়া যেতে পারে। নীচে ব্যবহারকারীদের, ভূমিকা এবং আইটেমগুলির সারণি সংজ্ঞা দেওয়া আছে:

CREATE TABLE users
(
  id serial NOT NULL PRIMARY KEY,
  username character varying UNIQUE,
  password character varying,
  first_name character varying,
  last_name character varying,
  ...
);

CREATE TABLE roles
(
  id serial NOT NULL PRIMARY KEY,
  name character varying NOT NULL,
  description character varying,
  ...
);

CREATE TABLE element_1
(
  id serial NOT NULL PRIMARY KEY,
  name character varying NOT NULL,
  description character varying,
  ...
);

...

অধিকারগুলি ডিজাইনের এখন আমার দুটি ভিন্ন পদ্ধতি রয়েছে। অধিকারের ধরণের কলাম বা 10 টি অধিকারের সারণী সহ একটি টেবিল - প্রতিটি উপাদানগুলির জন্য একটি করে আমি অ্যাক্সেস নিয়ন্ত্রণ করতে চাই।

এক আইটেম প্রতি এক অধিকার সারণী বনাম একটি অধিকার টেবিলের পক্ষে কি কি? - বা এটি করার আরও উপযুক্ত উপায় কি?


1
আপনি কি এএসপি.এনইটি ব্যবহারকারীদের ডাটাবেস দেখেছেন যা কেবল এটি করে? (আপনি যা জিজ্ঞাসা করছেন তা বুঝতে
পেরে

উত্তর:


35

প্রথমত, আপনি কোন ধরণের সুরক্ষা মডেলটি বাস্তবায়নের পরিকল্পনা করছেন? ভূমিকা-ভিত্তিক অ্যাক্সেস কন্ট্রোল (আরবিএসি) বা বিচক্ষণতার অ্যাক্সেস কন্ট্রোল (ডিএসি)?

রোল-ভিত্তিক অ্যাক্সেস কন্ট্রোল (আরবিএসি) মডেলটিতে আরবিএসি, সংস্থানসমূহের অ্যাক্সেস কোনও ব্যবহারকারীর অর্পিত ভূমিকার উপর ভিত্তি করে। এই মডেলটিতে, প্রশাসক কোনও ব্যবহারকারীকে এমন একটি ভূমিকার জন্য নিযুক্ত করেন যার কিছু নির্দিষ্ট ও অধিকার রয়েছে e ভূমিকার সাথে ব্যবহারকারীর সংযোগের কারণে ব্যবহারকারী নির্দিষ্ট সংস্থান অ্যাক্সেস করতে এবং নির্দিষ্ট কাজ সম্পাদন করতে পারে। আরবিএসি অ-বিচ্ছিন্ন অ্যাক্সেস নিয়ন্ত্রণ হিসাবেও পরিচিত as ব্যবহারকারীদের অর্পিত ভূমিকা কেন্দ্রীয়ভাবে পরিচালিত হয়।

ডএসি বিচ্ছিন্ন অ্যাক্সেস কন্ট্রোল (ড্যাক) মডেলটিতে, সংস্থানগুলিতে অ্যাক্সেস ব্যবহারকারীর পরিচয়ের উপর ভিত্তি করে। একজন ব্যবহারকারীকে সংস্থার সাথে যুক্ত অ্যাক্সেস কন্ট্রোল লিস্টে (এসিএল) স্থাপন করে কোনও সংস্থার অনুমতি দেওয়া হয়। রিসোর্সের এসিএলে একটি প্রবেশিকা একটি এক্সেস কন্ট্রোল এন্ট্রি (এসিই) হিসাবে পরিচিত। যখন কোনও ব্যবহারকারী (বা গোষ্ঠী) ড্যাক মডেলের কোনও সামগ্রীর মালিক হয় তখন ব্যবহারকারী অন্যান্য ব্যবহারকারী এবং গোষ্ঠীগুলিকে অনুমতি দিতে পারে। DAC মডেলটি সম্পদের মালিকানার উপর ভিত্তি করে।

উত্স দেখুন

1) আরবিএসি তে: ভূমিকার অধিকার নির্ধারণের জন্য আপনার এলিমেন্টটাইপ টেবিলের প্রয়োজন (ব্যবহারকারীদের ভূমিকা (গুলি) দেওয়া হয়)। আরবিএসি সংজ্ঞায়িত করেছে: "এই ভূমিকা / ব্যবহারকারী কী করতে পারে"। প্রশাসক ভূমিকা ও ভূমিকার জন্য অনুমতিগুলির অধিকার নির্ধারণ করে, ব্যবহারকারীদেরকে সংস্থানগুলি অ্যাক্সেসের জন্য ভূমিকা (গুলি) হিসাবে নিয়োগ করে। 2) ড্যাক-এ: অ্যাক্সেস নিয়ন্ত্রণ তালিকার (মালিকানা) মাধ্যমে ব্যবহারকারীদের এবং ভূমিকাগুলির উপাদানগুলির অধিকার রয়েছে। ড্যাক নির্ধারণ করে: "আমার ডেটাতে কার কাছে অ্যাক্সেস আছে"। ব্যবহারকারী (মালিক) মালিকানাধীন সংস্থানগুলিতে অনুমতি দেয়।

যেভাবেই আমি এই ডেটা মডেলটির পরামর্শ দিই:

CREATE TABLE ElementType
(
    Id (PK)
    Name
    ...
)

CREATE TABLE ElementBase
(
    Id (PK)
    Type (FK to ElementType)
    ...
)

(এক থেকে এক সম্পর্ক)

CREATE TABLE Element_A
(
    Id (PK, FK to ElementBase)
    ...
)

CREATE TABLE Element_B
(
    Id (PK, FK to ElementBase)
    ...
)

1) আরবিএসি (অনেকের সাথে অনেকগুলি সম্পর্ক)

CREATE TABLE ElementType_To_Role_Rights
(
    RightId (PK)
    RoleId  (FK to Role)
    ElementTypeId (FK to ElementType)
    ...
)

২) ড্যাক (অনেকের সাথে অনেকের সম্পর্ক)

CREATE TABLE ElementBase_To_Actor_Rights
(
    RightId (PK)
    ElementBaseId (FK to ElementBase)
    ActorId (FK to Actor)
    ...
)

CREATE TABLE Actor
(
    Id (PK)
    Name
)

CREATE TABLE User
(
    Id (PK, FK to Actor)
    Password
    ...
)

CREATE TABLE Role
(
    Id (PK, FK to Actor)
    ...
)

1
সম্পর্কযুক্ত এলিমেন্ট_এক্সএক্সএক্সএটিটি এলিমেন্টবেস থেকে প্রাপ্ত করা কি ভাল ধারণা? উদাহরণস্বরূপ, আমার আমার পণ্য এবং গ্রাহকদের উভয়ের জন্য অ্যাক্সেস নিয়ন্ত্রণ ট্র্যাক করা দরকার। আপনি কি আমাকে জেনেরিক এলিমেন্টবেস তৈরি করার পরামর্শ দিচ্ছেন এবং এডিটলেস না থাকা সত্ত্বেও পণ্য_আইডি এবং গ্রাহক_আইডির জন্য এলিমি_ব্যাস_আইডিকে প্রাথমিক কী হতে দিন?
পার্থ শাহ

1
আরবিএসি বনাম ডিএসি, +1
ইরফান

@ পার্থশাহ আপনার সমস্যার জন্য আপনি কোন পদ্ধতি অবলম্বন করেছেন?
বিবেক বর্ধন

5

প্রতিটি উপাদানটির জন্য একটি অধিকার সারণী সহ, আপনি একটি উপাদান যুক্ত করার সাথে সাথে আপনাকে একটি সারণী যুক্ত করতে হবে। এটি অ্যাপ্লিকেশন রক্ষণাবেক্ষণে যুক্ত করবে।

সমস্ত কিছুকে একটি টেবিলের মধ্যে রাখার নেতিবাচক দিকটি হ'ল আপনি স্কেলিংয়ের সমস্যাগুলিতে চলে যেতে পারেন তবে এগুলি পার্টিশন, উপাদানযুক্ত দৃষ্টিভঙ্গি এবং / অথবা ভার্চুয়াল কলামগুলি ব্যবহার করে প্রশমিত করা যেতে পারে। সম্ভবত এই ধরনের ব্যবস্থা প্রয়োজন হবে না।

টেবিলের নকশা যতদূর, ওরাকল এ থাকলে আমি এই জাতীয় কিছু প্রস্তাব করতে পারি:

CREATE SEQUENCE UserRoleID;

CREATE TABLE USERROLE 
(
  USERID NUMBER(7) NOT NULL 
, ROLEID NUMBER(7) NOT NULL 
, CONSTRAINT USERROLE_PK PRIMARY KEY 
  (
    USERID 
  , ROLEID 
  )
  ENABLE 
) 
ORGANIZATION INDEX;

CREATE TABLE PERMISSIONS 
(
  ID NUMBER(7) NOT NULL 
, ELEMENTID NUMBER(7) NOT NULL 
, CONSTRAINT USERROLE_PK PRIMARY KEY 
  (
    ID 
  , ELEMENTID 
  )
  ENABLE 
) 
ORGANIZATION INDEX;

প্যাকেজ কোডটি ব্যবহারকারীর টেবিলের আইডি এবং প্রয়োজন অনুসারে ভূমিকা টেবিলের আইডি পপুলেট করতে ইউজাররোলআইড ক্রম ব্যবহার করতে পারে। অনুমতি টেবিলটিতে তখন ভূমিকাগুলিকে বরাদ্দ করা উপাদানগুলি থাকতে পারে যা ব্যবহারকারীদের পরিবর্তে বরাদ্দ করা হয় এবং / অথবা উপাদানগুলি সরাসরি ব্যবহারকারীদের কাছে অর্পণ করা যেতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.