error 1141(4200):There is no such grant defined for user ‘xxx‘ on host‘xxx‘问题处理

该问题通常有以下两种情况:

情况一:mysql.user表中没有该user和host组合

1、登录root账号查看user表
在这里插入图片描述

情况二:初步授权过大,无法revoke修改数据库权限

在处理用户授权问题时,假定数据库名为cs18,我们首先使用如下命令赋予用户对整个数据库的全部权限:

GRANT ALL PRIVILEGES ON cs18.* TO 'user'@'host';

这意味着用户’user’可以从指定的主机’host’访问数据库cs18下的所有表和视图。

然而,在完成全局授权之后,若需撤消该用户对数据库内特定表(比如表b)的权限,执行如下REVOKE语句:

REVOKE ALL PRIVILEGES ON cs18.b FROM 'username'@'host';

执行该撤销操作时遇到错误提示:“error 1141(4200): There is no such grant defined for user ‘xxx’ on host ‘xxx’”,

原因在于:在MySQL中,为了正确撤销指定表的权限,必须首先确保该用户对该数据库至少具备一定的权限。这是因为MySQL遵循“先授予权限,后撤销特定权限”的逻辑。只有在用户已获得数据库表的某一层次权限后,才能对其进一步精细化管理,包括撤销特定表的权限。

针对表数量众多的情况,手动逐个操作显然效率低下。为此,可以考虑采用自动化脚本来批量进行权限管理。

#!/bin/bash

# 脚本配置
USER='yw4'
HOST='%'
DATABASE='cs18'
ROOT_USER='root'
ROOT_PASSWORD='Infra5@Gep0int'

# 构建查询语句,获取表名
query="SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '$DATABASE'"

# 执行查询并将结果存储在数组中
readarray -t TABLES < <(mysql -u"$ROOT_USER" -p"$ROOT_PASSWORD" -Bse "$query")

# 遍历数组中的表名并赋予权限
for TABLE in "${TABLES[@]}"; do
    echo "为 $DATABASE.$TABLE 上的 $USER@$HOST 授予权限中..."
    mysql -u"$ROOT_USER" -p"$ROOT_PASSWORD" -e "GRANT ALL PRIVILEGES ON $DATABASE.$TABLE TO '$USER'@'$HOST';"
done

echo "权限授予成功"
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值