mysql 如何查看该数据库用户具有哪些权限?

结论:用SELECT FROM Db查询Db表,看用户权限。
大白话:在数据库里查Db表,就能看到用户权限。

结论:用showgrantsfor查询权限。
大白话:用showgrantsfor命令查权限。

结论:GRANT命令给用户权限。
大白话:GRANT命令用来给用户设置权限。

结论:建本地只能查看不能操作的discuz用户。
大白话:创建一个只能在本机查看不能操作的discuz用户。

结论:GRANT命令格式是GRANT privileges ON what -> TO user [IDENTIFIED BY "password"] -> [WITH GRANT OPTION]。
大白话:给用户权限的命令格式是GRANT 权限 ON 数据库 -> TO 用户 [密码] -> [允许授权]。

mysql如何查看当前用户权限

嘿,咱们聊聊MySQL里查看用户权限这点事儿。
这事儿其实对我来说挺熟的,因为在混迹问答论坛这么多年,不少人都问过我类似的。
先说一个场景吧,我记得有一次,有个新手朋友就问我,怎么查看他自己的权限呢?我就跟他说,很简单,直接执行个命令就行了。

首先,要是你想知道当前登录用户的权限,直接执行 SHOW GRANTS; 命令就OK了。
这命令不用加参数,它会把当前用户所有权限都给你列出来,包括全局权限和数据库/表级别的权限。
比如,我给你看个例子:
GRANT USAGE ON . TO 'username'@'localhost'; GRANT SELECT, INSERT ON testdb. TO 'username'@'localhost';
你看,第一行显示用户username在所有数据库上只有连接权限,第二行则显示他在testdb数据库上拥有SELECT和INSERT权限。

有意思的是,要查看指定用户的权限,你需要有管理权限。
这时候,你就要用 SHOW GRANTS FOR '用户名'@'主机名'; 这样的命令。
比如说,你想查看root用户在localhost的权限,就写成这样:
SHOW GRANTS FOR 'root'@'localhost';
需要注意的是,这里的主机名得和mysql.user表中定义的一致,比如localhost、%或者具体IP。

再来说说从mysql.user表查询全局权限。
这个方法可以直接获取用户的基本全局权限,比如Select_priv、Insert_priv等,但就是看不到数据库或表级别的细粒度权限。
查询语句大概是这样的:
SELECT User, Host, Select_priv, Insert_priv, Grant_priv FROM mysql.user WHERE User = '用户名';
这里的字段解释一下,Select_priv是全局SELECT权限,Y表示有,N表示没有。
Insert_priv是全局INSERT权限,Grant_priv则是看用户是否具备权限授予的能力。

最后,我得提醒一下,用SHOW GRANTS查看自身权限不需要额外权限,但要是想查看其他用户权限,你得有管理权限,比如SELECT on mysql.。

权限改了之后,建议执行 FLUSH PRIVILEGES; 命令,这样更改才能立即生效。
一般来说,通过GRANT或REVOKE修改权限时,这个命令通常是不需要的。

总结一下,查看MySQL用户权限有几个常用的方法:
当前用户权限:直接执行 SHOW GRANTS;
指定用户权限:使用 SHOW GRANTS FOR '用户名'@'主机名';(需权限)
全局权限分析:查询mysql.user表(仅限全局权限,无细粒度信息)
权限管理:修改权限后执行 FLUSH PRIVILEGES; 确保生效。

这些都是挺实用的,可以根据你的实际需求来选择。