【MySQL】Linux下MySQL的目录结构、用户、权限与角色

news2025/2/24 6:12:08

一、Linux下MySQL的目录结构

1、MySQL相关目录

  • 数据库文件存放路径:/var/lib/mysql
  • 数据库命令存放路径:/user/bin/user/sbin
  • 配置文件目录:/usr/share/mysql-8.0//usr/share/mysql//etc/my.cnf

2、假设我们创建了一个数据库dbtest1,在这个数据库下创建了表test1

  • 如果表使用InnoDB存储结构,在/var/lib/mysql/dbtest1下会生成如下文件
    • 存储表结构(5.7版本存在):test1.frm
    • 存放此数据库的字符集、比较规则等配置(5.7版本存在):db.opt
    • 数据信息和索引信息存放:
      • 如果使用系统表空间存储模式:表数据会存放到/var/lib/mysql/ibdata1
      • 如果使用独立表空间存储模式:/var/lib/mysql/dbtest1下会生成test1.idb(8.0版本没有.frm和.opt文件,独立表空间存储模式下,表结构、数据以及db.opt存放的配置信息都会存放到.idb文件中)
  • 如果表使用MyISAM存储结构,在/var/lib/mysql/dbtest1下会生成如下文件
    • 存储数据信息(如果采用独立表空间的存储模式):test1.MYD(MyData)
    • 存放索引信息文件:test1.MYI(MyIndex)
    • 存储表结构:test1.frm(5.7版本)或test_xxx.sdi(8.0版本)
  • 创建视图:MySQLl5.7会创建一个xxx_view.frm存放视图结构(8.0版本还没找到在哪,暂时留一个疑问)

决定使用系统表空间还是独立表空间,由参数innodb_file_per_table决定,可以在my.cnf下配置

  • innodb_file_per_table=0:使用系统表空间
  • innodb_file_per_table=1:使用独立表空间
mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)

mysql>

这里的ON,表示使用独立表空间

3、可以使用命令ibd2sdi --dump-file=test1.txt test1.ibd查看存放表数据的文件test1.ibd

二、用户管理

1、查看当前系统中存在的用户
使用mysql这个database,执行select host,user from user;语句

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>
mysql>
mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
+-----------+------------------+
4 rows in set (0.00 sec)

mysql>

2、创建用户CREATE USER

mysql> create user 'test001' identified by 'test001Pwd';
Query OK, 0 rows affected (0.01 sec)

mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| %         | test001          |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
+-----------+------------------+
5 rows in set (0.00 sec)

mysql>
mysql> create user 'test001'@'localhost' identified by 'test001Pwd';
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| %         | test001          |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | test001          |
+-----------+------------------+
6 rows in set (0.00 sec)

mysql>

我们发现,同一个用户test001,可以被创建多次
因为user表中,host+user字段是联合主键

联合主键:指的是把两个列看成是一个整体,这个整体是不为空,唯一,不重复

3、修改用户名(注意flush privileges)

mysql> create user 'test002'@'localhost' identified by 'test002Pwd';
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| %         | test001          |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | test001          |
| localhost | test002          |
+-----------+------------------+
7 rows in set (0.00 sec)

mysql>
mysql> update user set user = 'test003' where user = 'test002' and host = 'localhost';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>
mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| %         | test001          |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | test001          |
| localhost | test003          |
+-----------+------------------+
7 rows in set (0.00 sec)

mysql>
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql>

我们新建了一个用户test002,修改用户名为test003后,
如果未执行flush privileges;,那么当我们尝试用test003登录,会发现失败
在这里插入图片描述

4、删除用户

# 方式一:使用DROP
# 默认删除host为%的用户
DROP USER user1,user2...;
# 删除指定host的用户
DROP USER 'test001'@'localhost';

# 方式二:使用delete(不推荐)
DELETE from mysql.user where user = 'test001' and host = 'localhost';
flush privileges;

5、设置用户密码

  • 修改当前用户的密码,我们之前把test002改为test003,我们尝试改一下test003的密码
    • 方式一:使用alter user user() identified by '新密码';
    • 方式二:使用SET password = '新密码';

使用alter user user() identified by '新密码';把密码从test002Pwd改为test003

[root@myLinux2 ~]# mysql -utest003 -ptest002Pwd
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
...
mysql>
mysql> alter user user() identified by 'test003';
Query OK, 0 rows affected (0.01 sec)

