首页 > 数据库 >【必知必会的MySQL知识】④DCL语言

【必知必会的MySQL知识】④DCL语言

时间:2023-05-04 21:12:16浏览次数:52  
标签:语句 DCL 必知 数据库 用户 授予 MySQL 权限 priv

转载:https://www.cnblogs.com/xiezhr/p/17343320.html

 

目录

 

一、概述

数据控制语言,用来定义访问权限和安全级别。主要包含包括grantrevoke 关键字

  • grant 授予权限
  • revoke 回收权限

二 、授权

2.1 语法格式

GRANT priv_type [(column_list)]  [, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user[IDENTIFIED BY [PASSWORD] 'password']] ...
[WITH with_option [with_option]...]

2.2 语法说明

参数参数说明
priv_type 参数表示权限类型
columns_list 参数表示权限作用于哪些列上,省略该参数时,表示作用于整个表
object_type 参数用于指定权限对象
priv_level 参数用于指定权限级别
user 参数表示用户账户;由用户名和主机名构成,格式是“'username'@'hostname'”
IDENTIFIED BY 参数用来为用户设置密码
password 参数是用户的新密码
WITH 一个或多个with_option 参数

with_option 参数一共5个选项

with_option参数参数说明
GRANT OPTION 被授权的用户可以将这些权限赋予给别的用户
MAX_QUERIES_PER_HOUR count 设置每个小时可以允许执行 count 次查询
MAX_UPDATES_PER_HOUR count 设置每个小时可以允许执行 count 次更新
MAX_CONNECTIONS_PER_HOUR count 设置每小时可以建立 count 个连接
MAX_USER_CONNECTIONS count 设置单个用户可以同时具有的 count 个连接

2.3 权限类型

权限类型分类

权限类型说明
数据库权限 和一个具体的数据库中的所有表相关。例如,可以在已有的数据库 mytest 中创建新表的权限
表权限 和一个具体表中的所有数据相关。例如,可以使用 SELECT 语句查询表 students 的所有数据的权限
列权限 和表中的一个具体列相关。例如,可以使用 UPDATE 语句更新表 students 中 name 列的值的权限
用户权限 和 MySQL 中所有的数据库相关。例如,可以删除已有的数据库或者创建一个新的数据库的权限

① 授予数据权限时,<权限类型>可以指定为以下值

权限名称对应user表中的字段说明
SELECT Select_priv 表示授予用户可以使用 SELECT 语句访问特定数据库中所有表和视图的权限。
INSERT Insert_priv 表示授予用户可以使用 INSERT 语句向特定数据库中所有表添加数据行的权限。
DELETE Delete_priv 表示授予用户可以使用 DELETE 语句删除特定数据库中所有表的数据行的权限。
UPDATE Update_priv 表示授予用户可以使用 UPDATE 语句更新特定数据库中所有数据表的值的权限。
REFERENCES References_priv 表示授予用户可以创建指向特定的数据库中的表外键的权限。
CREATE Create_priv 表示授权用户可以使用 CREATE TABLE 语句在特定数据库中创建新表的权限。
ALTER Alter_priv 表示授予用户可以使用 ALTER TABLE 语句修改特定数据库中所有数据表的权限。
SHOW VIEW Show_view_priv 表示授予用户可以查看特定数据库中已有视图的视图定义的权限。
CREATE ROUTINE Create_routine_priv 表示授予用户可以为特定的数据库创建存储过程和存储函数的权限。
ALTER ROUTINE Alter_routine_priv 表示授予用户可以更新和删除数据库中已有的存储过程和存储函数的权限。
INDEX Index_priv 表示授予用户可以在特定数据库中的所有数据表上定义和删除索引的权限。
DROP Drop_priv 表示授予用户可以删除特定数据库中所有表和视图的权限。
CREATE TEMPORARY TABLES Create_tmp_table_priv 表示授予用户可以在特定数据库中创建临时表的权限。
CREATE VIEW Create_view_priv 表示授予用户可以在特定数据库中创建新的视图的权限。
EXECUTE ROUTINE Execute_priv 表示授予用户可以调用特定数据库的存储过程和存储函数的权限。
LOCK TABLES Lock_tables_priv 表示授予用户可以锁定特定数据库的已有数据表的权限。
ALL 或 ALL PRIVILEGES 或 SUPER Super_priv 表示以上所有权限/超级权限

