MySQL服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权限,既不能多也不能少。MySQL用户账号和信息存储在名为mysql的MySQL数据库中。
为了创建一个新用户账号,使用crate user语句。在创建用户账号时不一定需要口令,但是也是可以设置的。identified by 指定的口令为纯文本,MySQL将在保存到user表之前对其进行加密。为了作为散列值指定口令,使用 identified by password。
grant语句也可以创建用户账号,但一般来说crate user是最清楚和最简单的句子。
为重新命名一个用户账号,使用rename user 语句。,仅MySQL 5或之后的版本支持 rename user 。为了在以前的MySQL中重命名一个用户,可使用update 直接更新user表。
为了删除一个用户账号(以及相关的权限),使用drop user 语句,如后所示:drop user 用户账号名称。自MySQL 5以来,drop user 删除用户账号和所有相关的账号权限。在MySQL 5以前,drop user 只能用来删除用户账号,不能删除相关的权限。因此,如果使用旧版的MySQL,需要先用remove删除与账号相关的权限,然后在用drop user 删除账号。
为了查看赋予用户账号权限,使用show grants for 。如后所示:show grants fo 用户账号名称。 注意usage 表示根本没有权限。
MySQL的权限用用户名和主机名结合定义,如果不指定主机名,则使用默认的主机名%(授予用户访问权限而不管主机名)。
为了设置权限,使用grant语句。而grant要求至少要给出以下信息:
1)要授予的权限。
2)被授予访问的数据或表。
3)用户名。
grant的反操作为revoke,用它来撤销特定的权限。grant和revoke可以在如下几个层次上控制访问权限:
1)整个服务器,使用grant all和revoke all;
2)整个数据表,使用 on database.*;
3)特定的表,使用 on database.table;
4)特定的列;
5)特定的存储过程。
可以授予或撤销的权限如下所示:
在使用grant和revoke时,用户账号必须存在,但对所涉及的对象没有这个要求。这允许管理员在创建数据库表和表之前设计和实现完全措施。这样做的副作用是,当某个数据库或表被删除时(用drop语句),相关的访问权限仍然存在。而且,如果将来重新创建该数据库或表,这些权限仍然起作用。
简化多次授予:可通过列出各权限用逗号分隔,将多条grant语句串在一起。
为了更改用户口令,可以使用set password 语句。且新口令必须如下进行加密:
set password for bforta=Password(“新口令内容”);
set password 更新用户口令。且新口令必须传递到Password()函数进行加密。set password 还可以用来设置自己的口令,在不指定用户名时,set password更新当前登录用户的口令。