wordpress 模板 黑暗/拼多多关键词优化步骤

wordpress 模板 黑暗,拼多多关键词优化步骤,网页美工图片,做网站要备案吗重点:权限五张表的设计 核心概念: 在权限管理系统中,经典的设计通常涉及五张表,分别是用户表、角色表、权限表、用户角色表和角色权限表。这五张表的设计可以有效地管理用户的权限,确保系统的安全性和灵活性。 用户&…

重点:权限五张表的设计

核心概念:

在权限管理系统中,经典的设计通常涉及五张表,分别是用户表、角色表、权限表、用户角色表和角色权限表。这五张表的设计可以有效地管理用户的权限,确保系统的安全性和灵活性。

  • 用户(User):系统的使用者,每个用户有唯一的身份标识。
  • 角色(Role):一组权限的集合,用于简化权限分配。
  • 权限(Permission):系统中具体的操作或资源访问权限(如读取、写入、删除等)。
  • 用户角色关联:将用户与角色关联起来,表示用户拥有某个角色的权限。
  • 角色权限关联:将角色与权限关联起来,表示角色拥有哪些权限。

表之间的关系

  1. 用户与角色

    • 一个用户可以有多个角色,一个角色可以分配给多个用户。
    • 通过user_role表实现多对多关系。
  2. 角色与权限

    • 一个角色可以有多个权限,一个权限可以分配给多个角色。
    • 通过role_permission表实现多对多关系。
  3. 权限层级

    • 用户通过角色间接拥有权限。
    • 查询用户权限时,需要先查询用户所属角色,再查询角色对应的权限。

图示理解表关系


1.表设计

