一、权限问题
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;