如何为用户添加全部SHOW权限?权限授予语句报错求助
解决MySQL授权时的SHOW权限语法错误问题
首先,你碰到的语法错误根源是MySQL中不存在名为SHOW的权限类型,不能直接在GRANT语句里写SHOW。不同的SHOW操作对应不同的具体权限,我们需要把你需要的"全部SHOW权限"拆解成对应的合法权限,再结合你要的其他权限来生成正确的授权语句。
拆解你需要的权限对应关系
- SELECT, INSERT, UPDATE, DELETE:这些是标准的表级权限,直接写没问题。
- 全部SHOW相关权限:
- 查看AGD数据库内的表列表、表结构、索引等(
SHOW TABLES,SHOW COLUMNS,SHOW INDEX等):只要拥有AGD数据库的SELECT权限就自动具备这些能力。 - 查看所有数据库列表(
SHOW DATABASES):需要全局级的SHOW DATABASES权限。 - 查看存储过程/函数(
SHOW PROCEDURE STATUS,SHOW FUNCTION STATUS):需要数据库级的SHOW ROUTINE权限。 - 查看服务器进程列表(
SHOW PROCESSLIST):需要全局级的PROCESS权限。
- 查看AGD数据库内的表列表、表结构、索引等(
- 全部CREATE权限:针对AGD数据库的
CREATE权限已经涵盖了CREATE TABLE,CREATE VIEW,CREATE PROCEDURE,CREATE FUNCTION等数据库内的创建操作;如果需要创建新数据库,则需要全局级的CREATE权限。
针对你的需求的正确授权语句
根据你的描述,假设你需要的是针对AGD数据库的所有SHOW相关操作(含查看库内表、结构等),以及库内的全部创建权限,同时加上必要的全局权限(比如查看所有数据库列表),可以用以下语句:
1. 创建用户(和你原来的语句一致)
CREATE USER 'operator'@'localhost' IDENTIFIED BY '7gx8vq95wqgu3qcp';
2. 授权核心权限(针对AGD数据库)
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, SHOW ROUTINE ON AGD.* TO 'operator'@'localhost';
3. (可选)添加全局级的SHOW相关权限
如果你需要让该用户能查看所有数据库列表或服务器进程,再执行:
GRANT SHOW DATABASES, PROCESS ON *.* TO 'operator'@'localhost';
4. 刷新权限使变更生效
最后别忘了执行刷新权限的语句:
FLUSH PRIVILEGES;
验证权限是否生效
你可以切换到operator用户,执行对应的SHOW操作来验证:
-- 切换用户 mysql -u operator -p -- 查看AGD数据库的表 SHOW TABLES FROM AGD; -- 查看表结构 SHOW COLUMNS FROM AGD.your_table_name; -- 如果授权了SHOW DATABASES,查看所有数据库 SHOW DATABASES;
内容的提问来源于stack exchange,提问作者Maniakkostek
相关产品推荐
相关产品推荐