mysql> exit;
Bye
[root@myLinux2 ~]# mysql -utest003 -ptest002Pwd
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'test003'@'localhost' (using password: YES)
[root@myLinux2 ~]#
[root@myLinux2 ~]# mysql -utest003 -ptest003
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.0.36 MySQL Community Server - GPL
...

使用SET password = '新密码';把密码从test003改为test003Pwd

mysql> SET password = 'test003Pwd';
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye
[root@myLinux2 ~]# mysql -utest003 -ptest003
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'test003'@'localhost' (using password: YES)
[root@myLinux2 ~]#
[root@myLinux2 ~]# mysql -utest003 -ptest003Pwd
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20
Server version: 8.0.36 MySQL Community Server - GPL
...
mysql>
  • 修改其他用户的密码:需要是root用户或者被root用户赋予修改密码的权限
    • 方式一:使用alter user 'user'@'host' identified by '新密码';
    • 方式二:使用SET PASSWORD FOR 'user'@'host' = '新密码';

使用alter user 'user'@'host' identified by '新密码';修改test003的密码为test003

mysql> ALTER USER 'test003'@'localhost' identified by 'test003';
Query OK, 0 rows affected (0.01 sec)

在这里插入图片描述
使用SET PASSWORD FOR 'user'@'host' = '新密码';修改test003的密码为test003Pwd

mysql> SET PASSWORD FOR 'test003'@'localhost' = 'test003Pwd';
Query OK, 0 rows affected (0.00 sec)

在这里插入图片描述

三、权限管理

1、授权的原则

  • 最小权限原则:只给予用户他职权范围内的最小权限,比如用户只能查询,就只给他select权限
  • 创建用户的时候,限制用户的登陆主机,限制他的网段或IP
  • 每个用户的密码都要满足密码复杂度
  • 定期清理用户账号和权限

2、查看用户权限
使用show grants;或者show grants for 'test001'@'localhost';
在这里插入图片描述

3、授权方式(需要是root用户)

  • 方式一:直接给用户授权:grant 权限1,权限2 on database名称.表名 to '用户名'@'host';

首先我们使用show grants;查看一下当前用户的权限
在这里插入图片描述
如果想给用户授权某个数据下的所有表的权限,那么database名称.表名需要换成database名称.*

mysql> grant select,update on dbtest1.* to 'test003'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql>

我们测试一下test003的权限,发现确实是只有select和update权限

mysql> show grants;
+--------------------------------------------------------------+
| Grants for test003@localhost                                 |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO `test003`@`localhost`                  |
| GRANT SELECT, UPDATE ON `dbtest1`.* TO `test003`@`localhost` |
+--------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql>
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| dbtest1            |
| information_schema |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

mysql>
mysql> use dbtest1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>
mysql> show tables;
+-------------------+
| Tables_in_dbtest1 |
+-------------------+
| test1             |
| test1_view        |
+-------------------+
2 rows in set (0.00 sec)

mysql>
mysql> select * from test1;
+------+--------+
| id   | name   |
+------+--------+
|    1 | decade |
|    2 | 十年   |
+------+--------+
2 rows in set (0.00 sec)

mysql>
mysql> update test1 set name = 'decadeNew' where id = '1';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from test1;
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | decadeNew |
|    2 | 十年      |
+------+-----------+
2 rows in set (0.00 sec)

mysql>
mysql> delete from test1 where id = '1';
ERROR 1142 (42000): DELETE command denied to user 'test003'@'localhost' for table 'test1'
mysql>

然后我们再把delete权限也给他加上

mysql> grant delete on dbtest1.* to 'test003'@'localhost';
Query OK, 0 rows affected (0.00 sec)

重新登录之后,删除权限生效

mysql> delete from test1 where id = '1';
Query OK, 1 row affected (0.00 sec)

mysql> select * from test1;
+------+--------+
| id   | name   |
+------+--------+
|    2 | 十年   |
+------+--------+
1 row in set (0.00 sec)

mysql>
mysql>
mysql> show grants;
+----------------------------------------------------------------------+
| Grants for test003@localhost                                         |
+----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `test003`@`localhost`                          |
| GRANT SELECT, UPDATE, DELETE ON `dbtest1`.* TO `test003`@`localhost` |
+----------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql>

