Mysql 字段权限 禁止修改数据表的某一字段
发表于|更新于|数据库
通过mysql 管理账号 设置表单个字段权限, 限制表记录被修改的问题.
针对test账号 db1库下面的t1表的 id,name, age 字段授予select, insert权限;
授权格式 select(要授权的字段,要授权的字段) 用户括号 括起来、insert()
mysql> grant select(id,name,age),insert(id,name,age) on db1.t1 to 'test'@'localhost'; |
授权记录查询
select * from mysql.columns_priv; |
该表也是不要拥有delete 权限 , 小心被绕开. 对比上篇文章 Mysql 触发器 禁止修改数据表的某一字段 的方案要简单一些. 诶没有DBA 啥都要自己想
文章作者: Leon
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Leon!
相关推荐
2026-06-06
行式、列式、向量数据库怎么选?一篇写给工程师的选型指南
面向有经验的后端/数据/平台工程师。本文不堆术语,只讲清楚三类数据库各自擅长什么、在什么场景下会踩坑,以及真实业务里怎么组合使用。原理部分点到为止,深入链接放在文末。 数据库选型这件事,八成的争论其实源于一个误会:把”存储模型”当成了”产品好坏”来比。行式、列式、向量,本质是三种不同的数据组织方式,各自为一类访问模式做了极致优化。选错的代价不是”慢一点”,而是整个架构跑偏。 下面按”它怎么存 → 适合什么 → 什么时候别用 → 真实案例”的结构,逐个拆开。 一、行式数据库:为”一次操作一条记录”而生它怎么存行式数据库把一整条记录的所有字段连续存放在磁盘上: Block 1: [1, 张三, 25, 北京] [2, 李四, 30, 上海]Block 2: [3, 王五, 28, 广州] [4, 赵六, 35, 深圳] 读一条完整记录,一次磁盘 IO 就能拿全所有字段。 📊 建议配图:行式存储 vs 列式存储的磁盘布局对比图(可搜索 “row vs columnar storage layout”) 适合什么场景行式数据库的统治区是 OLTP(在...

2024-11-21
MySQL用错编码怎么救
备份,不然崩了就只有删库跑路了; 升级MySQL服务端到5.3.3及以上版本,以支持utf8md4; 将数据库、表、列的字符编码、collation改为utf8md4: # For each database:ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;# For each table:ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;# For each column:ALTER TABLE table_name CHANGE column_name column_name VARCHAR(length) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 检查列和索引键的最大长度; 修改连接、客户端、服务端的字符集; 修复和优化所有的表,以免出现一些莫名其妙的错误,可以使用如下的方式...
2023-05-10
[踩坑] Mysql Order by 使用 有索引的单一字段 , 其他的索引失效
记录一下 今天遇到个问题. 查了查网上的说法 . 先描述问题 表结构CREATE TABLE `table` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `uid` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT 'UID', `type` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '1 2', `t_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT 'UID', `create_time` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '毫秒时间戳', PRIMARY KEY (`id`), KEY `idx_utc` ...

2021-10-16
MySQL — InnoDB 缓冲池 Buffer Pool
缓冲池 通过前面几篇文章,我们已经了解到 InnoDB 存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。但由于CPU速度与磁盘速度之间的鸿沟,通常都会将数据加载到内存中来操作数据,以此提高数据库的整体性能。InnoDB 设计了一个缓冲池(Buffer Pool),当需要访问某个页时,就会把这一页的数据全部加载到缓冲池中,这样就可以在内存中进行读写访问了。对于数据库中页的修改操作,也是先修改在缓冲池中的页,然后再以一定的频率刷新到磁盘上。有了缓冲池,就可以省去很多磁盘IO的开销了,从而提升数据库性能。 注意即使只访问页中的一条记录,也需要把整个页的数据加载到内存中。前面有说过,通过索引只能定位到磁盘中的页,而不能定位到页中的一条记录。将页加载到内存后,就可以通过页目录(Page Directory)去定位到某条具体的记录。 Buffer Pool 结构 MySQL服务器启动的时候就会向操作系统申请一片连续的内存,即 Buffer Pool。默认配置下 Buffer Pool 只有128MB 大小,我们可以调整 innodb_buffer_pool_size 参数来...
2022-12-13
关于MySql中explain结果filtered的理解
MySql explain语句的返回结果中,filtered字段要怎么理解? MySql5.7官方文档中描述如下: The filtered column indicates an estimated percentage of table rows filtered by the table condition. The maximumvalue is 100, which means no filtering of rows occurred. Values decreasing from 100 indicate increasing amounts of filtering. rows shows the estimated number of rows examined and rows × filtered shows the number of rows joined with the following table. For example, if rows is 1000 and filtered is 50.00 (50%), the number of...
2022-07-17
在MySQL中阻止UPDATE, DELETE 语句的执行,在没有添加WHERE条件
如果在生产环境中使用UPDATE,DELETE语句操作数据,此时如果忘记携带本应该添加的WHERE条件,后果可能不堪设想。在正常的业务情况,也不会更新或者删除所有的记录 1. 阻止update设置(sql_safe_updates)sql_safe_updates这个MySQL自带的参数就可以完美的解决我们的问题,并且该参数是可以在线变更的哦~当该参数开启的情况下,你必须要在UPDATE语句后携带WHERE条件,否则就会报出ERROR。。 sql_safe_updates=0,即未开启 $ set sql_safe_updates=0;Query OK, 0 rows affected (0.00 sec) $ show variables like 'sql_safe_updates'Variable_name Valuesql_safe_updates OFF 如上属的例子所示,当参数sql_safe_updates开启的时候,UPDATE语句不携带WHERE条件将会爆出一个错误。 2. 阻止delete设置直接限制m...
评论
公告
记录技术实践,分享学习与思考。



