Merancang modul authenication pengguna (Peran & Hak)


15

Saya mencoba memodelkan modul Otentikasi Pengguna untuk database MS SQL Server yang akan menjadi ujung belakang Aplikasi Delphi UI. Pada dasarnya, saya ingin memiliki akun pengguna di mana pengguna hanya memiliki satu grup. Grup dapat memiliki "n" jumlah hak.

Saya juga ingin menambahkan riwayat kata sandi ke database, karena pengguna akan diminta untuk mengubah kata sandi mereka berdasarkan pengaturan aplikasi (misalnya, setiap 90 hari).

Saya juga ingin mencatat acara untuk setiap kali pengguna masuk dan keluar. Saya dapat memperpanjang ini untuk acara tambahan di masa depan.

Di bawah ini Anda akan menemukan celah pertama saya di sana. Tolong beri tahu saya saran untuk memperbaikinya, karena ini adalah pertama kalinya saya melakukan ini.

Apakah Anda melihat perlunya atribut tambahan untuk keamanan berbasis peran dan kendala untuk aturan kata sandi / periode kedaluwarsa?

desain db


Blog detail ada di sini: goo.gl/ATnj6j
Suresh Kamrushi

1
Saya tidak mengerti sesuatu. Di tabel pengguna Anda memiliki group_id. Bisakah seseorang menjadi anggota lebih dari satu kelompok?
johnny

Jawaban:


11

Berdasarkan persyaratan yang Anda tentukan, model Anda berada dalam kondisi yang cukup baik.

Berikut beberapa saran untuk peningkatan:

  • Anda tidak mengatakannya secara eksplisit, jadi sulit mengatakannya - tetapi sepertinya Anda mungkin menyimpan kata sandi pengguna secara langsung. Ini akan sangat buruk! Jika Anda melihat pada database otentikasi umum, kata sandi disimpan dalam bentuk terenkripsi. Anda sering melihat passwordkolom dan password_saltkolom.

  • USER_LOGSTabel Anda memiliki Eventkolom. Anda tidak jelas tentang bagaimana ini akan diisi. Haruskah ada EVENT_TYPEtabel USER_LOGSreferensi mana ? Ini mungkin membuat pelaporan lebih ramah. Peristiwa umum akan mencakup masuk, keluar, kata sandi gagal, perubahan kata sandi, setel ulang kata sandi, kunci-keluar, buka kunci, ...

  • Anda GROUP_RIGHTStabel tidak menunjukkan yang diberikan hak. Untuk tujuan jejak audit, orang sering mencatat siapa yang mengubah catatan apa dan kapan. Itu mungkin tidak menjadi masalah bagi Anda.

Berikut adalah beberapa pertanyaan seputar persyaratan bisnis yang Anda nyatakan, yang berbeda dari pola keamanan berbasis peran "buku teks" dalam beberapa cara:

  • Anda yakin ingin pengguna hanya dalam satu grup? Keuntungan dari keamanan berbasis peran adalah bahwa perannya cenderung statis, sedangkan orang-orang yang memenuhi peran cukup sering datang dan pergi. Termasuk dalam hal ini adalah bahwa beberapa orang sering "memakai dua topi".

  • Desain Anda hanya untuk hibah. Beberapa sistem termasuk hibah dan pencabutan . Ini memungkinkan Anda untuk mengatakan bahwa hak yang tersedia secara luas tidak tersedia untuk kelompok tertentu.

  • Anda memiliki pengguna dan akun yang muncul seperti USERSdalam desain Anda. Sering ada perbedaan antara orang dan ID pengguna . Beberapa ID pengguna untuk tim atau mesin dan beberapa orang memiliki beberapa ID pengguna untuk tujuan yang berbeda. Apakah ini perbedaan yang akan membantu Anda?


3

Saya pikir operator bitwise adalah cara terbaik untuk menerapkan izin pengguna. Di sini saya menunjukkan bagaimana kita dapat mengimplementasikannya dengan Mysql.

Di bawah ini adalah tabel sampel dengan beberapa data sampel:

Tabel 1 : Tabel izin untuk menyimpan nama izin bersamaan dengan itu seperti 1,2,4,8..etc (kelipatan 2)

CREATE TABLE IF NOT EXISTS `permission` (
  `bit` int(11) NOT NULL,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`bit`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Masukkan beberapa data sampel ke dalam tabel.

INSERT INTO `permission` (`bit`, `name`) VALUES
(1, 'User-Add'),
(2, 'User-Edit'),
(4, 'User-Delete'),
(8, 'User-View'),
(16, 'Blog-Add'),
(32, 'Blog-Edit'),
(64, 'Blog-Delete'),
(128, 'Blog-View');

Tabel 2 : Tabel pengguna untuk menyimpan id, nama, dan peran pengguna. Peran akan dihitung sebagai jumlah izin.
Contoh:
Jika pengguna 'Ketan' memiliki izin 'Tambah Pengguna' (bit = 1) dan 'Hapus Blog' (bit-64) maka perannya adalah 65 (1 + 64).
Jika pengguna 'Mehata' memiliki izin 'Tampilan Blog' (bit = 128) dan 'Hapus Pengguna' (bit-4) maka perannya adalah 132 (128 + 4).

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `role` int(11) NOT NULL,
  `created_date` datetime NOT NULL
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

Contoh data-

INSERT INTO `user` (`id`, `name`, `role`, `created_date`)
   VALUES (NULL, 'Ketan', '65', '2013-01-09 00:00:00'),
   (NULL, 'Mehata', '132', '2013-01-09 00:00:00');

Memberi izin pengguna Setelah masuk jika kami ingin memuat izin pengguna daripada yang dapat kami tanyakan di bawah ini untuk mendapatkan izin:

SELECT permission.bit,permission.name  
   FROM user LEFT JOIN permission ON user.role & permission.bit
 WHERE user.id = 1

Di sini user.role "&" permit.bit adalah operator Bitwise yang akan memberikan output sebagai -

User-Add - 1
Blog-Delete - 64

Jika kami ingin memeriksa cuaca, pengguna tertentu memiliki izin edit pengguna atau tidak-

  SELECT * FROM `user` 
     WHERE role & (select bit from permission where name='user-edit')

Output = Tidak ada baris.

Anda dapat melihat juga: http://goo.gl/ATnj6j


Dan apa yang akan kita lakukan jika izinnya banyak, seperti 100?
ypercubeᵀᴹ

2
Anda telah memposting 3 jawaban yang identik - untuk berbagai pertanyaan! -, semua diposting hari ini dengan jarak beberapa menit. Ini bukan praktik yang baik. Jika Anda pikir pertanyaannya identik atau cukup mirip, Anda dapat memilih untuk menutupnya sebagai duplikat (atau menandai mereka jika Anda tidak memiliki reputasi untuk memilih penutupan).
ypercubeᵀᴹ

Harap juga edit tautan Anda dan jelaskan apa yang dimilikinya (lebih jelasnya, apakah itu blog Anda atau milik orang lain, dll?)
ypercubeᵀᴹ

Tolong jangan menyalin dan menempelkan jawaban yang sama, menyemprotkannya ke banyak pertanyaan lama. Jika pertanyaan-pertanyaan itu sama, tandai sebagai duplikat.
Aaron Bertrand
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.