【数据库二】数据库用户管理与授权

news2024/11/25 18:31:32

数据库用户管理与授权

  • 1.MySQL数据库管理
    • 1.1 常用的数据类型
    • 1.2 char和varchar区别
    • 1.3 SQL语句分类
  • 2.数据表高级操作
    • 2.1 克隆表
    • 2.2 清空表
    • 2.3 创建临时表
  • 3.MySQL的六大约束
  • 4.外键约束
    • 4.1 外键概述
    • 4.2 创建主从表
    • 4.3 主从表中插入数据
    • 4.4 主从表中删除数据
    • 4.5 删除外键约束
  • 5.数据库用户管理
    • 5.1 新建用户
    • 5.2 查看用户信息
    • 5.3 重命名用户
    • 5.4 删除用户
    • 5.5 修改当前登录用户密码
    • 5.6 修改其他用户密码
    • 5.7 忘记root密码的解决办法
  • 6. 数据库用户授权
    • 6.1 all privilege包含的权限
    • 6.2 授予权限
    • 6.3 查看权限
    • 6.4 撤销权限
  • 7. 知识点总结

1.MySQL数据库管理

1.1 常用的数据类型

在这里插入图片描述

1.2 char和varchar区别

CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同,在存储或检索过程中不进行大小写转换。

下表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差别:

在这里插入图片描述
字节大小

  • char无论是否有值,都会占用固定长度的字节大小,保存在磁盘上都是4字节。
  • varchar在保存字符时,默认会加一个隐藏的结束符,因此结束符会多算一个字节。

优劣比较

  • varchar比char节省磁盘空间。
  • 但varchar类型的数据读写速度比char慢,因为char是连续的磁盘空间,·而varchar在多次增删改查中会产生一些磁盘空间碎片。

1.3 SQL语句分类

SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。
在这里插入图片描述

2.数据表高级操作

2.1 克隆表

(1)克隆表,将数据表的数据记录生成到新的表中

方法一:
create table test01 like KY08;	#通过LIKE方法,复制KY08表结构生成test01 表
insert into test01 select * from KY08;
#此方法能保证新表的表结构、表数据跟旧表都是一致的

方法二:
CREATE TABLE test02 (SELECT * from KY08);
#此方法创建的新表的表数据和旧表是一样的,但可能会出现新表的表结构和旧表的不一致

show create table test02\G   #获取数据表的表结构、索引等信息
SELECT * from test02;

2.2 清空表

(2)清空表,删除表内的所有数据

方法一:
delete from test01;
#DELETE清空表后,返回的结果内有删除的记录条目;DELETE工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM删除所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录。

方法二:
truncate table test01;
#TRUNCATE 清空表后,没有返回被删除的条目;TRUNCATE 工作时是将表结构按原样重新建立,因此在速度上 TRUNCATE 会比 DELETE 清空表快;使用 TRUNCATE TABLE 清空表内数据后,ID 会从 1 开始重新记录。

2.3 创建临时表

(3)temporary关键字,创建临时表

#临时表创建成功之后,使用SHOW TABLES命令是看不到创建的临时表的,临时表会在连接退出后被销毁。 如果在退出连接之前,也可以可执行增删改查等操作,比如使用 DROP TABLE 语句手动直接删除临时表。
CREATE TEMPORARY TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);

例:
create temporary table test03 (
id int(4) zerofill primary key auto_increment,
name varchar(10) not null,
cardid int(18) not null unique key,
hobby varchar(50));

insert into test03 values(1,'zhangsan',123456,'running');

select * from test03;
show tables;

quit
select * from test03;

3.MySQL的六大约束

