【postgresql 基础入门】创建数据库的方法,存储位置,决定自己的数据的访问用户和范围
创建数据库
专栏内容:
- postgresql内核源码分析
- 手写数据库toadb
- 并发编程
开源贡献:
- toadb开源库
个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.
系列文章
- 入门准备
- postgrersql基础架构
- 快速使用
- 初始化集群
- 数据库服务管理
- psql客户端使用
- 创建数据库
- 数据库操作
前言
postgresql 数据库是一款通用的关系型数据,在开源数据库中能与商业数据媲美,在业界也越来越流行。
因为是开源数据库,不仅公开源码,还有很多使用案例,好用的插件,所以它的慢慢变成了数据库的先驱和标准,通过postgresql可以很好从使用到原理,彻底搞懂;
如果是学习编程,也可以学到丰富的编程知识,数据结构,编程技巧,它里面还有很多精妙的架构设计,分层思想,可以灵活定制的思想。
本专栏主要介绍postgresql 入门使用,数据库维护管理,通过这些使用来了解数据库原理,慢慢了解postgresql是什么样的数据库,能做那些事情,以及如何做好服务,最关键的是这些知识都是面试的必备项。
概述
本文主要分享PostgreSQL的基础的架构,方便我们对对PostgreSQL的部件之间如何相互作用的理解将会使本节更易理解,在我们使用的时候,不至于与其它类型的数据库产生混淆;
概述
使用数据库服务的前提是,需要指定一个database对象,这个database是其它数据库对象的载体,或者说是上级名命空间。
本文来分享一下创建数据库的几种方法,给数据库赋予用户使用的权限;
原理介绍
大家在想,创建数据库很简单,一条SQL语句就可以了,还需要讲原理吗?
那我们来看这几个问题?
- 数据库存储的位置在那里;
- 数据库的所有者是谁;
- 其它用户如何来访问这个数据库;
看起来还是不简单,数据库也是有存储位置的,它其实也是一个目录,它下面可以存储其它的数据库对象,如该数据库中的表对象;
当然,数据库作为一个各类数据库汇集存储的管理系统,不是所有用户都可以任意访问和操作的,这就有了数据库的所有者,所有者具有该数据库的所有权限,类似于这个数据库的一个管理员;
同样,数据库中有很多用户,它们也是不可以随意访问和操作的,需要管理员给他们分配权限,不符合权限的访问会被拒绝,就如同宿合管理,女生宿舍是不允许男生进入的。
现在通过演示来解答上述问题, 大概流程是这样的:
- 登录到数据库 ;
- 执行创建数据库的SQL;
- 创建新的用户;
- 将新数据库的使用权限授予新用户 ;
- 新用户登录到新数据库;
创建数据库
这一步的前提是,数据库服务已经启动,当前用户具有创建数据库的权限,一般刚开始我们都使用超级管理员来创建第一个自定义的数据库;
新数据库将通过复制模版数据库template1来创建,也就是说创建数据库,其实就是复制了一份template1模版库,而模版库是在集群初始化时就预定义好的;
在postgresql 中每个数据库对象都有一个唯一的标识,叫做OID,新数据库也会分配一个OID;
创建数据库常见方法:
- 在图形化客户端创建,通过菜单创建数据库;
- 通过命令或SQL来创建,本文也是分享这种方式,因为它简单直接,而且不会随着UI变动而发生不同;
本文介绍通过命令和SQL来创建 ,图形化相对简单;
在通过创建之前,我们需要准备登录信息,因为不管是那种创建方式,都是需要能够登录到数据库系统中,最终还是转化为SQL的执行。
通过上篇分享,在刚初始化的集群中,默认有一个数据库 postgres,有一个超级管理员用户,默为当前系统的用户 senllang (根据自已的情况修改) ,监听IP为 localhost, 端口5432;
有了这些信息,我们就可以开始创建新的数据库了;
SQL创建
- 登录数据库系统
[senllang@hatch bin]$ ./psql -d postgres
psql (16beta1)
Type "help" for help.postgres=#
这里的用户名,IP,端口都采用默认值,只指定了数据库名;
- 创建数据库
在命令行中输入以下命令:
postgres=# CREATE DATABASE db_factory;
CREATE DATABASE
在上述命令中,将 db_factory 替换为你希望创建的数据库名称。
通过 \l 命令就可以看到数据库的列表
postgres=# \lList of databasesName | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges
------------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------db_factory | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | |postgres | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | |template0 | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | | =c/senllang +| | | | | | | | senllang=CTc/senllangtemplate1 | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | | =c/senllang +| | | | | | | | senllang=CTc/senllang
(4 rows)
刚才创建的数据库 db_factory 的 Owner就是创建者用户,默认owner拥有该数据库的所有权限,所有Access privileges 一栏没有信息;
客户端命令创建
在安装目录下的bin目录中,有一个工具 createdb ,看名称我们就知道它就是创建数据库专用工具了;
先来看下它的帮助信息
[senllang@hatch bin]$ ./createdb --help
createdb creates a PostgreSQL database.Usage:createdb [OPTION]... [DBNAME] [DESCRIPTION]Options:-D, --tablespace=TABLESPACE default tablespace for the database-e, --echo show the commands being sent to the server-E, --encoding=ENCODING encoding for the database-l, --locale=LOCALE locale settings for the database--lc-collate=LOCALE LC_COLLATE setting for the database--lc-ctype=LOCALE LC_CTYPE setting for the database--icu-locale=LOCALE ICU locale setting for the database--icu-rules=RULES ICU rules setting for the database--locale-provider={libc|icu}locale provider for the database's default collation-O, --owner=OWNER database user to own the new database-S, --strategy=STRATEGY database creation strategy wal_log or file_copy-T, --template=TEMPLATE template database to copy-V, --version output version information, then exit-?, --help show this help, then exitConnection options:-h, --host=HOSTNAME database server host or socket directory-p, --port=PORT database server port-U, --username=USERNAME user name to connect as-w, --no-password never prompt for password-W, --password force password prompt--maintenance-db=DBNAME alternate maintenance databaseBy default, a database with the same name as the current user is created.Report bugs to <pgsql-bugs@lists.postgresql.org>.
PostgreSQL home page: <https://www.postgresql.org/>
可以看到,使用时,如果是默认ip,port,用户时,直接创建新的数据库即可;
我们再创建一个 db_factory1的数据库
[senllang@hatch bin]$ ./createdb db_factory1
postgres=# \lList of databasesName | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges
-------------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------db_factory | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | |db_factory1 | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | |postgres | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | |template0 | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | | =c/senllang +| | | | | | | | senllang=CTc/senllangtemplate1 | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | | =c/senllang +| | | | | | | | senllang=CTc/senllang
(5 rows)
通过查询,可以看到创建成功了,其它信息与第一种方法创建的一样;
以上两种方法都能成功创建 PostgreSQL 数据库,你可以根据个人喜好和使用环境选择适合你的方法。
存储位置
数据库存储在那里呢,前面博客介绍了数据库的逻辑架构,其中有说存储层次和命名空间,默认情况下,存储在默认的表空间pg_default,它的位置就是当前集群目录下的base目录;如果指定了表空间,那就是表空间对应的目录下了;
我们来证实一下,在集群目录下存储的目录和文件都是以OID来命名的,所以需要查看当前数据库的OID;
postgres=# select * from pg_tablespace ;oid | spcname | spcowner | spcacl | spcoptions
-------+--------------+----------+--------+------------1663 | pg_default | 10 | |1664 | pg_global | 10 | |16394 | tblspc_test1 | 10 | |
(3 rows)
postgres=# select oid, datname, dattablespace from pg_database ;oid | datname | dattablespace
-------+-------------+---------------5 | postgres | 16631 | template1 | 16634 | template0 | 166316445 | db_factory | 166316446 | db_factory1 | 1663
(5 rows)
在系统表中记录了数据的组织形式,也可以叫它们为数据字典;
在pg_tablespace 中记录了表空间的信息,名称和对应的OID;
在pg_database 中记录了数据库的信息,名称和对应的OID,还有存储对应的表空间的OID;可以看到我们创建的两个factory的数据库,OID分别是 16445和16446,对应的表空间为 1663,也就是pg_default,即默认表空间的存储位置;
在系统内部所有数据库对象的使用都是通过OID来标识和引用,很多时间我们需要通过OID来找到它对应的名称;
接下来找到默认表空间的位置,它位于集群目录testdemo1下,对应的就是base目录;
[senllang@hatch bin]$ cd testdemo1/base/
[senllang@hatch base]$ ls -l
total 60
drwx------. 2 senllang develops 8192 Sep 3 09:40 1
drwx------. 2 senllang develops 8192 Sep 7 08:27 16445
drwx------. 2 senllang develops 8192 Sep 7 08:32 16446
drwx------. 2 senllang develops 8192 Sep 2 22:02 4
drwx------. 2 senllang develops 8192 Sep 6 13:57 5
-- 集群目录的路径,根据自己的实际位置查找
[senllang@hatch base]$ pwd
/opt/postgres/bin/testdemo1/base
可以看到base 目录下有五个文件夹,都是以数字命名,正好对应了数据库列表中的OID;新创建的两个数据库 16445,16446也在这里,而且它们下面已经有很多文件了,是从模版数据库复制过来的;
所有者
默认的owner用户为创建者,也可以在创建时指定,当然也可以在创建后修改。
owner在权限管理中有非常关键的作用,它相当于该数据库对象的管理者;
在 PostgreSQL 中,数据库对象的 owner 具有以下作用:
- 权限控制:数据库对象的 owner 具有对对象的完全控制权限。他们可以执行任何与该对象相关的操作,包括读取、修改、删除等。其他用户则需要通过 owner 授予的权限才能对对象进行操作。
- 对象的访问:数据库对象的 owner 可以决定哪些用户可以访问该对象。通过授予不同的权限级别,owner 可以控制用户对对象的读取、修改和删除等操作。
- 对象的所有权:数据库对象的 owner 是该对象的所有者,他们可以对该对象进行任何操作。所有权可以转移给其他用户,但只有 owner 可以回收所有权。
- 对象的依赖关系:有些数据库对象(如视图、触发器等)依赖于其他对象,当这些依赖对象被删除或修改时,owner 可以决定是否允许删除或修改操作。
访问权限
数据库系统平常使用时,一般不会用超级管理员用户,只有在特殊场景时才会用超级管理员。
我们创建一个新用户 manager 成为 数据库的db_factory所有者,由它来全权负责,给其它使用者分配权限;
再创建一个 hr 的用户,它可以使用数据库,比如创建表等,但不能对数据库进行修改;
创建普通用户
新建两个普通用户,指定密码为123456;
postgres=# create user manager with password '123456';
CREATE ROLE
postgres=# create user hr with password '123456';
CREATE ROLE
这里有个细节,最后输出是 CREATE ROLE ,明明创建的是 create user,这个到用户权限章节再给大家分享;
修改所有者
将超级管理员的职责归位,用户的数据库应该由各自的管理员负责,所以这里将数据库 db_factory 的管理权限交给 manager用户。
当然这个命令是非常危险的,最好在一开始创建时就分配好owner。
postgres=# alter database db_factory owner to manager ;
ALTER DATABASE
db_factory=> \lList of databasesName | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges
-------------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------db_factory | manager | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | | =Tc/manager +| | | | | | | | manager=CTc/manager +| | | | | | | | hr=CTc/managerdb_factory1 | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | |postgres | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | |template0 | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | | =c/senllang +| | | | | | | | senllang=CTc/senllangtemplate1 | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | | =c/senllang +| | | | | | | | senllang=CTc/senllang
(5 rows)
通过查看,db_factory 的owner确实变为了 manager用户,Access privileges字段中也有了权限信息;
有人要说了,为什么这么麻烦呢? 举个例子,这个数据库系统被三个业务共同使用,它们对应三个数据库,如果都由超级管理员用户管理,那每天都会吵架 “谁又动了我的库“,哈哈~
授予访问权限
用普通用户 manager 登录到 数据库 db_factory;可以退出 \q 之后重新登录,也可以用之前分享的方法 \c进行切换数据库和用户;
给 hr 用户授予在当前数据库中的create 权限;
postgres=# \c db_factory manager
You are now connected to database "db_factory" as user "manager".db_factory=> grant ALL ON database db_factory TO hr ;
GRANT
用普通用户 hr 登录到 数据库 db_factory; 尝试创建表
db_factory=> \c db_factory hr
You are now connected to database "db_factory" as user "hr".db_factory=> CREATE TABLE employees (
db_factory(> employee_id SERIAL PRIMARY KEY,
db_factory(> name VARCHAR(100),
db_factory(> department VARCHAR(100),
db_factory(> position VARCHAR(100),
db_factory(> hire_date DATE,
db_factory(> salary NUMERIC(10, 2)
db_factory(> );
ERROR: permission denied for schema public
LINE 1: CREATE TABLE employees (
居然失败了,不过从报错信息,看出来对于默认的schema,也就是public没有权限;通过前面命名空间的介绍,我们知道有在database之下还有schema,表必须在某个schema中;
前面授予了database下的create权限,但是没有schema的权限;
下面授予schema下的create权限;
postgres=# \c db_factory manager
You are now connected to database "db_factory" as user "manager".db_factory=> grant create on schema public TO hr;
GRANT
新数据库中创建表
用普通用户 hr 登录到 数据库 db_factory;
db_factory=> \c db_factory hr
You are now connected to database "db_factory" as user "hr".
db_factory=> CREATE TABLE employees (employee_id SERIAL PRIMARY KEY,name VARCHAR(100),department VARCHAR(100),position VARCHAR(100),hire_date DATE,salary NUMERIC(10, 2)
);
CREATE TABLE
db_factory=> \dList of relationsSchema | Name | Type | Owner
--------+---------------------------+----------+-------public | employees | table | hrpublic | employees_employee_id_seq | sequence | hr
(2 rows)
创建雇员表成功,它的owner就是创建者hr,所以hr用户拥有该表的所有权限;这样就是一种分层管理的策略,符合现实中的人员管理层级关系。
结尾
非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!
作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。
注:未经同意,不得转载!
相关文章:
【postgresql 基础入门】创建数据库的方法,存储位置,决定自己的数据的访问用户和范围
创建数据库 专栏内容: postgresql内核源码分析手写数据库toadb并发编程 开源贡献: toadb开源库 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君…...
科技云报道:AI时代,对构建云安全提出了哪些新要求?
科技云报道原创。 随着企业上云的提速,一系列云安全问题也逐渐暴露出来,云安全问题得到重视,市场不断扩大。 Gartner 发布“2022 年中国 ICT 技术成熟度曲线”显示,云安全已处于技术萌芽期高点,预期在2-5年内有望达到…...
如何让 Llama2、通义千问开源大语言模型快速跑在函数计算上?
:::info 本文是“在Serverless平台上构建AIGC应用”系列文章的第一篇文章。 ::: 前言 随着ChatGPT 以及 Stable Diffusion,Midjourney 这些新生代 AIGC 应用的兴起,围绕AIGC应用的相关开发变得越来越广泛,有呈井喷之势,从长远看这波应用的爆…...
Linux内核源码分析 (B.2)虚拟地址空间布局架构
Linux内核源码分析 (B.2)虚拟地址空间布局架构 文章目录 Linux内核源码分析 (B.2)虚拟地址空间布局架构一、Linux内核整体架构及子系统二、Linux内核内存管理架构 一、Linux内核整体架构及子系统 Linux内核只是操作系统当中的一部分,对下管理系统所有硬件设备&…...
Spring系列文章:Spring使用JdbcTemplate
一、简介 JdbcTemplate是Spring提供的⼀个JDBC模板类,是对JDBC的封装,简化JDBC代码。 当然,你也可以不⽤,可以让Spring集成其它的ORM框架,例如:MyBatis、Hibernate等。 第一步:引入依赖 <d…...
[matlab]cvx安装后测试代码
测试环境: windows10 x64 matlab2023a 代码来自官方网站:CVX: Matlab Software for Disciplined Convex Programming | CVX Research, Inc. m 20; n 10; p 4; A randn(m,n); b randn(m,1); C randn(p,n); d randn(p,1); e rand; cvx_beginva…...
【css】margin:auot什么情况下失效
margin:auto只对块级元素有效果,并且在正常文档流margin:automargin:0 auto,css默认在正常文档流里面margin-top和margin-bottom是0 为什么margin: auto能实现水平居中,而垂直居中不行? 一般子…...
linux的dirty page回写磁盘过程中是否允许并发写入更新page?
概述 众所周知Linux内核write系统调用采用pagecache机制加速写入过程,避免write系统调用长时间block应用进程,用户态进程执行write调用的时候,内核只是将用户态buffer copy到内核的pagecache当中,write系统调用就返回了,完全不需要等待数据完全写入存储设备,因为存储设备…...
Docker-基础命令使用
文章目录 前言命令帮助命令执行示意图docker rundocker psdocker inspectdocker execdocker attachdocker stopdocker startdocker topdocker rmdocker prune参考说明 前言 本文主要介绍Docker基础命令的使用方法。 命令帮助 Docker命令获取帮助方法 # docker -h Flag shor…...
【Python 程序设计】Python 中的类型提示【06/8】
目录 一、说明 二、什么是动态类型? 2.1 为什么要使用类型提示? 2.2 局限性 三、基本类型提示 3.1 声明变量的类型 3.2 函数注释 四、Python 中的内置类型 4.1 原子类型与复合类型 五、函数注释 5.1 如何指定函数的参数类型和返回类型 5.2 在函数签名中…...
78 # koa 中间件的实现
上上节实现了上下文的,上一节使用了一下中间件,这一节来实现 koa 的中间件这个洋葱模型。 思路: 储存用户所有的 callback将用户传递的 callback 全部组合起来(redux 里的 compose)组合成一个线性结构依次执行&#…...
国产操作系统麒麟v10中遇到的一些问题
下载pycharm:直接在应用商店 目标:主机1安装了虚拟机,主机2要ping通主机1安装的虚拟机。 前提:主机1,主机2在同一局域网下,同一网段。 网络配置 因为虚拟机的网段不在局域网网段内,局域网下…...
Gridea+GitPage+Gittalk 搭建个人博客
👋通过GrideaGitPage 搭建属于自己的博客! 👻GitPage 负责提供 Web 功能! 😽Gridea 作为本地编辑器,方便 push 文章! 🏷本文讲解如何使用 GrideaGitPage 服务域名(可选&a…...
代码质量保障第2讲:单元测试 - 浅谈单元测试
代码质量保障第2讲:单元测试 - 浅谈单元测试 本文是代码质量保障第2讲,浅谈单元测试。单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。这是基础,所以围绕着单元测试,我从…...
“五度晟企通”企业发展服务平台正式发布,帮扶企业行稳致远!
在数字中国建设的大背景下,“五度易链”以企业实际发展需求为牵引,以帮扶企业行稳致远为目标,基于全体量产业大数据,运用NLP、AI等新一代信息技术,打造了数字化ToB企业发展服务平台“五度晟企通”,旨在以数…...
Java类和对象(七千字详解!!!带你彻底理解类和对象)
目录 一、面向对象的初步认知 1、什么是面向对象 2、面向对象和面向过程 (1)传统洗衣服的过程 (2)现代洗衣服过程 编辑 二、类的定义和使用 1、类的定义格式 三、类的实例化 1、什么是实例化 2、类和对象说明 四、t…...
机器学习笔记:node2vec(论文笔记:node2vec: Scalable Feature Learning for Networks)
2016 KDD 1 intro 利用graph上的节点相似性,对这些节点进行embedding 同质性:节点和其周围节点的embedding比较相似 蓝色节点和其周围的节点结构等价性 结构相近的点embedding相近 比如蓝色节点,都处于多个簇的连接处 2 随机游走 2.1 介绍…...
go基础10 -字符串的高效构造与转换
前面提到过,Go原生支持通过/操作符来连接多个字符串以构造一个更长的字符串,并且通过/操作符的字符串连接构造是最自然、开发体验最好的一种。 但Go还提供了其他一些构造字符串的方法,比如: ● 使用fmt.Sprintf; ● 使…...
VR钢铁实训 | 铁前事业部虚拟仿真培训软件
随着科技的发展,虚拟现实技术在各个行业中的应用越来越广泛。在钢铁冶炼行业中,VR技术也逐渐得到了应用,其中铁前事业部虚拟仿真培训软件就是一项非常有优势的技术。 铁前事业部虚拟仿真培训软件是广州华锐互动打造的《钢铁生产VR虚拟培训系统…...
DevOps
DevOps 是开发 (Dev) 和运营 (Ops) 的复合词,它将人、流程和技术结合起来,不断地为客户提供价值。 DevOps 对团队意味着什么? DevOps 使以前孤立的角色(开发、IT 运营、质量工程和安全)可以协调和协作,以生…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
