권한 제어 기능을 구현하기 위해 안전한 MySQL 테이블 구조를 설계하는 방법은 무엇입니까?

王林
풀어 주다: 2023-10-31 12:00:44
원래의
962명이 탐색했습니다.

권한 제어 기능을 구현하기 위해 안전한 MySQL 테이블 구조를 설계하는 방법은 무엇입니까?

권한 제어 기능을 구현하기 위해 안전한 MySQL 테이블 구조를 설계하는 방법은 무엇입니까?

인터넷의 발달과 함께 시스템 보안에 대한 관심이 높아지고 있습니다. 많은 애플리케이션에서 권한 제어는 민감한 데이터와 기능을 보호하는 중요한 수단입니다. MySQL 데이터베이스에서는 권한이 있는 사용자만 특정 데이터에 액세스할 수 있도록 테이블 구조를 적절하게 설계하여 권한 제어 기능을 구현할 수 있습니다.

다음은 권한 제어 기능 구현을 위한 기본 MySQL 테이블 구조 설계입니다.

테이블 이름: users
필드: id, 사용자 이름, 비밀번호, role_id

테이블 이름: Roles
필드: id, role_name

테이블 이름: Permissions
Fields: id,Permission_name

Table name: role_permissions
Fields: role_id,Permission_id

Table name: user_roles
Fields: user_id, role_id

여기서 관련 테이블을 통해 역할과 권한, 사용자와 역할을 구현합니다. . 다음은 테이블을 생성하고 샘플 데이터를 채우는 몇 ​​가지 샘플 코드입니다.

--사용자 테이블 생성
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
사용자 이름 VARCHAR(20) NOT NULL,
비밀번호 VARCHAR(255) NOT NULL,
role_id INT
);

--역할 테이블 생성
CREATE TABLE 역할 (
id INT PRIMARY KEY AUTO_INCREMENT,
role_name VARCHAR(30) NOT NULL
);

--권한 테이블 생성
CREATE TABLE 권한(
id INT PRIMARY KEY AUTO_INCREMENT,
허가_이름 VARCHAR(30) NOT NULL
);

--role_permissions 테이블 생성
CREATE TABLE role_permissions (
role_id INT,
허가_id INT,
PRIMARY KEY (role_id, 허가_id)
);

--user_roles 테이블 생성
CREATE TABLE user_roles (
user_id INT,
role_id INT,
PRIMARY KEY (user_id, role_id)
);

-- 샘플 데이터 채우기
INSERT INTO 역할 (role_name) VALUES ('관리자' ), ('편집자'), ('리더');
INSERT INTO 권한 (permission_name) VALUES ('기사 작성'), ('기사 편집'), ('기사 삭제');
INSERT INTO role_permissions (role_id , 허가_ID) VALUES (1, 1), (1, 2), (1, 3), (2, 2), (3, 3);
INSERT INTO 사용자 (사용자 이름, 비밀번호, 역할 ID) VALUES ('admin' , '비밀번호', 1), ('편집기', '비밀번호', 2), ('리더', '비밀번호', 3);
INSERT INTO user_roles (user_id, role_id) VALUES (1, 1), (2 , 2), (3, 3);

위의 테이블 구조와 샘플 데이터를 통해 다음과 같은 권한 제어 기능을 구현할 수 있습니다.

  1. 관리자는 기사를 작성, 편집 및 삭제할 수 있는 권한을 가집니다. 기사 편집 권한
  2. 독자에게는 특별한 권한이 없습니다.
  3. 애플리케이션에서 로그인 확인이 성공한 후 아래와 같이 사용자의 역할 ID를 기반으로 사용자가 가진 권한을 쿼리할 수 있습니다.

SELECT p.permission_name

FROM users AS u

INNER JOIN user_roles AS ur ON u.id = ur.user_id
INNER JOIN 역할 AS r ON ur.role_id = r.id
INNER JOIN role_permissions AS rp ON r.id = rp.role_id
INNER JOIN 권한 AS p ON rp.permission_id = p.id
WHERE u.username = 'admin';

위 쿼리를 통해 현재 사용자의 권한을 얻을 수 있으며, 이를 통해 권한에 따라 데이터 및 기능에 대한 사용자의 액세스를 제어할 수 있습니다.

테이블 구조를 디자인할 때 실제 요구에 따라 합리적으로 디자인해야 한다는 점에 유의해야 합니다. 위 예의 기본 테이블 구조 외에도 특정 비즈니스 요구 사항에 따라 더 많은 필드와 테이블 관계를 추가할 수 있습니다.

즉, 권한 제어 기능을 구현하기 위해 MySQL 테이블 구조를 적절하게 설계함으로써 시스템의 보안을 효과적으로 보호할 수 있습니다. 위 내용이 도움이 되셨기를 바랍니다.

위 내용은 권한 제어 기능을 구현하기 위해 안전한 MySQL 테이블 구조를 설계하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