参数含义
primary key表示此字段的主键约束,此字段数据不能重复,不能为null。一个表中只能由要给主键
unique key表示此字段唯一键约束,此字段数据不可以重复。一张表中只能有一个主键,但是一张表中可以有多个唯一键
not nul表示此字段为非空约束,此字段的值不允许为NULL
default默认值约束 字段的值如果没有设置则使用默认值自动填充
auto_increment表示此字段为自增长字段(自增约束),即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
foregin key表示此字段为外键约束,保证相关的表的数据的完整性和一致性
use mybl;
create table if not exists info (				  #表示检测要创建的表是否已存在,如果不存在就继续创建。
id int(4) zerofill primary key auto_increment,    #指定主键的第二种方式。其中int(4) zerofill表示若数值不满4位数,则前面用"0"填充,例如0001。
name varchar(10) not null default '匿名',
cardid int(18) not null unique key,
hobby varchar(50));

注意: int(N) 需要和zerofill primary配合使用,否则N的值没有意义。
在这里插入图片描述

4.外键约束

4.1 外键概述

创建外键约束,保证数据的完整性和一致性。

外键的定义: 如果同一个属性字段X在表一中是主键,而在表二中不是主键,则字段X称为表二的外键。
在这里插入图片描述

主键表和外键表的理解:
(1)以公共关键字作主键的表为主键表(父表、主表)
(2)以公共关键字作外键的表为外键表(从表、外表)

**注意:** 与外键关联的主表的字段必须设置为主键。要求从表不能是临时表,主从表的字段具备相同的数据类型、字符长度和约束。

4.2 创建主从表

#创建主表 profession
create table profession (pid int,pname char(6));

#创建从表 student
create table student (sid int,sname varchar(10),age int,proid int);

#为主表profession添加一个主键约束,主键名建议以“PK_”开头,constraint PK_pid指定主键名称,可以省略不写,系统会自动分配一个名称
alter table profession add constraint PK_pid primary key (pid);

#为从表student表添加外键,并将student表的proid字段和 profession表的pid字段建立外键关联。外键名建议以“FK_”开头,constraint FK_pro指定外键约束,可以省略不写,系统会自动分配一个名称
alter table student add constraint FK_pro foreign key (proid) references profession (pid);

desc profession;   #查看主键表的表结构
desc student;      #查看外键表的表结构
show create table student;   #可以查看表结构的详细信息

在这里插入图片描述

在这里插入图片描述

4.3 主从表中插入数据

#插入新的数据记录时,要先主表再从表
insert into student values (1,'王二',12,3);

#向主键表profession中添加数据内容
insert into profession values (1,'云计算');
insert into profession values (2,'大数据');
insert into profession values (3,'JAVA');
insert into profession values (4,'UI设计');

#向外键表student中添加数据内容
desc profession;
insert into student values (1,'王二',12,3);
insert into student values (2,'毛五',16,2);
insert into student values (3,'肖三',40,4);
insert into student values (3,'李六',30,1);

在这里插入图片描述
在这里插入图片描述

4.4 主从表中删除数据

#删数数据记录时,要先从表再主表,也就是说删除主键表的记录时必须先删除其他与之关联的表中的记录
select * from student;
select * from student;
delete from profession where pid=4;
update student set proid=2 where sname='肖三';
delete from profession where pid=4;
select * from profession;

在这里插入图片描述

4.5 删除外键约束

#查看和删除外键约束
show create table student;
alter table student drop foreign key FK_pro; #先删除外键约束
alter table student drop key FK_pro;
desc student;
show create table student;

在这里插入图片描述

5.数据库用户管理

5.1 新建用户

create user '用户名'@'来源地址' [identified by [password] '密码'];
  • ‘用户名’:指定将创建的用户名;
  • ‘来源地址’指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost允许任意主机登录可用通配符%
  • ‘密码’若使用明文密码,直接输入’密码’,插入到数据库时由Mysql自动加密
  • 若使用加密密码,需要先使用select password(‘密码’); 获取密文,再在语句中添加password ‘密文’;
  • 若省略’‘identified by’'部分,则用户的密码将为空(不建议使用).
create user 'user1'@'localhost' identified by '123';

select password('abc123');
create user 'user2'@'localhost' identified by password '*6691484EA6B50DDDE1926A220DA01FA9E575C18A';
create user 'user3'@'%' identified by '123';
select user();

