mysql error:1449权限问题 及 用户授权

一、权限问题

Got error: 1449: The user specified as a definer ('skip-grants user'@'skip-grants host') does not exist when using LOCK TABLES

在迁移数据库时,定义的definer,在两个数据库之间不同步时,要将不存在的definer改成数据库中已有的用户。

1、修改存储过程

sql 复制代码
UPDATE `mysql`.`proc` SET definer = 'root@%' WHERE definer='skip-grants user'@'skip-grants host'

2、修改视图

本来尝试和修改存储过程类似的方式,但是总是被拒绝访问,所以找了别的方法。

先生成修改的sql语句:

sql 复制代码
SELECT CONCAT("ALTER DEFINER=`你要改的definer` VIEW ", 
table_schema,".",table_name, " AS ", view_definition, ";") 
FROM information_schema.views ;

其中:table_schema=数据库;table_name=表名;

如果只要修改指定的数据库或者指定的definer,在上面的SQL后拼个条件:WHERE table_schema='database' or definer = 'older_definer' 即可;

执行完上面的sql后,会产生一些alter语句:

将这些语句成功执行后,definer就被修改了。

二、用户授权

最大权限

sql 复制代码
-- 授权
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码';
-- 刷新
FLUSH PRIVILEGES;

部分权限:

sql 复制代码
-- 创建用户
CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';
 
-- 授权用户操作数据库的权限
GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.table_name TO 'username'@'hostname';
 
-- 刷新权限,使授权生效
FLUSH PRIVILEGES;

三、完结啦

相关推荐
折哥的程序人生 · 物流技术专研24 分钟前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
AOwhisky27 分钟前
Redis 学习笔记(第三期):持久化与主从复制
运维·数据库·redis·笔记·学习·云计算
李白的天不白28 分钟前
数据库连接报错问题
数据库
一条泥憨鱼39 分钟前
【Redis】数据类型和常用命令
java·数据库·redis·后端·缓存
爱喝水的鱼丶1 小时前
SAP-ABAP:SAP视图开发入门:四类标准视图的适用场景与创建步骤详解
服务器·数据库·性能优化·sap·abap
大白要努力!2 小时前
MySQL 8.0 + Navicat 完整操作指南
数据库·mysql
云絮.3 小时前
数据库操作
数据库·mysql·算法·oracle
小小工匠3 小时前
Redis 缓存替换策略:8 种淘汰策略与 LRU 实现剖析
数据库·redis·缓存
设计师小聂!4 小时前
宝塔 Linux 面板保姆级教程
linux·mysql·开源·运维开发