如果想把所有表下的所有的权限都授予某个用户,那么可以使用
GRANT all privileges ON *.* TO '用户名'@'host';

  • 方式二:把权限赋予给角色,然后把用户和角色进行绑定

4、权限的横向分组和纵向分组

  • 横向分组:可以接触到的数据范围,例如数据库、表
  • 纵向分组:对接触到的数据能访问到什么程度,如查看、更新、删除、插入等

5、收回权限(注意是FROM不是TO)
使用REVOKE 权限1,权限2 ON database名称.表名 FROM '用户名'@'host';

mysql> revoke select on dbtest1.test1 from 'test001'@'localhost';
Query OK, 0 rows affected (0.00 sec)

重新登陆后,发现权限已失效

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
+--------------------+
2 rows in set (0.00 sec)

mysql>
mysql> show grants;
+---------------------------------------------+
| Grants for test001@localhost                |
+---------------------------------------------+
| GRANT USAGE ON *.* TO `test001`@`localhost` |
+---------------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql> SELECT CURRENT_USER;
+-------------------+
| CURRENT_USER      |
+-------------------+
| test001@localhost |
+-------------------+
1 row in set (0.00 sec)

mysql>

如果回收某个用户所有表下的所有的权限,那么可以使用
REVOKE all privileges ON *.* FROM '用户名'@'host';

6、业务开发
实际业务开发时,访问数据库不应该使用root用户,可以单独创建一个业务账号,进行相应授权
防止root密码泄露之后,数据库处于一个危险状态

7、权限表(根据联合主键确定数据的唯一性)

  • user表:关键字段user、host、authentication_string(密码),决定用户能否正常登录
    在这里插入图片描述
  • db表:记录用户对某个database拥有的权限信息
    在这里插入图片描述
  • tables_priv:记录用户对某个表拥有的权限信息
    在这里插入图片描述
  • columns_priv:记录用户对某个字段拥有的权限信息
    在这里插入图片描述
  • procs_priv:记录用户对某个存储过程和函数拥有的权限信息
    在这里插入图片描述

在MySQL启动时,服务器将这些表中的权限信息内容读入内存

8、MySQL访问控制

  • 连接核实阶段:将当前用户信息和user表中的user、host、authentication_string(密码)进行匹配,决定用户能否正常登录
  • 请求核实阶段:从user表到db表,然后一层一层向下检查当前用户的权限,确定是否满足当前请求所需权限,如果找到匹配结果,操作被允许,否则就就返回错误信息

四、角色管理

1、在MySQL中,角色是权限的集合,引入角色之后,方便管理权限相同的用户

2、创建角色

mysql> create user 'test002' identified by 'test002Pwd';
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> create role 'manager'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT select,update on dbtest1.* to 'manager'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql> show grants for 'manager'@'%';
+------------------------------------------------------+
| Grants for manager@%                                 |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO `manager`@`%`                  |
| GRANT SELECT, UPDATE ON `dbtest1`.* TO `manager`@`%` |
+------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> revoke update on dbtest1.* from 'manager'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> show grants for 'manager'@'%';
+----------------------------------------------+
| Grants for manager@%                         |
+----------------------------------------------+
| GRANT USAGE ON *.* TO `manager`@`%`          |
| GRANT SELECT ON `dbtest1`.* TO `manager`@`%` |
+----------------------------------------------+
2 rows in set (0.00 sec)

mysql>

上面我们测试了一下创建角色、赋予权限、查询角色权限和回收权限

同理,我们也可以使用下面的语句,将角色与所有权限进行绑定和解绑
GRANT all privileges on *.* to 'manager'@'%';
REVOKE all privileges on *.* FROM 'manager'@'%';

删除角色使用DROP ROLE '用户名'@'host';

mysql> create role 'employee'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for 'employee'@'%';
+--------------------------------------+
| Grants for employee@%                |
+--------------------------------------+
| GRANT USAGE ON *.* TO `employee`@`%` |
+--------------------------------------+
1 row in set (0.00 sec)

mysql> drop role 'employee'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql> show grants for 'employee'@'%';
ERROR 1141 (42000): There is no such grant defined for user 'employee' on host '%'
mysql>

3、给用户和角色进行绑定

mysql> create user 'test002' identified by 'test002Pwd';
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> show grants for 'test002'@'%';
+-------------------------------------+
| Grants for test002@%                |
+-------------------------------------+
| GRANT USAGE ON *.* TO `test002`@`%` |
+-------------------------------------+
1 row in set (0.00 sec)

