一. 安全管理

1. 访问控制

MySQL服务器的安全基础是:用户应对他们需要的数据具有适当的访问权,既不能多也不能少。用户不能对过多的数据具有过多的访问权。请看如下几种场景:

(一)多数用户只需要对表进行读和写,少数用户来创建和删除表。

(二)某些用户需要读表,但可能不需要更新表。

(三)允许用户添加数据,但不能删除。

(四)某些用户(管理员)可能需要处理用户账号的权限,但多数用户不需要。

(五)只想让用户通过存储过程访问数据,但不允许直接访问数据。

(六)根据用户登录地点限制对某些功能的访问。

这些例子说明需要给用户提供他们所需的访问权,且仅提供他们所需的访问权。这就是所谓的访问控制,管理访问控制需要创建和管理用户账号。

MySQL创建一个名为root的用户账号,它对整个MySQL服务器具有完全的控制。不过在现实世界中,决不能使用root。应该创建一系列账号,有的用于管理,有的供用户使用,有的供开发人员使用。

2. 管理用户

MySQL用户账号和信息存储在名为mysql的MySQL数据库中,一般不需要直接访问数据库和表,但有时需要直接访问,时机是在需要获得所有用户账号列表时。可使用如下代码访问



Use mysql;
Select user from user;



mysql数据库有一个名为user的表,它包含所有用户账号.user表中有个user列,用来存储用户登录名。




MySQL如何获得DBA权限 mysql有dba权限吗_用户账号


(1) 创建用户账号


//为了创建一个新用户账号,使用create user。
Create user ben IDENTIFIED BY 'p@$$w0rd';


CREATE USER创建一个新用户账号,在创建用户账号时不一定需要口令。IDENTIFIED BY指定口令为纯文本,MySQL将在保存到user表之前对齐进行加密。Grant语句也可以创建用户账号,但一般CREATE USER是最清楚和最简单的句子


//为重新命名一个用户账号,使用rename user。
Rename user ben TO bforta;


(2) 删除用户账号


//为删除一个用户账号,使用drop user。
Drop user bforta;


(3) 设置访问权限

在创建用户账号后,必须接着分配访问权限。新创建的用户账号没有访问权限,它们能登录MySQL,但不能看到数据,不能执行任何数据库操作。未看到赋予用户账号的权限,使用show grant for


Show grants for bforta;


为设置权限使用GRANT语句,GRANT要求给出如下信息:

(一)要授予的权限。(二)被授予访问权限的数据库和表。(三)用户名。


Grant select on crashcourse .* TO bforta;


此GRANT允许用户在crashcourse.*(crashcourse库的所有表)上使用select。通过只授予select访问权限,用户bforta对crashcourse数据库中所有数据具有只读权限。


//Grant的反操作为REVOKE,用它来撤销特定的权限。
 REVOKE SELECT ON crashcourse.* from bforta;


这条REVOKE语句取消刚赋予用户bforta的SELECT访问权限。被撤销的访问权限必须存在,否则会出错。

GRANT和REVOKE可在几个层次上控制访问权限:

(一)整个服务器:GRANT ALL、REVOKE ALL

(二)整个数据库:ON database.*;

(三)特定的表:ON database.table;

(四)特定的列。

(五)特定的存储过程。

(4) 更改口令


//为了更改用户口令,可使用set password语句。新口令必须如下加密:
SET PASSWORD FOR bforta = Password(‘n3w p@$$w0rd’);


SET PASSWORD更新用户口令,新口令必须传递到Password()函数进行加密。Set password还可以用来设置自己的口令。

至此,《MySQL必知必会》知识点已全部总结完毕,需认真掌握这些基本内容。