② 授予权限时,<权限类型>可以指定为以下值:

权限名称对应user表中的字段说明
SELECT Select_priv 授予用户可以使用 SELECT 语句进行访问特定表的权限
INSERT Insert_priv 授予用户可以使用 INSERT 语句向一个特定表中添加数据行的权限
DELETE Delete_priv 授予用户可以使用 DELETE 语句从一个特定表中删除数据行的权限
DROP Drop_priv 授予用户可以删除数据表的权限
UPDATE Update_priv 授予用户可以使用 UPDATE 语句更新特定数据表的权限
ALTER Alter_priv 授予用户可以使用 ALTER TABLE 语句修改数据表的权限
REFERENCES References_priv 授予用户可以创建一个外键来参照特定数据表的权限
CREATE Create_priv 授予用户可以使用特定的名字创建一个数据表的权限
INDEX Index_priv 授予用户可以在表上定义索引的权限
ALL 或 ALL PRIVILEGES 或 SUPER Super_priv 所有的权限名

③ 授予权限时,<权限类型>可以指定以下值

权限名称对应user表中的字段说明
SELECT Select_priv 授予用户可以使用 SELECT 语句进行访问特定表的权限
INSERT Insert_priv 授予用户可以使用 INSERT 语句向一个特定表中添加数据行的权限
UPDATE Update_priv 授予用户可以使用 UPDATE 语句更新特定数据表的权限

④授予用户权限时,<权限类型> 除了可以指定为授予数据库权限,还可以指定以下值

权限名称说明
CREATE USER 表示授予用户可以创建和删除新用户的权限
SHOW DATABASES 表示授予用户可以使用 SHOW DATABASES 语句查看所有已有的数据库的定义的权限

2.4 权限级别

权限级别说明
* 表示当前数据库中的所有表
*.* 表示所有数据库中的所有表
db_name.* 表示某个数据库中的所有表,db_name 指定数据库名
db_name.tbl_name 表示某个数据库中的某个表或视图,db_name 指定数据库名,tbl_name 指定表名或视图名
db_name.routine_name 表示某个数据库中的某个存储过程或函数,routine_name 指定存储过程名或函数名
TO 子句 如果权限被授予给一个不存在的用户,MySQL 会自动执行一条 CREATE USER 语句来创建这个用户,但同时必须为该用户设置密码

三、 回收权限

3.1 语法格式

REVOKE priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [, user]...

3.2 语法说明

参数参数说明
priv_type 参数表示权限的类型
column_list 参数表示权限作用于哪些列上,没有该参数时作用于整个表上
user 参数由用户名和主机名构成,格式为“username'@'hostname'”

3.3 注意事项

  • REVOKE 语法和 GRANT 语句的语法格式相似,但具有相反的效果。
  • 要使用 REVOKE 语句,必须拥有 MySQL 数据库的全局 CREATE USER 权限或 UPDATE 权限

四 、实践操作

① 运维童鞋想要查询所有用户的权限

select * FROM mysql.user;

 


②运维童鞋想要创建一个新的用户testXiezhr,密码为testXiezhr。并授予test用户所有的数据查询、插入权限

# 创建用户并授权
mysql> GRANT SELECT,INSERT ON *.*
    ->      TO 'testXiezhr'@'localhost'
    ->      IDENTIFIED BY 'testXiezhr'
    ->       WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.01 sec)
# 使用 SHOW GRANTS 语句查询用户 testXiezhr的权限
mysql> show grants for 'testXiezhr'@localhost;
+---------------------------------------------------------------------------+
| Grants for testXiezhr@localhost                                           |
+---------------------------------------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO 'testXiezhr'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------------+
1 row in set (0.00 sec)

③ 运维童鞋想要收回testXiezhr用户的插入权限

# 使用revoke关键字收回insert 权限
mysql> REVOKE INSERT ON *.* FROM 'testXiezhr'@'localhost';
Query OK, 0 rows affected (0.00 sec)
#使用 SHOW GRANTS 语句查询用户 testXiezhr的权限,我们发现insert 权限没有了
mysql> show grants for 'testXiezhr'@localhost;
+-------------------------------------------------------------------+
| Grants for testXiezhr@localhost                                   |
+-------------------------------------------------------------------+
| GRANT SELECT ON *.* TO 'testXiezhr'@'localhost' WITH GRANT OPTION |
+-------------------------------------------------------------------+
1 row in set (0.00 sec)