mysql>
mysql>
mysql> grant 'manager'@'%' to 'test002'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> show grants for 'test002'@'%';
+--------------------------------------+
| Grants for test002@%                 |
+--------------------------------------+
| GRANT USAGE ON *.* TO `test002`@`%`  |
| GRANT `manager`@`%` TO `test002`@`%` |
+--------------------------------------+
2 rows in set (0.00 sec)

mysql>

4、激活角色
注意:用户绑定之后还需要激活角色,权限才能生效

  • 方式一:使用set default role激活

执行前使用select CURRENT_ROLE();查询当前用户的角色信息

mysql> select CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| NONE           |
+----------------+
1 row in set (0.00 sec)

mysql>
mysql> set default role 'manager'@'%' to 'test002'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql>

执行完成之后,用户重新登录,发现已拥有manager角色的权限

mysql> select CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| `manager`@`%`  |
+----------------+
1 row in set (0.00 sec)

mysql> select * from dbtest1.test1;
+------+--------+
| id   | name   |
+------+--------+
|    2 | 十年   |
+------+--------+
1 row in set (0.00 sec)

mysql>
  • 方式二:修改系统变量(设置到配置文件里也可以)
    这样一来,后续再进行角色绑定,就不用手动激活了,只需要重新登录即可
mysql> show variables like 'activate_all_roles_on_login';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| activate_all_roles_on_login | OFF   |
+-----------------------------+-------+
1 row in set (0.00 sec)

mysql>
mysql> SET global activate_all_roles_on_login=ON;
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> show variables like 'activate_all_roles_on_login';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| activate_all_roles_on_login | ON    |
+-----------------------------+-------+
1 row in set (0.01 sec)

mysql>

5、撤销用户角色
使用revoke '角色'@'host' from '用户'@'host';

mysql> revoke 'manager'@'%' from 'test002'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql>

这样一来,test002的角色就被撤销了
在这里插入图片描述

如有错误,欢迎指正!!!

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

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

相关文章

uniapp 安卓、IOS、H5、微信小程序实现PDF在线预览

在使用uniapp开发移动端时,微信开发者工具里webview能正常打开后端接口返回的pdf文件流。正式发布后,在配置了业务域名和服务器域名的前提下,预览pdf文件却只能看到白屏,因此我猜测微信小程序不能通过webview读取文件流。这个想法…

论文阅读_基于嵌入的Facebook搜索

英文名称:Embedding-based Retrieval in Facebook Search 中文名称:基于嵌入式检索的Facebook搜索 时间:Wed, 29 Jul 2020 (v2) 地址:https://arxiv.org/abs/2006.11632 作者:Jui-Ting Huang, Ashish Sharma, Shuying …

09_计算机网络模型

目录 OSI/RM七层模型 OSI/RM七层模型 各层介绍及硬件设备 传输介质 TCP/IP协议簇 网络层协议 传输层协议 应用层协议 完整URL的组成 IP地址表示与计算 分类地址格式 子网划分和超网聚合 无分类编址 特殊含义的IP地址 IPv6协议 过渡技术 OSI/RM七层模型 OSI/RM七…

《昇思25天学习打卡营第6天 | 函数式自动微分》

《昇思25天学习打卡营第6天 | 函数式自动微分》 目录 《昇思25天学习打卡营第6天 | 函数式自动微分》函数式自动微分简单的单层线性变换模型函数与计算图微分函数与梯度计算Stop Gradient 函数式自动微分 神经网络的训练主要使用反向传播算法,模型预测值&#xff0…

LeetCode题练习与总结:重排链表--143

一、题目描述 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值,而是需要实际的进…

centos 7.9 离线环境安装GPU服务环境

文章目录 centos 7.9 离线环境安装GPU服务环境系统配置更新 gcc更新内核安装显卡驱动安装cuda安装docker 和 nvidia-container-runtime验证 centos 7.9 离线环境安装GPU服务环境 基于centos 7.9 离线安装gpu 服务基础环境,用于在docker 中运行算法服务 系统配置 …

python open函数中文乱码怎么解决

首先在D盘下新建一个html文档,接着在里面输入含有中文的Html字符,使用中文格式对读取的字符进行解码,再用utf-8的模式对字符进行编码,然后就能正确输出中文字符。 代码如下: # -*- coding: UTF-8 -*- file1 open(&quo…