在这里插入图片描述

5.2 查看用户信息

#创建后的用户保存在mysql数据库的user表里
use mysql;
select user,host, authentication_string from user;

#查看当前登录用户
select user();

#查看明文密码'123'的密文信息
select password('123');

#按照上面查找出来的密文密码信息,创建新用户clr,按照任意方式登录
create user 'clr'@'%' identified by password '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257';

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.3 重命名用户

rename user 'clr'@'%' to 'gzy'@'localhost';   #将clr用户重命名为gzy用户
select user,host, authentication_string from user;

在这里插入图片描述

5.4 删除用户

drop user 'user3'@'%';  #删除user3用户
select user,host, authentication_string from user;

在这里插入图片描述

5.5 修改当前登录用户密码

set password=password('123');   #修改当前登录用户的密码
select user,host, authentication_string from user;

在这里插入图片描述

5.6 修改其他用户密码

set password for 'gzy'@'localhost' = password('abc123');
select user,host, authentication_string from user;

在这里插入图片描述

5.7 忘记root密码的解决办法

(1)修改/etc/my.cnf 配置文件,不使用密码直接登录到mysql

vim /etc/my.cnf
[mysqld]
skip-grant-tables	#添加该命令行后,会直接跳过mysql数据库的认证授权登录
systemctl restart mysqld

mysql				#输入mysql后,可直接登录

在这里插入图片描述
在这里插入图片描述

(2)使用update修改root密码,刷新数据库

update mysql.user set authentication_string=password('111') where user='root' and host='localhost';

flush privileges;
quit
mysql -u root -p111    #使用更改后的root用户密码,即可登录系统

注意: 最后再把/etc/my.cnf配置文件里的skip-grant-tables删除,并重启mysql服务。

在这里插入图片描述

6. 数据库用户授权

6.1 all privilege包含的权限

授权用户权限是all privilege。这个all privilege都有哪些权限?all privilege权限如下:
insert(插入数据)
select (查询数据)update (更新表的数据)delete (删除表中数据)create (创建库,表)drop(删除库,表)refernces
index(建立索引)alter(更改表属性)create temp orary tableslock tables(锁表)
execute
create view (创建视图)show view (显示视图)
create routine(创建存储过程)alter routine(修改存储过程)event(事件)
trigger on(创建触发器)

6.2 授予权限

GRANT语句:专门用来设置数据库用户的访问权限。当指定的用户名不存在时,GRANT语句将会创建新的用户;当指定的用户名存在时, GRANT 语句用于修改用户信息。

GRANT 权限列表 ON 数据库名.表名 TO ‘用户名’@‘来源地址’ [IDENTIFIED BY ‘密码’];

#权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select,insert,update”。使用“all”表示所有权限,可授权执行任何操作。
#数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符“”。例如,使用“kgc.”表示授权操作的对象为 kgc数据库中的所有表。
#‘用户名@来源地址’:用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.kgc.com”、“192.168.80.%”等。
#IDENTIFIED BY:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略“IDENTIFIED BY”部分,则用户的密码将为空。

#允许用户gzy在本地查询gzy数据库中所有表的数据记录,但禁止查询其他数据库中的表的记录
grant select on gzy.* to 'gzy'@'localhost';

#授予clr用户从本地登录,对于所有数据库以及库中所有表的权限
grant all on *.* to 'clr'@'localhost' identified by '123';

#允许用户lisi在所有终端远程连接mysql,并拥有所有权限
grant select on *.* to 'lisi'@'%' identified by '123456';
flush privileges;
quit

在这里插入图片描述

mysql -ugzy -pabc123
use gzy;
show tables;
select * from profession;
insert into values (4,'C语言');
delete from profession where pid=3;

在这里插入图片描述

6.3 查看权限

#查看gzy用户具有哪些权限
show grants for 'gzy'@'localhost';

6.4 撤销权限

 revoke select on gzy.* from 'gzy'@'localhost';
show grants for 'gzy'@'localhost';

在这里插入图片描述

7. 知识点总结

外键约束
主键表: alter table 表名 add primary key (主键字段);
外键表: alter table 表名 add foreign key (外键字段) references 主键表 (主键字段);
     

注意: 插入新数据时,先在主键表插入数据再在外键表插入对应数据;删除数据时,先在外键表删除数据再在主键表删除对应数据.

找回root密码?
1)修改mysql配置文件/etc/my.cnf,在 [mysqld] 下面添加 skip-grant-tables
2)重启mysqld服务。使用 mysql 命令直接登录mysql
3)执行 update mysql.user set authentication_string=password(‘密码’) where user=‘root’ and host=‘localhost’;
4)还原配置文件,重启mysqld服务,使用 mysql -u 用户 -p[密码] -h 地址 -P 端口 来验证登录

权限管理
grant 权限1,权限2,....  on  库名.表名  to  '用户名'@'源地址'  [identified by '密码'];
      all [privileges]         *.*

show grants for '用户名'@'源地址';

revoke 权限1,权限2,....  on  库名.表名  from  '用户名'@'源地址';
       all

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

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

相关文章

conda环境中配置cuda+cudnn+pytorch深度学习环境

本文参考: 在conda虚拟环境中配置cudacudnnpytorch深度学习环境(新手必看!简单可行!)_conda安装cudnn_江江ahh的博客-CSDN博客 一、创建虚拟环境 conda create -n mytorch python3.8 二、执行sudo nvidia-smi查看CU…

物联网通信技术

通信的技术指标是什么?AB A. 可靠性 B. 有效性 C. 实时性D. 广覆盖 多路复用技术有哪些?ABCD A. FDMA B. CDMA C. SDMA D. TDMA 使用多个频率来传输信号的技术被称为扩展频谱技术,该技术使用的目的是什么? AB A. 抗干扰B. 提…

【VMware】VMware安装CentOS8-Stream虚拟机

本文首发于 慕雪的寒舍 VMware安装CentOS8-Stream虚拟机 1.安装VMware 由于最新版的vm要钱,这里提供一个VMware16pro的安装包;我知道度盘下载速度慢,但确实没啥其他选择,见谅。 后文将用vm来简称VMware 提取嘛: gdt9 亚索包解…

解决UGUI的图集导致Shader采样时UV错误的问题

大家好,我是阿赵。 在我们用UGUI的时候,很多时候需要通过在UI上面挂材质球,写Shader,来实现一些特殊的效果。 这里句一个很简单的例子,只为说明问题。 一、简单例子说明 这个例子是这样的,我想在某个Imag…

Python模块openpyxl 操作Excel文件

简介 openpyxl是一个用于读取和编写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。openpyxl以Python语言和MIT许可证发布。 openpyxl可以处理Excel文件中的绝大多数内容,包括图表、图像和公式。它可以处理大量数据,支持Pandas和NumPy库导入和导出数据。…

chatgpt赋能python:Python本地安装库:一个简单易懂的指南

Python本地安装库:一个简单易懂的指南 Python是一种高级的编程语言,它拥有庞大的社区支持和无数的第三方库。如果你在使用Python时需要一些额外的功能,那么你可能需要安装一些库。本文将介绍如何在本地安装库,以及一些需要注意的…

chatgpt赋能python:如何更新Python库?Python更新库完全指南

如何更新Python库?Python更新库完全指南 Python作为一种最受欢迎的编程语言,其库和工具的数量是惊人的。这些库是Python生态系统的重要组成部分,以便帮助开发人员解决不同类型的问题。然而,这些库会更新,开发人员需要…

什么是椭圆曲线上的加法

椭圆曲线图形示例 注意,椭圆曲线随着你参数的不同,有不同的形态,这里仅是一种示例,详细的关于椭圆曲线的知识可以后附扩展知识连接 椭圆曲线上的加法 椭圆曲线上的加法不是我们通常意义上的数值加法,而是一种特殊的几…

干翻Mybatis源码系列之第十篇:Mybatis Plugins基本概念

给自己的每日一句 不从恶人的计谋,不站罪人的道路,不坐亵慢人的座位,惟喜爱耶和华的律法,昼夜思想,这人便为有福!他要像一棵树栽在溪水旁,按时候结果子,叶子也不枯干。凡他所做的尽…

Oracle中的行列互转———pivot、unpivot函数用法

一、需求说明 项目开发过程中涉及到oracle数据库的数据操作;但是需要将数据进行列的互转,通过查阅资料可知在oracle中有三种方式可以实现行列互转: ①使用decode 函数; ②使用case when 函数; ③使用pivot函数&…

Linux之设置主机名

目录 Linux之设置主机名 查看主机名 语法格式 案例 修改主机名 语法格式 案例 --- 修改静态主机名为joker 配置静态解析 为Linux主机指派域名解析 Linux之设置主机名 查看主机名 语法格式 hostnamectl [status] [--static|--transient|--pretty] 解析: s…

极致呈现系列之:Echarts地图的浩瀚视野(一)

目录 Echarts中的地图组件地图组件初体验下载地图数据准备Echarts的基本结构导入地图数据并注册展示地图数据结合visualMap展示地图数据 Echarts中的地图组件 Echarts中的地图组件是一种用于展示地理数据的可视化组件。它可以显示全国、各省市和各城市的地图,并支持…

整形在内存中的存储-原码补码反码的理解与应用

目录 一、概论 1.1 C语言中基本的数据类型 1.2 类型的基本归类 二、整形在内存中的存储 2.1 原码、反码、补码 2.2 存储补码和大小端存储 三、计算各基本数据类型的范围计算原理 3.1 有符号类型的整形范围 3.2 无符号类型的整形范围 3.3 例题 一、概论 C语言提供了非常…

【Java基础学习打卡07】Java语言概述

目录 引言一、Java语言1.Java语言简介2.Java语言优势3.Java能做什么? 二、Java之父三、Java简史1.Java版本时间线2.Java发展重要节点 总结 引言 一、Java语言 1.Java语言简介 Java语言是一种以面向对象为基础的高级编程语言。吸收了C语言的各种优点,又…

【IMX6ULL驱动开发学习】06.APP与驱动程序传输数据+自动创建设备节点(hello驱动)

一、APP与驱动之间传输数据 /*驱动从APP获取数据*/ unsigned long copy_from_user(void *to, const void *from, unsigned long n)/*驱动传输数据到APP*/ unsigned long copy_to_user(void *to, const void *from, unsigned long n)二、使用copy_to_user、copy_from_user在AP…

32908字长文理解Large CV Model:Segment Anything

作者:猛码Memmat 目录 Abstract1. IntroductionTaskModelData engineDatasetResponsible AIExperimentsRelease 2. Segment Anything TaskTaskPre-trainingZero-shot transferRelated tasksDiscussion 3. Segment Anything ModelImage encoderPrompt encoderMask de…

十个实用MySQL函数

函数 0. 显示当前时间 命令:。 作用: 显示当前时间。 应用场景: 创建时间,修改时间等默认值。 例子: 1. 字符长度 命令:。 作用: 显示指定字符长度。 应用场景: 查看字符长度时。 例子: 2. 日期格式化 命令…

【群智能算法改进】一种改进的白鲸优化算法 改进白鲸优化算法 改进后的EBWO[1]算法【Matlab代码#40】

文章目录 【获取资源请见文章第5节:资源获取】1. 原始BWO算法2. 改进的白鲸优化算法EBWO2.1 Logistic映射2.2 透镜成像折射方向学习 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节:资源获取】 1. 原始BWO算法 白鲸优化算法 (BWO&…

LeetCode —— 206. 反转链表

LeetCode —— 206. 反转链表 一、题目描述: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head …

【Shiro】第二章 Shiro概述

目录 1、Shiro简介 2、核心组件 1、Shiro简介 【1】什么是Shiro? Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框…