当前位置: 首页 > news >正文

如何给 MySQL 表和列授予权限?(官方版)

目录

授予表级别权限

授予列级别权限


如何给MySQL表和列授予权限是MySQL数据操作中非常重要的步骤,也是企业级使用MySQL数据库的起步点,以下分别参照官方教程整理的MySQL数据库的权限操作。

以下的语句可以直接使用MySQL的命令行进行操作(如何连接命令行不在此处说明),也可以使用SQL开发工具如MySQL Workbench或SQLynx等完成。

授予表级别权限


您可以通过执行以下操作在 MySQL 中创建具有表级权限的用户:

1. 使用 Create_user_priv 和 Grant_priv 以用户身份连接到 MySQL。通过运行以下查询确定哪些用户具有这些权限。您的用户已经需要 MySQL.user 上的 SELECT 权限才能运行查询。

SELECT UserHostSuper_priv, Create_user_priv, Grant_priv from mysql.user WHERE Create_user_priv = 'Y' AND Grant_Priv = 'Y';

2. 运行以下查询来为受限用户生成 GRANT 语句。将“mydatabase”、“myuser”和“myhost”替换为您的数据库的特定信息。

请注意,myuser 和 mypassword 周围的引号是两个单引号,而不是双引号。myhost 和 TABLE_NAME 周围的字符是反引号(该键位于键盘上的 Esc 键下方)。

SELECT CONCAT('GRANT SELECT, SHOW VIEW ON mydatabase.`', TABLE_NAME, '` to ''myuser''@`myhost`;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'mydatabase';

例如,如果您想使用 chartio_connect 客户端将用户“chartio_read_only”连接到您的“报告”数据库,您可以运行以下命令:

SELECT CONCAT('GRANT SELECT, SHOW VIEW ON Reports.`', TABLE_NAME, '` to ''chartio_read_only''@`localhost`;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'Reports';

如果您想使用来自 Chartio 服务器的直接连接将用户“chartio_direct_connect”连接到您的“Analytics”数据库,您可以运行以下命令:

SELECT CONCAT('GRANT SELECT, SHOW VIEW ON Analytics.`', TABLE_NAME, '` to ''chartio_direct_connect''@`52.6.1.1`;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'Analytics';

3. 查询结果应类似以下内容:

GRANT SELECTSHOW VIEW ON mydatabase.`Activity` to 'myuser'@`myhost`;
GRANT SELECTSHOW VIEW ON mydatabase.`Marketing` to 'myuser'@`myhost`;
GRANT SELECTSHOW VIEW ON mydatabase.`Operations` to 'myuser'@`myhost`;
GRANT SELECTSHOW VIEW ON mydatabase.`Payments` to 'myuser'@`myhost`;
GRANT SELECTSHOW VIEW ON mydatabase.`Plans` to 'myuser'@`myhost`;
GRANT SELECTSHOW VIEW ON mydatabase.`Services` to 'myuser'@`myhost`;
GRANT SELECTSHOW VIEW ON mydatabase.`Subscriptions` to 'myuser'@`myhost`;
GRANT SELECTSHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`;
GRANT SELECTSHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;

4. 仅选择您想要授予访问权限的表的语句并运行这些查询。例如,如果我们只想授予对用户和访问者表的访问权限,我们将运行:

GRANT SELECTSHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`;
GRANT SELECTSHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;

5. 为用户提供一个安全的密码。

SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');

或者

SET PASSWORD FOR 'chartio_direct_connect'@`52.6.1.1` = PASSWORD('top$secret');

现在您可以安全地使用此用户访问您的数据库,并确保它只对指定的表具有权限。

授予列级别权限


授予特定表的列级权限的过程与授予表级权限的过程非常相似。

1. 使用以下查询生成列级权限的 GRANT 语句:

SELECTCONCAT('GRANT SELECT (`', COLUMN_NAME, '`), SHOW VIEW ON mydatabase.`', TABLE_NAME, '` to ''myuser''@`myhost`;')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'mydatabase' AND TABLE_NAME = 'mytable';

例如,如果您想使用 chartio_connect 客户端将用户“chartio_read_only”连接到“Reports”数据库的“Users”表中的特定列,则可以运行以下命令:

SELECTCONCAT('GRANT SELECT (`', COLUMN_NAME, '`), SHOW VIEW ON Reports.`', TABLE_NAME, '` to ''chartio_read_only''@`localhost`;')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'Reports' AND TABLE_NAME = 'Users';

2. 查询结果应类似于以下内容:

GRANT SELECT (`User_ID`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
GRANT SELECT (`Campaign_ID`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
GRANT SELECT (`Created_Date`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
GRANT SELECT (`Company`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
GRANT SELECT (`City`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
GRANT SELECT (`State`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
GRANT SELECT (`Zip`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
GRANT SELECT (`Phone_Number`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
GRANT SELECT (`Credit_Card`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;

3. 仅选择您想要授予访问权限的列的语句并运行这些查询。例如,如果我们只想授予对“User_ID”和“Company”列的访问权限,我们将运行:

GRANT SELECT (`User_ID`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
GRANT SELECT (`Company`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;

4. 为用户提供一个安全的密码。

SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');

欲了解更多信息,请咨询 MySQL 文档。

相关文章:

  • HBuilderX编写APP一、获取token
  • Polar Web【简单】upload1
  • 【Meetup】探索Apache SeaTunnel的二次开发与实战案例
  • 数据结构初阶 堆(一)
  • PostgreSQL的视图pg_class
  • 【STM32】STM32F103C6T6标准外设库
  • 【傅里叶变换】 关于 Matlab ifft(Y,n) 在C#中实现遇到的问题
  • YOLOv8---seg实例分割(制作数据集,训练模型,预测结果)
  • C++中的lambda表达式详解
  • 前端 JS 经典:下载的流式传输
  • 具有 MOSFET 的电压到电流 (V-I) 转换器电路
  • 企业费用标准如何制定?
  • Python文本处理利器:jieba库全解析
  • CTF简单介绍
  • qmt量化交易策略小白学习笔记第18期【qmt编程之获取对应周期的北向南向数据--方式2:原生python】
  • Iterator 和 for...of 循环
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • leetcode98. Validate Binary Search Tree
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • PAT A1017 优先队列
  • spring + angular 实现导出excel
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 复杂数据处理
  • 聚簇索引和非聚簇索引
  • 如何利用MongoDB打造TOP榜小程序
  • 深度学习中的信息论知识详解
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 新版博客前端前瞻
  • 一道面试题引发的“血案”
  • 用简单代码看卷积组块发展
  • 7行Python代码的人脸识别
  • (1)(1.13) SiK无线电高级配置(五)
  • (12)Hive调优——count distinct去重优化
  • (MATLAB)第五章-矩阵运算
  • (NSDate) 时间 (time )比较
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net 7 上传文件踩坑
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .net连接oracle数据库
  • .NET中winform传递参数至Url并获得返回值或文件
  • ::什么意思
  • @angular/cli项目构建--http(2)
  • @在php中起什么作用?
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [Angular 基础] - 表单:响应式表单
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [Docker]四.Docker部署nodejs项目,部署Mysql,部署Redis,部署Mongodb
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档
  • [Google Guava] 1.1-使用和避免null
  • [HeMIM]Cl,[AeMIM]Br,[CeEIM]Cl,([HO-PECH-MIM]Cl,[HOOC-PECH-MIM]Cl改性酚醛树脂