Python | Leetcode Python题解之第207题课程表

题目: 题解: class Solution:def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:edges collections.defaultdict(list)indeg [0] * numCoursesfor info in prerequisites:edges[info[1]].append(info[0])indeg[info[…

【Web3项目案例】Ethers.js极简入门+实战案例:实现ERC20协议代币查询、交易

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 目录 简介 前景科普-ERC20 Ethers极简入门教程:HelloVitalik(非小白可跳) 教程概览 开发工具 V…

LeetCode-刷题记录-二分法合集(本篇blog会持续更新哦~)

一、二分查找概述 二分查找(Binary Search)是一种高效的查找算法,适用于有序数组或列表。(但其实只要满足二段性,就可以使用二分法,本篇博客后面博主会持续更新一些题,来破除一下人们对“只有有…

44 - 50题高级字符串函数 / 正则表达式 / 子句 - 高频 SQL 50 题基础版

目录 1. 相关知识点2.例子2.44 - 修复表中的名字2.45 - 患某种疾病的患者2.46 - 删除重复的电子邮箱2.47 - 第二高的薪水2.48 - 按日期分组销售产品2.49 - 列出指定时间段内所有的下单产品2.50 - 查找拥有有效邮箱的用户 1. 相关知识点 相关函数 函数含义concat()字符串拼接upp…

[AIGC] Shell脚本在工作中的常用用法

Shell脚本是一种为 shell 编写的脚本程序。商业上的 Unix Shell 一般都配备图形界面,主要包括:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh&…

专题三:Spring源码中新建module

前面我们构建好了Spring源码,接下来肯定迫不及待来调试啦,来一起看看大名鼎鼎ApplicationContext 新建模块 1、基础步骤 1.1 自定义模块名称如:spring-self 1.2 选择构建工具因为spring使用的是gradle,所以这边需要我们切换默认…

KV260视觉AI套件--PYNQ-DPU

目录 1. 简介 2. DPU 原理介绍 2.1 基本原理 2.2 增强型用法 3. DPU 开发流程 3.1 添加 DPU IP 3.2 在 BD 中调用 3.3 配置 DPU 参数 3.4 DPU 与 Zynq MPSoC互联 3.5 分配地址 3.6 生成 Bitstream 3.7 生成 BOOT.BIN 4. 总结 1. 简介 在《Vitis AI 环境搭建 &…

爬虫中如何创建Beautiful Soup 类的对象

在使用 lxml 库解析网页数据时,每次都需要编写和测试 XPath 的路径表达式,显得非常 烦琐。为了解决这个问题, Python 还提供了 Beautiful Soup 库提取 HTML 文档或 XML 文档的 节点。 Beautiful Soup 使用起来很便捷,…

数据结构-期末复习题

数据结构-期末复习题 一、选择题 1、在数据结构中,与所使用的计算机无关的是数据的( ) 结构。 A. 存储B. 物理C. 逻辑D. 物理和存储 【答案】C 【解析】暂无解析2、算法分析的两个主要方面是 ( )。 A. 正确性和简单性B. 可读性和文档性C. 空间复杂度…

拼多多滑块逆向

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言(lianxi …

onInterceptTouchEvent() 与 onTouch() 事件分析

前言 本文主要分析 onTouch() 与 onTouchEvent() 事件的差异 正文 先看布局文件&#xff1a; <?xml version"1.0" encoding"utf-8"?> <com.longzhiye.intercepttouch.MyFrameLayout xmlns:android"http://schemas.android.com/apk/res…

Big Data Tools插件

一些介绍 在Jetbrains的产品中&#xff0c;均可以安装插件&#xff0c;其中&#xff1a;Big Data Tools插件可以帮助我们方便的操作HDFS&#xff0c;比如 IntelliJ IDEA&#xff08;Java IDE&#xff09; PyCharm&#xff08;Python IDE&#xff09; DataGrip&#xff08;SQL …

ctfshow-web入门-命令执行(web71-web74)

目录 1、web71 2、web72 3、web73 4、web74 1、web71 像上一题那样扫描但是输出全是问号 查看提示&#xff1a;我们可以结合 exit() 函数执行php代码让后面的匹配缓冲区不执行直接退出。 payload&#xff1a; cvar_export(scandir(/));exit(); 同理读取 flag.txt cinclud…