铁猴 发表于 2023-5-4 00:44:36

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

目录

[*]一、概述
[*]二 、授权

[*]2.1 语法格式
[*]2.2 语法说明
[*]2.3权限类型
[*]2.4 权限级别

[*]三、 回收权限

[*]3.1 语法格式
[*]3.2 语法说明
[*]3.3 注意事项

[*]四 、实践操作

一、概述

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

[*]grant   授予权限
[*]revoke 回收权限
二 、授权

2.1 语法格式

GRANT priv_type [(column_list)][, priv_type [(column_list)]] ...
ON priv_level
TO user 'password']
[, user 'password']] ...
...]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 语句访问特定数据库中所有表和视图的权限。INSERTInsert_priv表示授予用户可以使用 INSERT 语句向特定数据库中所有表添加数据行的权限。DELETEDelete_priv表示授予用户可以使用 DELETE 语句删除特定数据库中所有表的数据行的权限。UPDATEUpdate_priv表示授予用户可以使用 UPDATE 语句更新特定数据库中所有数据表的值的权限。REFERENCES References_priv表示授予用户可以创建指向特定的数据库中的表外键的权限。CREATE   Create_priv表示授权用户可以使用 CREATE TABLE 语句在特定数据库中创建新表的权限。ALTERAlter_priv表示授予用户可以使用 ALTER TABLE 语句修改特定数据库中所有数据表的权限。SHOW VIEWShow_view_priv表示授予用户可以查看特定数据库中已有视图的视图定义的权限。 CREATE ROUTINECreate_routine_priv表示授予用户可以为特定的数据库创建存储过程和存储函数的权限。ALTER ROUTINE Alter_routine_priv表示授予用户可以更新和删除数据库中已有的存储过程和存储函数的权限。INDEX Index_priv表示授予用户可以在特定数据库中的所有数据表上定义和删除索引的权限。DROPDrop_priv表示授予用户可以删除特定数据库中所有表和视图的权限。CREATE TEMPORARY TABLESCreate_tmp_table_priv表示授予用户可以在特定数据库中创建临时表的权限。CREATE VIEWCreate_view_priv表示授予用户可以在特定数据库中创建新的视图的权限。EXECUTE ROUTINEExecute_priv表示授予用户可以调用特定数据库的存储过程和存储函数的权限。 LOCK TABLESLock_tables_priv表示授予用户可以锁定特定数据库的已有数据表的权限。ALL 或 ALL PRIVILEGES 或 SUPERSuper_priv表示以上所有权限/超级权限② 授予表权限时,可以指定为以下值:
权限名称对应user表中的字段说明SELECTSelect_priv授予用户可以使用 SELECT 语句进行访问特定表的权限INSERTInsert_priv授予用户可以使用 INSERT 语句向一个特定表中添加数据行的权限DELETEDelete_priv授予用户可以使用 DELETE 语句从一个特定表中删除数据行的权限DROPDrop_priv授予用户可以删除数据表的权限UPDATEUpdate_priv授予用户可以使用 UPDATE 语句更新特定数据表的权限ALTERAlter_priv授予用户可以使用 ALTER TABLE 语句修改数据表的权限REFERENCESReferences_priv授予用户可以创建一个外键来参照特定数据表的权限CREATECreate_priv授予用户可以使用特定的名字创建一个数据表的权限INDEX Index_priv授予用户可以在表上定义索引的权限ALL 或 ALL PRIVILEGES 或 SUPER Super_priv所有的权限名③ 授予列权限时,可以指定以下值
权限名称对应user表中的字段说明SELECTSelect_priv授予用户可以使用 SELECT 语句进行访问特定表的权限INSERTInsert_priv授予用户可以使用 INSERT 语句向一个特定表中添加数据行的权限UPDATEUpdate_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 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)
来源:https://www.cnblogs.com/xiezhr/p/17343320.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 【必知必会的MySQL知识】④DCL语言