Rumah > pangkalan data > tutorial mysql > Bagaimana untuk mereka bentuk struktur jadual MySQL yang selamat untuk melaksanakan fungsi pengesahan?

Bagaimana untuk mereka bentuk struktur jadual MySQL yang selamat untuk melaksanakan fungsi pengesahan?

王林
Lepaskan: 2023-10-31 09:05:16
asal
989 orang telah melayarinya

Bagaimana untuk mereka bentuk struktur jadual MySQL yang selamat untuk melaksanakan fungsi pengesahan?

Bagaimana untuk mereka bentuk struktur jadual MySQL yang selamat untuk melaksanakan fungsi pengesahan?

Dalam era maklumat moden, pengesahan identiti adalah bahagian penting dalam kehidupan seharian kita. Sama ada dalam rangkaian atau dalam kehidupan sebenar, kami perlu memastikan bahawa hanya pengguna yang diberi kuasa boleh mengakses sumber tertentu atau melakukan operasi tertentu. Melaksanakan fungsi pengesahan dalam pangkalan data adalah langkah yang sangat penting untuk melindungi keselamatan data dengan berkesan. Artikel ini akan memperkenalkan cara mereka bentuk struktur jadual MySQL yang selamat untuk melaksanakan fungsi pengesahan dan menyediakan contoh kod yang sepadan.

Pertama, kita perlu mencipta jadual pengguna untuk menyimpan maklumat pengesahan pengguna. Jadual hendaklah mengandungi medan berikut:

  1. id: ID Pengguna, sebagai kunci utama, menggunakan jenis integer yang meningkat secara automatik.
  2. nama pengguna: Nama pengguna, menggunakan jenis rentetan yang unik.
  3. kata laluan: Kata laluan atas sebab keselamatan, kami harus menyulitkan dan menyimpan kata laluan. Kata laluan boleh disulitkan menggunakan fungsi cincang (seperti MD5, SHA-256, dll.) dan kata laluan yang disulitkan boleh disimpan dalam pangkalan data.
  4. e-mel: Alamat e-mel pengguna, menggunakan jenis rentetan yang unik.
  5. created_at: Tarikh dan masa pendaftaran pengguna, menggunakan jenis DATETIME.

Berikut ialah contoh kod MySQL untuk mencipta jadual pengguna:

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(255) UNIQUE,
  password VARCHAR(255),
  email VARCHAR(255) UNIQUE,
  created_at DATETIME
);
Salin selepas log masuk

Seterusnya, kita perlu mencipta jadual sesi untuk mengurus maklumat sesi pengguna. Semasa proses pengesahan, kami membuat sesi untuk setiap pengguna dan menjana ID sesi. ID sesi ini akan digunakan untuk mengesahkan pengguna dan mengesahkan apabila pengguna mengakses sumber yang dilindungi. Jadual sesi hendaklah mengandungi medan berikut:

  1. id: ID Sesi, sebagai kunci utama, menggunakan jenis integer yang meningkat secara automatik.
  2. user_id: mengaitkan ID pengguna dalam jadual pengguna, menggunakan perhubungan kunci asing.
  3. session_id: ID Sesi, anda boleh menggunakan UUID atau jenis rentetan yang dijana secara rawak untuk memastikan keunikan.
  4. expired_at: Masa tamat tempoh sesi, menggunakan jenis DATETIME.

Berikut ialah contoh kod MySQL untuk mencipta jadual sesi:

CREATE TABLE sessions (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user_id INT,
  session_id VARCHAR(255),
  expired_at DATETIME,
  FOREIGN KEY (user_id) REFERENCES users(id)
);
Salin selepas log masuk

Setelah pengguna berjaya log masuk dan mengesahkan, kami akan menjana ID sesi dan menyimpannya ke dalam jadual sesi. Apabila pengguna mengakses sumber yang dilindungi, kami akan mengesahkan kesahihan dan tamat tempoh ID sesi. Dengan membandingkan ID pengguna dengan ID pengguna dalam jadual sesi, kami boleh memastikan bahawa pengguna mempunyai sesi yang sah dan mempunyai akses yang dibenarkan.

Sebagai tambahan kepada struktur jadual di atas, kami juga memerlukan kod yang sepadan untuk melaksanakan fungsi pengesahan. Apabila pengguna mendaftar, kita perlu memasukkan maklumat pengguna baharu ke dalam jadual pengguna. Apabila pengguna log masuk, kita perlu menanyakan jadual pengguna, mengesahkan ketepatan nama pengguna dan kata laluan, dan menjana ID sesi baharu dan menyimpannya dalam jadual sesi. Apabila pengguna mengakses sumber yang dilindungi, kami perlu mengesahkan kesahihan dan tamat tempoh ID sesi.

Berikut ialah contoh fungsi untuk mengesahkan identiti pengguna dan menjana ID sesi:

import hashlib
import datetime
import random
import string

def authenticate(username, password):
    # 查询用户表,验证用户名和密码的正确性
    query = "SELECT * FROM users WHERE username = %s AND password = %s"
    cursor.execute(query, (username, hashlib.sha256(password.encode()).hexdigest()))
    user = cursor.fetchone()
    if user:
        # 生成新的会话ID
        session_id = ''.join(random.choices(string.ascii_letters + string.digits, k=32))
        
        # 计算会话的过期时间(例如,30分钟后)
        expired_at = datetime.datetime.now() + datetime.timedelta(minutes=30)
        
        # 将会话ID存储到会话表中
        query = "INSERT INTO sessions (user_id, session_id, expired_at) VALUES (%s, %s, %s)"
        cursor.execute(query, (user['id'], session_id, expired_at))
        connection.commit()
        
        return session_id
    else:
        return None
Salin selepas log masuk

Dengan struktur jadual dan contoh kod di atas, kami boleh mereka bentuk struktur jadual MySQL yang selamat untuk melaksanakan fungsi pengesahan. Dengan mereka bentuk struktur jadual dengan betul dan menggunakan penyulitan untuk menyimpan kata laluan, kami boleh melindungi identiti pengguna dan keselamatan data dengan berkesan. Pada masa yang sama, kami juga menyediakan contoh kod yang sepadan untuk menjadikan pelaksanaan fungsi pengesahan lebih mudah dan lebih dipercayai.

Atas ialah kandungan terperinci Bagaimana untuk mereka bentuk struktur jadual MySQL yang selamat untuk melaksanakan fungsi pengesahan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan