MySQL-用户、权限与安全
1.用户管理
1.1 创建用户
创建用户需要具有CREATE USER权限。
命令:
CREATE USER 用户名 IDENTIFIED BY '密码';
例如:
CREATE USER ben IDENTIFIED BY 'qwe123QWE!@#';
MySQL使用'用户名'@'主机名'来标识一个用户,不指定host的情况下默认为%(所有主机都可以访问)。如果需要指定主机可以是用 用户名@主机名。
使用IDENTIFIED AS '密码的hash值',可以避免明文密码的泄露。
1.2 修改用户名、密码
命令:
RENAME USER 旧用户名 TO 新用户名;
例如:
RENAME USER ben TO bforta;
1.3 删除用户
命令:
DELETE USER 用户名;
例如:
DELETE USER bforta;
1.4 设置用户密码有效期
设置过期用户,命令:
ALTER USER 用户名@主机名 PASSWORD EXPIRE;
例如:
ALTER USER ben@localhost PASSWORD EXPIRE;
用户在登录时,需要更改密码,命令:
ALTER USER 用户名@主机名 IDENTIFIED BY '密码';
例如:
ALTER USER ben@localhost IDENTIFIED BY 'qwe123QWE!@#';
每个固定时间修改密码,例如:
# 每个90天修改密码
ALTER USER ben@localhost PASSWORD EXPIRE INTERVAL 90 DAY;
1.5 锁定、解锁用户
例如:
# LOCK锁定,UNLOCK解锁
ALTER USER ben@localhost ACCOUNT LOCK/UNLOCK;
1.6 更改口令
命令:
**SET PASSWORD FOR 用户名 = Password('密码');
例如:
SET PASSWORD FOR bforta = Password('mima');
不指定用户名时,更新当前登录用户的口令。
2. 权限管理
2.1 授予权限
命令:
GRANT 权限 ON 范围 TO 用户;
例如:
GRANT SELECT ON company.* TO ben;
范围的大小:
数据库:数据库名.*
表:数据库名.表名
列:SELECT(列名1,列名2,...) ON 数据库名.表名
ALL 权限代表除了GRANT权限之外的所有权限。
2.2 检查权限
命令:
SHOW GRANTS FOR 用户名;
例如:
SHOW GRANTS FOR ben;
2.3 撤销权限
命令:
REVOKE 权限 ON 范围 FROM 用户名;
例如:
REVOKE SELECT ON employees FROM ben;
关于修改mysql.user表。
修改mysql.user也能够实现创建用户、授予权限的功能。
但是不会像GRANT、REVOKE、SET PASSWORD或RENAME USER等账户管理语句,会将修改立即加载到内存。
需要手动刷新,使用命令:FLUSH PRIVILEGES;
2.4 查看权限
命令:
SHOW GRANTS FOR 用户名;
权限清单:
| 权限 | 说明 |
|---|---|
| ALL | 除了GRANT OPTION外的所有权限 |
| ALTER | 使用ALTER TABLE修改表 |
| ALTER ROUTINE | 使用ALTER/DROP PROCEDURE(存储过程) |
| CREATE | 使用CREATE TABLE创建表 |
| CREATE ROUTINE | 使用CREATE PROCEDURE创建存储过程 |
| CREATE TEMPORARY TABLES | 使用CREATE TEMPORARY TABLE创建临时表 |
| CREATE USER | 使用CREATE USER、DROP USER、RENAME USER和REVOKE ALL PRIVILEGES管理用户 |
| CREATE VIEW | 使用CREATE VIEW创建视图 |
| DELETE | 使用DELETE删除数据 |
| DROP | 使用DROP TABLE删除表 |
| EXECUTE | 使用CALL和存储过程 |
| FILE | 使用SELECT INTO OUTFILE和LOAD DATA INFILE(全局权限,导入、导出数据) |
| GRANT OPTION | 使用GRANT和REVOKE权限授予和收回 |
| INDEX | 使用CREATE INDEX和DROP INDEX创建和删除索引 |
| INSERT | 使用INSERT插入数据 |
| LOCK TABLES | 使用LOCK TABLES锁表 |
| PROCESS | 使用SHOW FULL PROCESSLIST(查看所有进程) |
| RELOAD | 使用FLUSH |
| REPLICATION CLIENT | 服务器位置的访问 |
| REPLICATION SLAVE | 由复制从属使用 |
| SELECT | 使用SELECT(读表) |
| SHOW DATABASES | 使用SHOW DATABASES |
| SHOW VIEW | 使用SHOW CREATE VIEW |
| SHUTDOWN | 使用mysqladmin shutdown(用来关闭MySQL) |
| SUPER | 使用CHANGE MASTER、KILL、LOGS、PURGE、MASTER和SET GLOBAL。还允许mysqladmin调试登录 |
| UPDATE | 使用UPDATE(修改表) |
| USAGE | 无访问权限 |
3. 角色管理
3.1 创建角色
命令:
CREATE ROLE 角色名1, 角色名2,...;
例如:
CREATE ROLE 'app_read_only','app_writes','app_developer';
3.2 为角色分配权限、为用户分配角色
例如:
# 角色分配权限
GRANT SELECT ON employees.* TO 'app_read_only';
GRANT INSERT,UPDATE,DELETE ON employees.* TO 'app_writes';
# 为用户分配角色
GRANT 'app_read_only' TO ben@localhost;
角色可以看做一个权限包,其中包含多个权限,方便给用户授予权限。
4. 安全
安全内容后续补全。

浙公网安备 33010602011771号