MySQL GRANT用户授权的实现


Posted in MySQL onJune 18, 2021

授权就是为某个用户赋予某些权限。例如,可以为新建的用户赋予查询所有数据库和表的权限。MySQL 提供了 GRANT 语句来为用户设置权限。

在 MySQL 中,拥有 GRANT 权限的用户才可以执行 GRANT 语句,其语法格式如下:

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

其中:

  • priv_type 参数表示权限类型;
  • columns_list 参数表示权限作用于哪些列上,省略该参数时,表示作用于整个表;
  • database.table 用于指定权限的级别;
  • user 参数表示用户账户,由用户名和主机名构成,格式是“'username'@'hostname'”;
  • IDENTIFIED BY 参数用来为用户设置密码;
  • password 参数是用户的新密码。

WITH 关键字后面带有一个或多个 with_option 参数。这个参数有 5 个选项,详细介绍如下:

  • 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 个连接。

MySQL 中可以授予的权限有如下几组:

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

对应地,在 GRANT 语句中可用于指定权限级别的值有以下几类格式:

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

权限类型说明

下面讲解 GRANT 语句中的权限类型。

1)授予数据库权限时,<权限类型>可以指定为以下值:

 

权限名称 对应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 表示以上所有权限/超级权限

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

 

权限名称 对应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 所有的权限名

3) 授予列权限时,<权限类型>的值只能指定为 SELECT、INSERT 和 UPDATE,同时权限的后面需要加上列名列表 column-list。

4) 最有效率的权限是用户权限。
授予用户权限时,<权限类型>除了可以指定为授予数据库权限时的所有值之外,还可以是下面这些值:

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

例 1

使用 GRANT 语句创建一个新的用户 testUser,密码为 testPwd。用户 testUser 对所有的数据有查询、插入权限,并授予 GRANT 权限。SQL 语句和执行过程如下。

mysql> GRANT SELECT,INSERT ON *.*
    -> TO 'testUser'@'localhost'
    -> IDENTIFIED BY 'testPwd'
    -> WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.05 sec)

使用 SHOW GRANTS 语句查询用户 testUser 的权限,如下所示。

mysql> SHOW GRANTS FOR 'testUser'@'localhost';
+-------------------------------------------------------------------------+
| Grants for testUser@localhost                                           |
+-------------------------------------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO 'testUser'@'localhost' WITH GRANT OPTION |
+-------------------------------------------------------------------------+
1 row in set (0.00 sec)

结果显示,testUser 对所有数据库的所有表有查询、插入权限,并可以将这些权限赋予给别的用户。

拓展

数据库管理员给普通用户授权时一定要特别小心,如果授权不当,可能会给数据库带来致命的破坏。一旦发现给用户的权限太多,应该尽快使用 REVOKE 语句将权限收回。此处特别注意,最好不要授予普通用户 SUPER 权限,GRANT 权限。

到此这篇关于MySQL GRANT用户授权的实现的文章就介绍到这了,更多相关MySQL GRANT用户授权 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL 重命名表的操作方法及注意事项
May 21 MySQL
修改MySQL的数据库引擎为INNODB的方法
May 26 MySQL
正确使用MySQL update语句
May 26 MySQL
带你学习MySQL执行计划
May 31 MySQL
MySQL8.0无法启动3534的解决方法
Jun 03 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
MySQL 十大常用字符串函数详解
Jun 30 MySQL
Mysql中一千万条数据怎么快速查询
Dec 06 MySQL
实战 快速定位MySQL的慢SQL
Mar 22 MySQL
mysql insert 存在即不插入语法说明
Mar 25 MySQL
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
Apr 09 MySQL
MySQL创建管理HASH分区
Apr 13 MySQL
浅谈MySQL user权限表
Jun 18 #MySQL
解决mysql模糊查询索引失效问题的几种方法
Jun 18 #MySQL
MySQL 亿级数据导入导出及迁移笔记
如何使用分区处理MySQL的亿级数据优化
Jun 18 #MySQL
详解MySQL中的pid与socket
Jun 15 #MySQL
MySQL 如何设计统计数据表
Jun 15 #MySQL
浅谈MySQL 亿级数据分页的优化
You might like
php minixml详解
2008/07/19 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
php数组随机排序实现方法
2015/06/13 PHP
php实现JWT(json web token)鉴权实例详解
2019/11/05 PHP
JavaScript 语言的递归编程
2010/05/18 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
Window.Open如何在同一个标签页打开
2014/06/20 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
2017/12/05 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
在Vue中使用antv的示例代码
2020/06/29 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
python实现问号表达式(?)的方法
2013/11/27 Python
Python中scatter函数参数及用法详解
2017/11/08 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
css3实例教程 一款纯css3实现的发光屏幕旋转特效
2014/12/07 HTML / CSS
IRO美国官网:法国服装品牌
2018/03/06 全球购物
2013年研究生毕业感言
2014/02/06 职场文书
大学生创业项目方案
2014/03/08 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
民事起诉书范本
2015/05/19 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
Django + Taro 前后端分离项目实现企业微信登录功能
2022/04/07 Python