1.1 用户表(user

  • 用户表用于存储系统中的用户信息,包括用户ID、用户名和用户密码等。每个用户在登录时都会通过该表进行验证,以确保其合法性。
CREATE TABLE `user` (`id` INT PRIMARY KEY AUTO_INCREMENT,`username` VARCHAR(50) NOT NULL UNIQUE,`password` VARCHAR(255) NOT NULL,`email` VARCHAR(100),`active` TINYINT(1) NOT NULL DEFAULT 1,`version` INT NOT NULL DEFAULT 0,`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

1.2 角色表(role

  • 角色表用于定义系统中的各种角色,例如管理员、普通用户等。每个角色代表一组权限,用户通过分配角色来获得相应的权限。
CREATE TABLE `role` (`id` INT PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(50) NOT NULL UNIQUE,`description` VARCHAR(255),`active` TINYINT(1) NOT NULL DEFAULT 1,`version` INT NOT NULL DEFAULT 0,`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

1.3 权限表(permission

  • 权限表用于存储系统中的各种资源和操作,例如页面访问、按钮点击等。每个权限项描述了一个具体的操作,用户只有拥有相应的权限才能执行该操作。
CREATE TABLE `permission` (`id` INT PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(50) NOT NULL UNIQUE,`description` VARCHAR(255),`active` TINYINT(1) NOT NULL DEFAULT 1,`version` INT NOT NULL DEFAULT 0,`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

1.4 用户角色关联表(user_role

  • 用户角色表用于建立用户与角色之间的关系。通过该表,可以将用户分配到不同的角色,从而获得相应的权限。
CREATE TABLE `user_role` (`user_id` INT NOT NULL,`role_id` INT NOT NULL,`active` TINYINT(1) NOT NULL DEFAULT 1,`version` INT NOT NULL DEFAULT 0,`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`user_id`, `role_id`),FOREIGN KEY (`user_id`) REFERENCES `user`(`id`),FOREIGN KEY (`role_id`) REFERENCES `role`(`id`)
);

1.5 角色权限关联表(role_permission

  • 角色权限表用于建立角色与权限之间的关系。通过该表,可以为每个角色分配不同的权限,从而实现用户到角色,角色到权限的转换。
CREATE TABLE `role_permission` (`role_id` INT NOT NULL,`permission_id` INT NOT NULL,`active` TINYINT(1) NOT NULL DEFAULT 1,`version` INT NOT NULL DEFAULT 0,`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`role_id`, `permission_id`),FOREIGN KEY (`role_id`) REFERENCES `role`(`id`),FOREIGN KEY (`permission_id`) REFERENCES `permission`(`id`)
);

2.实现案例

场景:学生管理系统中有管理员、教师、学生三种角色。

  • 管理员可以管理所有数据。
  • 教师可以管理学生成绩。
  • 学生只能查看自己的成绩。

2.1 查询用户的角色

SELECT r.name
FROM `user` u
JOIN `user_role` ur ON u.id = ur.user_id
JOIN `role` r ON ur.role_id = r.id
WHERE u.username = 'test_user' AND u.active = 1 AND r.active = 1;

2.2 查询用户的权限

SELECT p.name AS permission_name
FROM user u
JOIN user_role ur ON u.id = ur.user_id
JOIN role_permission rp ON ur.role_id = rp.role_id
JOIN permission p ON rp.permission_id = p.id
WHERE u.username = 'student1';

2.3 查询所有教师角色

SELECT u.username
FROM user u
JOIN user_role ur ON u.id = ur.user_id
JOIN role r ON ur.role_id = r.id
WHERE r.name = 'teacher';

2.4 逻辑删除用户

UPDATE `user` SET active = 0 WHERE id = 1;

2.5 使用乐观锁更新用户信息

UPDATE user
SET email = 'new_teacher1@test.com', version = version + 1
WHERE username = 'teacher1' AND version = 0; -- 假设当前版本号为0

MySQL中的权限五张表(了解,选择性观看!)

1. 了解MySQL权限系统

​ MySQL通过权限系统控制用户对数据库、表、列等的访问权限。权限信息存储在mysql数据库的五张表中:userdbtables_privcolumns_privprocs_priv。这些表是层级关系,MySQL在检查权限时从上到下依次检查。

SELECT * FROM mysql.user WHERE User = 'test_user';

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.权限五张表

表1:user

  • 作用:存储全局权限,即用户对所有数据库的权限。在任一数据库中都可以使用

  • 关键字段

    • Host:允许用户连接的主机(如localhost%)。
    • User:用户名。
    • 权限字段:如Select_privInsert_privUpdate_priv等,表示用户是否拥有对应的全局权限。
    • Grant_priv:用户是否可以授权其他用户权限
  • 示例

    SELECT Host, User, Select_priv, Insert_priv FROM mysql.user WHERE User = 'test_user';
    

    解释:这条查询会显示用户test_user在所有数据库上的SELECTINSERT权限。


表2:db

  • 作用

    • 存储用户对特定数据库的权限。
    • 如果用户在user表中没有全局权限,MySQL会检查db表,判断用户是否有权限访问某个数据库。
  • 关键字段

    • HostUser:与user表相同。
    • Db:数据库名称。
    • 权限字段:如Select_privInsert_priv等,表示用户在该数据库上的权限。
  • 示例

    SELECT Host, User, Db, Select_priv, Insert_priv FROM mysql.db WHERE User = 'test_user';
    

    解释:这条查询会显示用户test_usertest_db数据库上的权限。


表3:tables_priv

  • 作用:存储用户对特定表的权限。

  • 关键字段

    • HostUserDb:与db表相同。
    • Table_name:表名称。
    • Table_priv:用户在该表上的权限(如SelectInsert等)。
    • Column_priv:用户在该表的列上的权限(如果有)。
  • 示例

    SELECT Host, User, Db, Table_name, Table_priv FROM mysql.tables_priv WHERE User = 'test_user';
    

    解释:这条查询会显示用户test_usertest_db.test_table表上的权限。


表4:columns_priv

  • 作用:存储用户对特定列的权限。

  • 关键字段

    • HostUserDbTable_name:与tables_priv表相同。
    • Column_name:列名称。
    • Column_priv:用户在该列上的权限(如SelectInsert等)。
  • 示例

    SELECT Host, User, Db, Table_name, Column_name, Column_priv FROM mysql.columns_priv WHERE User = 'test_user';
    

    解释:这条查询会显示用户test_usertest_db.test_table表中特定列上的权限。


表5:procs_priv

  • 作用

    • 存储用户对存储过程和函数的权限。
    • 如果用户需要执行存储过程或函数,MySQL会检查procs_priv表。
  • 关键字段

    • HostUserDb:与db表相同。
    • Routine_name:存储过程或函数的名称。
    • Routine_type:类型(PROCEDUREFUNCTION
    • Proc_priv:用户对该存储过程或函数的权限(如Execute)。
  • 示例

    SELECT Host, User, Db, Routine_name, Routine_type, Proc_priv FROM mysql.procs_priv WHERE User = 'test_user';
    

    解释:这条查询会显示用户test_usertest_db数据库中存储过程和函数上的权限。


3.权限检查流程

  • MySQL在检查用户权限时,按照以下顺序检查:
    1. 检查user表中的全局权限。
    2. 检查db表中的数据库权限。
    3. 检查tables_priv表中的表权限。
    4. 检查columns_priv表中的列权限。
    5. 检查procs_priv表中的存储过程和函数权限。
  • **注意:**如果某一层级的权限满足要求,MySQL就不会继续检查下一层级。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/71163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Deepseek R1模型本地化部署+API接口调用详细教程:释放AI生产力

文章目录 前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装ollama2部署DeepSeek R1模型删除已存在模型,以7b模型为例 三、DeepSeek API接口调用Cline配置 前言 随着最近人工智能 DeepSeek 的爆火,越来越多的技术大佬们开始关注如…

对openharmony HDF驱动框架的C/S设计模式和单例类的说明

在分析openharmony的HDF驱动框架时我们会发现用了很多面向对象的思想,例如类继承、接口、单例类等,本来应该是好事情,**但使用时对象之间的关系交错复杂,不太符合linux内核分层分模块的思路,导致整体理解起来比较困难&…

【踩坑】⭐️MyBatis的Mapper接口中不建议使用重载方法

目录 🍸前言 🍻一、背景 🍹二、问题处理 💞️三、处理方法 🍸前言 小伙伴们大家好,很久没有水..不是,写文章了,都收到系统的消息了;我算下时间,上周是单休…

harmonyOS的文件的增、删、读、写相关操作(fs/content)

注意: 操作harmonyOS的文件只能对app沙箱内的文件进行操作 牵扯到两个支持点: fs和content这两个API; 具体的操作方法看下图: 创建文件 //js 引入 import fs from "ohos.files.fs" import featureAbility from "ohos.ability.featureAbility"; // 上下…

GC 基础入门

什么是GC(Garbage Collection)? 内存管理方式通常分为两种: 手动内存管理(Manual Memory Management)自动内存管理(Garbage Collection, GC) 手动内存管理 手动内存管理是指开发…

简要分析LeetCode树经典题目(Java)

目录 开场白 实战环节 准备工作 遍历问题 LeetCode144. 二叉树的前序遍历 方法一 方法二 LeetCode94. 二叉树的中序遍历 LeetCode145. 二叉树的后序遍历 方法一 方法二 LeetCode102. 二叉树的层序遍历 LeetCode103. 二叉树的锯齿形层序遍历 LeetCode107. 二叉树的…

深度剖析 NVIDIA Isaac Sim:重塑机器人开发的创新引擎

一、引言 在上一篇文章探索探索 NVIDIA Isaac Sim:解锁机器人开发的无限可能中,我们初步领略了 NVIDIA Isaac Sim 平台为机器人开发带来的无限潜力。随着平台的不断更新迭代,又有许多令人惊喜的新特性和优化,让我们继续深入体验这…

Spring Boot (maven)分页3.0版本 通用版

前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…

OpenAI 放王炸,将发布整合多项技术的 GPT-5,并免费无限使用,该模型有哪些技术亮点

对于 ChatGPT 的免费用户,将可以无限制地访问 GPT-5,但仅限于标准的智能级别。该级别会设定滥用限制,以防止不当使用(意思就是你得付费嘛)。 OpenAI CEO Sam Altman 今天在 X 上透露了 GPT-4.5 和 GPT-5 的最新发展计划。 OpenAI 将发布代…

git pull 与 git pull --rebase的区别与使用

git pull 与 git pull --rebase的区别与使用 1. 优化commit很乱的记录1.1 解决问题例子 1.2 idea 中更新代码 1. 优化commit很乱的记录 课程:优化Commit记录 之前遇到过这个问题,已知没当回事,现在想做出改变,正好B站有个视频&am…

Web3 开发者周刊 36 | 构建自主未来:Agent、可扩展性与赏金

欢迎来到 Web3 开发者周刊 36,这里汇聚了赋能您的 Web3 构建之旅的各种资源。本周我们将剖析基于Agent的系统,讨论来自 Vitalik 关于以太坊 L1 和 L2 的最新思考,并提供最新高价值Bounty消息。 开始Build吧! ✅ One Trillion Age…

[小M全新力作-修稿]PFC_LLC电源设计全攻略:从原理学习到SIMULINK仿真到EDA板实战,再到实物电源调试

未完结 可私信获取手稿以详细理解本文 LLC __2025.1.13 MOS ZVS ZCS 重锁粥支,MOS管由于设计工艺,总会产生一些寄生元件如:寄生电容(pf级)、寄生电阻、寄生二极管等 由于这些MOS参数,会导致MOS的导通…

VNC远程控制Mac

前言 macOS系统自带有VNC远程桌面,我们可以在控制端上安装配置VNC客户端,以此来实现远程控制macOS。但通常需要在不同网络下进行远程控制,为此,我们可以在macOS被控端上使用cpolar做内网穿透,映射VNC默认端口5…

关闭浏览器安全dns解决访问速度慢的问题

谷歌浏览器加载速度突然变慢了?检查安全DNS功能(DoH)是否被默认开启。 谷歌浏览器在去年已经推出安全DNS功能(即DoH) , 启用此功能后可以通过加密的DNS增强网络连接安全性。例如查询请求被加密后网络运营商将无法嗅探用户访问的地址,因此对于增强用户的…

SpringBoot3 快速启动框架

文章目录 1 SpringBoot3 介绍 1.1 SpringBoot3 简介1.2 快速入门1.3 入门总结 2 SpringBoot3 配置文件 2.1 统一配置管理概述2.2 属性配置文件使用2.3 YAML配置文件使用2.4 批量配置文件注入2.5 多环境配置和使用 3 SpringBoot 整合 springMVC 3.1 实现过程3.2 web相关配置3.3…

小小小病毒(3)(~_~|)

一分耕耘一分收获 声明: 仅供损害电脑,不得用于非法。损坏电脑,作者一律不负责。此作为作者原创,转载请经过同意。 欢迎来到小小小病毒(3) 感谢大家的支持 还是那句话:上代码! …

Map 和 Set

目录 一、搜索 概念: 模型: 二、Map ​编辑 1.Map 实例化: 2. Map的常见方法: 3.Map的常见方法演示: 1. put(K key, V value):添加键值对 3. containsKey(Object key):检查键是否存在 4.…

常用架构图:业务架构、产品架构、系统架构、数据架构、技术架构、应用架构、功能架构及信息架构

文章目录 引言常见的架构图I 业务架构图-案例模块功能说明1. 用户界面层 (UI)2. 应用服务层3. 数据管理层4. 基础设施层业务流程图示例技术实现II 功能架构图 -案例功能模块说明1. 船舶监控模块2. 报警管理模块3. 应急响应模块4. 通信管理模块5. 数据分析模块数据管理层基础设施…

爬虫实战:利用代理ip爬取推特网站数据

引言 亮数据-网络IP代理及全网数据一站式服务商屡获殊荣的代理网络、强大的数据挖掘工具和现成可用的数据集。亮数据:网络数据平台领航者https://www.bright.cn/?promoRESIYEAR50/?utm_sourcebrand&utm_campaignbrnd-mkt_cn_csdn_yingjie202502 在跨境电商、社…

传感器篇(一)——深度相机

目录 一 概要 二 原理 三 对比 四 产品 五 结论 一 概要 深度相机是一种能够获取物体深度信息的设备,相较于普通相机只能记录物体的二维图像信息,深度相机可以感知物体与相机之间的距离,从而提供三维空间信息。在你正在阅读的报告中提到…