《MySQL必知必会》--安全管理

安全管理

数据库服务器通常包含关键的数据,确保这些数据的安全和完整需要利用访问控制。本章将学习MySQL的访问控制和用户管理。

访问控制

针对不同需求人员,授予不同控制权限。

在现实系统中,严肃使用root权限,仅在不得不使用时使用。

管理用户

MySQL用户账号和信息存储在名为mysql的MySQL数据库中。一般不需要直接访问mysql数据库和表,但有时需要直接访问。

比如需要获取所有用户账号列表:

1
2
USE mysql;
select user FROM user;

创建用户账号

1
2
3
4
CREATE USER ben IDENTIFIED BY 'p@$$word';
-- 创建用户时不一定需要口令,但本代码用`IDENTIFIED BY`给出了一个口令
RENAME USER ben TO bforta;
-- 重命名用户名

删除用户账号

1
DROP USER bforta;

设置访问权限

在创建用户账号后,必须接着分配访问权限。新创建的用户账号没有访问权限。

1
2
3
4
5
6
SHOW GRANTS FOR bforta;
-- 现实用户当前所具有的权限
GRANT SELECT ON mustknow.* TO bforta;
-- 授予bforta对数据库mustknow中所有表的查看的权限
REVOKE SELECT ON mustknow.* TO bforta;
-- 取消授予bforta对数据库mustknow中所有表的查看的权限

GRANTREVOKE可在几个层次上控制访问权限:

  • 整个服务器—-GRANT ALL//REVOKE ALL;
  • 整个数据库—-(GRANT/REVOKE) ON database.*;
  • 特定的表—-(GRANT/REVOKE) ON database.table;
  • 特定的列;
  • 特定的存储过程。

下面列出可以授予或撤销的权限

权限 说明
ALL 除GRANT OPTION外的所有权限
ALTER 使用ALTER TABLE
ALTER ROUTINE 使用ALTER PROCEDURE 和DROP PROCEDURE
CREATE 使用CREATE TABLE
CREATE ROUTINE 使用CREATE ROUTINE
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
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 无访问权限

更改口令

1
2
3
4
SET PASSWORD FOR bforta = Password('n3w p@$$w0rd');
-- 更新用户口令
SET PASSWORD = Password('joneln');
-- 更改自己的口令

小结

对于管理MySQL还是很重要的。而且在权限中可以发现,还有一些自己目前没有接触过的指令。