标签:语句,DCL,必知,数据库,用户,授予,MySQL,权限,priv
From: https://www.cnblogs.com/wangfx/p/17372508.html

相关文章

  • mysql
    mysql目录mysql数据库分类视图触发器事务存储过程函数数据库分类'''市面上有很多的数据库,但是,大致分类两大类'''1.关系型数据库 MySQL、Oracle、SqlServer、PostgreSQL、sqlite、MariaDB、db2、accessMySQL:开源免费的 Oracle:不开源,收费MariaDB:开源的2.非关系......
  • 【必知必会的MySQL知识】mysql5.7安装教程
    1.下载mysql下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads下载zip免安装版,可以省去很多事2.将下载的安装文件解压放到磁盘中3.在mysql解压缩包根目录下创建my.ini文件(mysql主配置文件)并创建data目录(用户初始化数据库文件目录)my.ini文件内容如下[mys......
  • Linux 安装MySql
    Linux安装MySql1.下载mysqlhttps://downloads.mysql.com/archives/community/下载之后使用文件传输工具传输到你的服务器上 2.安装mysql1.创建mysql文件夹mkdir/soft/mysql创建文件夹cd/soft/mysql进入 2.解压文件夹在该目录下再创建一个文件夹,并且将安装......
  • 【解决方案】MySQL死锁解决案例
    说明:该场景为商品库存操作更新MySQL时发生的数据库死锁,如果你没有做过库存系统经验,也可以把方案应用到(优惠券库存or活动库存or抽奖礼品库存等等),只要符合同时更新多条记录时均可。背景:库存系统组合品是由多个单品组合而成,更新数据库时先组装数据再批量更新多个sku。组合品关系......
  • rpm升级mysql小版本
    记录一下升级mysql小版本遇到坑的过程,由于数据量比较多,因此备份时最大的几个表没有备份(备份了数据文件.idb文件),但是有一个表没有备份到,导致后面浪费很久的时间恢复数据正确的升级命令如下:rpm-Uvhmysql-community-common-5.7.41-1.el7.x86_64.rpm rpm-Uvhmysql-community-li......
  • MySQL 8.0中InnoDB buffer pool size进度更透明
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:Yejinrong/叶金荣文章来源:GreatSQL社区原创MySQL8.0upupup~从MySQL5.7开始,支持在线动态调整innodbbufferpool,并为此新增了一个状态变......
  • MySQL(十八)MySQL事务(一):事务的概述与使用
    MySQL事务(一):事务的概述与使用1数据库事务概述​ 事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库始终保持一致性,同时我们还能通过事务的机制恢复到某个时间点,这样可以保证已提交到数据库的修改不会因为系统崩溃而丢失。1.1存储引擎支持情况​ show......
  • 5、MySQL的SQL语言、数据库管理、数据类型及DQL的单、多表查询
    进入mysql后,使用help列出的是客户端的命令,使用helpcontents列出服务端命令SQL语句分类(DDLDMLDQL要记住)前三个重要(DDL、DML、DQL、DCL、TCL)DDL:DataDefinationLanguage数据定义语言CREATE,DROP,ALTER(对数据库、表、视图、索引进行创建、删除和更改的工具ALTER改格式)......
  • MySQL事务
    前序原文链接1:https://cloud.tencent.com/developer/article/1899373MySQL有9种存储引擎,不同的引擎,适合不同的场景,常用引擎为InnoDB,它是MySQL的默认存储引擎。登录MySQL,执行showengines可以查询MySQL支持的存储引擎,如图示:1、InnoDB引擎(1)它事务型数据库的首选引擎,支持事务安全表(AC......
  • docker mysql 容器自动停止 -- docker update
    原因:mysql容器占用资源过高被系统杀死解决方法dockerupdate-m500M--memory-reservation500M--memory-swap1000M容器id/容器名说明-m限制内存最大值--memory-reservation是弹性控制内存大小,防止损失性能,建议要开。当宿主机资源充足时,允许容器尽量多地使......