MySQL 用户权限管理是数据库安全的重要组成部分。以下是关于 MySQL 用户权限设置的详细说明:
-- 查看所有用户
SELECT User, Host FROM mysql.user;
-- 查看特定用户权限
SHOW GRANTS FOR 'username'@'host';
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
host 可以是:
localhost - 仅本地连接% - 允许任何主机连接基本语法:
GRANT privilege_type ON database_name.table_name TO 'username'@'host';
| 权限 | 说明 |
|---|---|
| ALL PRIVILEGES | 所有权限 |
| CREATE | 创建数据库/表 |
| DROP | 删除数据库/表 |
| DELETE | 删除表数据 |
| INSERT | 插入数据 |
| SELECT | 查询数据 |
| UPDATE | 更新数据 |
| ALTER | 修改表结构 |
| INDEX | 创建/删除索引 |
| CREATE VIEW | 创建视图 |
| SHOW VIEW | 查看视图 |
| CREATE ROUTINE | 创建存储过程 |
| EXECUTE | 执行存储过程 |
| TRIGGER | 创建/删除触发器 |
-- 授予所有数据库的所有权限
GRANT ALL PRIVILEGES ON *.* TO 'username'@'host';
-- 授予特定数据库的所有权限
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';
-- 授予特定表的SELECT, INSERT权限
GRANT SELECT, INSERT ON database_name.table_name TO 'username'@'host';
-- 授予创建临时表权限
GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'username'@'host';
REVOKE privilege_type ON database_name.table_name FROM 'username'@'host';
每次修改权限后,需要执行:
FLUSH PRIVILEGES;
DROP USER 'username'@'host';
-- MySQL 5.7.6及以上版本
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
-- 旧版本
SET PASSWORD FOR 'username'@'host' = PASSWORD('new_password');
GRANT privilege_type ON database_name.table_name TO 'username'@'host' WITH GRANT OPTION;
MySQL权限存储在以下几个系统表中:
- mysql.user - 用户账户和全局权限
- mysql.db - 数据库级权限
- mysql.tables_priv - 表级权限
- mysql.columns_priv - 列级权限
- mysql.procs_priv - 存储过程和函数权限
通过合理设置MySQL用户权限,可以有效保障数据库安全性和数据完整性。