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用户权限,可以有效保障数据库安全性和数据完整性。