MySQL(81)如何使用GRANT和REVOKE命令?

146 阅读4分钟

在 MySQL 中,GRANTREVOKE 命令用于管理用户权限。通过使用这些命令,你可以精确控制用户对数据库、表和其他数据库对象的访问权限。以下是如何使用 GRANTREVOKE 命令的详细说明和代码示例。

1. 使用 GRANT 命令授予权限

GRANT 命令用于授予用户权限。权限可以是全局权限、数据库级别权限、表级别权限、列级别权限或其他特定权限。

1.1 授予全局权限

全局权限适用于所有数据库中的所有表。

GRANT ALL PRIVILEGES ON *.* TO 'username'@'hostname';
示例: 授予 newuser 用户全局权限
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';

1.2 授予数据库级别权限

数据库级别权限适用于特定数据库中的所有表。

GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'hostname';
示例: 授予 newuser 用户对 mydatabase 数据库的所有权限
GRANT ALL PRIVILEGES ON mydatabase.* TO 'newuser'@'localhost';

1.3 授予表级别权限

表级别权限适用于特定数据库中的特定表。

GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.table_name TO 'username'@'hostname';
示例: 授予 newuser 用户对 mydatabase 数据库中 mytable 表的 SELECT 和 INSERT 权限
GRANT SELECT, INSERT ON mydatabase.mytable TO 'newuser'@'localhost';

1.4 授予列级别权限

列级别权限适用于特定表中的特定列。

GRANT SELECT (column1, column2) ON database_name.table_name TO 'username'@'hostname';
示例: 授予 newuser 用户对 mydatabase 数据库中 mytable 表的 column1column2 列的 SELECT 权限
GRANT SELECT (column1, column2) ON mydatabase.mytable TO 'newuser'@'localhost';

1.5 授予特定权限

可以授予特定的权限,如创建、删除、执行等。

GRANT CREATE, DROP, EXECUTE ON database_name.* TO 'username'@'hostname';
示例: 授予 newuser 用户在 mydatabase 数据库上的创建、删除和执行权限
GRANT CREATE, DROP, EXECUTE ON mydatabase.* TO 'newuser'@'localhost';

2. 使用 REVOKE 命令撤销权限

REVOKE 命令用于撤销用户权限。可以撤销全局权限、数据库级别权限、表级别权限、列级别权限或其他特定权限。

2.1 撤销全局权限

全局权限适用于所有数据库中的所有表。

REVOKE ALL PRIVILEGES ON *.* FROM 'username'@'hostname';
示例: 撤销 newuser 用户的全局权限
REVOKE ALL PRIVILEGES ON *.* FROM 'newuser'@'localhost';

2.2 撤销数据库级别权限

数据库级别权限适用于特定数据库中的所有表。

REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'hostname';
示例: 撤销 newuser 用户对 mydatabase 数据库的所有权限
REVOKE ALL PRIVILEGES ON mydatabase.* FROM 'newuser'@'localhost';

2.3 撤销表级别权限

表级别权限适用于特定数据库中的特定表。

REVOKE SELECT, INSERT, UPDATE, DELETE ON database_name.table_name FROM 'username'@'hostname';
示例: 撤销 newuser 用户对 mydatabase 数据库中 mytable 表的 INSERT 权限
REVOKE INSERT ON mydatabase.mytable FROM 'newuser'@'localhost';

2.4 撤销列级别权限

列级别权限适用于特定表中的特定列。

REVOKE SELECT (column1, column2) ON database_name.table_name FROM 'username'@'hostname';
示例: 撤销 newuser 用户对 mydatabase 数据库中 mytable 表的 column1column2 列的 SELECT 权限
REVOKE SELECT (column1, column2) ON mydatabase.mytable FROM 'newuser'@'localhost';

2.5 撤销特定权限

可以撤销特定的权限,如创建、删除、执行等。

REVOKE CREATE, DROP, EXECUTE ON database_name.* FROM 'username'@'hostname';
示例: 撤销 newuser 用户在 mydatabase 数据库上的创建、删除和执行权限
REVOKE CREATE, DROP, EXECUTE ON mydatabase.* FROM 'newuser'@'localhost';

3. 刷新权限

在某些情况下,你可能需要刷新权限以使更改生效:

FLUSH PRIVILEGES;

4. 查看权限

使用 SHOW GRANTS 语句查看用户权限。

4.1 查看当前用户权限

SHOW GRANTS FOR CURRENT_USER;

4.2 查看其他用户的权限

SHOW GRANTS FOR 'username'@'hostname';
示例: 查看 newuser 用户的权限
SHOW GRANTS FOR 'newuser'@'localhost';

5. 完整的 GRANT 和 REVOKE 示例脚本

以下是一个完整的示例脚本,展示了如何授予和撤销权限。

-- 创建用户
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'userpassword';

-- 授予全局权限
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';

-- 查看用户权限
SHOW GRANTS FOR 'newuser'@'localhost';

-- 撤销全局权限
REVOKE ALL PRIVILEGES ON *.* FROM 'newuser'@'localhost';

-- 查看用户权限(再次查看以确认撤销)
SHOW GRANTS FOR 'newuser'@'localhost';

-- 授予数据库级别权限
GRANT ALL PRIVILEGES ON mydatabase.* TO 'newuser'@'localhost';

-- 查看用户权限
SHOW GRANTS FOR 'newuser'@'localhost';

-- 撤销数据库级别权限
REVOKE ALL PRIVILEGES ON mydatabase.* FROM 'newuser'@'localhost';

-- 查看用户权限(再次查看以确认撤销)
SHOW GRANTS FOR 'newuser'@'localhost';

-- 删除用户
DROP USER 'newuser'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

小结

通过 GRANTREVOKE 命令,你可以精细控制 MySQL 用户对数据库的权限。合理管理用户权限是确保数据库安全的关键步骤。结合实际需求和安全策略,灵活运用这些命令和技巧来管理你的 MySQL 数据库用户权限。