用户应该具有适当的访问权,既不能多也不能少。
MySQL Administrator提供了图形界面,可用来管理用户和账号权限。
MySQL创建一个名为root的用户账号,它对整个MySQL服务器有完全的控制。在日常工作中,决不能使用root,而应创建一系列账号供不同用户使用,防止恶意或无意地破坏数据库。
MySQL的用户账号和信息存储在名为mysql的数据库中,获取所有用户的账号列表:
USE mysql;
SELECT user FROM user;
user表中包含所有用户账号,表中user列存储用户登录名,新服务器可能只有一个root用户。
更改权限时最好打开多个数据库客户机,一个更改权限,一个测试被更改的权限。
创建新用户:
CREATE USER ben IDENTIFIED BY 'password';
以上创建了新用户ben,密码是password。
IDENTIFIED BY指定的密码为纯文本,MySQL将其保存在user表之前进行了加密。创建用户时,如果以加密后的散列值作为口令要使用IDENTIFIED BY PASSWORD子句。
GRANT语句也可以创建用户,但CREATE USER更简单和清楚。也可以直接向user表中插入行来增加用户,但为了安全,不要这么做,MySQL存储用户账号信息的表和表模式极为重要,对它们的破坏会破坏MySQL服务器,因此最好使用指令和函数处理这些表。
重命名一个用户:
RENAME USER oldName TO newName;
MySQL 5之后才支持RENAME USER语句。在此之前为了重命名一个用户,需要使用UPDATE语句直接更新user表。
删除用户账号和相关权限:
DROP USER userName;
DROP USER在MySQL 5之后才支持,在此之前,DROP USER只能用来删除用户账号,不能删除相关权限,因此旧版本需要先REVOKE删除此账号的权限,再删除用户。
创建用户后,要分配访问权限,否则新用户只能登录MySQL,不能看到数据,也不能执行任何数据库操作。查看用户的权限:
SHOW GRANTS FOR userName;
输出显示用户ben有权限USAGE ON *.*
,USAGE表示没有权限,此结果表示在任意数据库和任意表上对任何东西都没有权限。
MySQL的权限用用户名和主机名结合定义,如果不指定主机名,默认值%
,它表示授予用户访问权限而不管主机名。
授予权限:
GRANT SELECT ON crashcourse.* TO ben;
上例授予ben对数据库crashcourse中所有表的SELECT权限。
撤销权限:
REVOKE SELECT ON crashcourse.* FROM ben;
被撤销的权限必须存在,否则报错。
可授予和撤销的权限:
使用GRANT和REVOKE时,用户账号必须存在,但所涉及的数据库或表等对象不必存在,这允许管理员在创建数据库和表前先设计和实现安全措施。副作用为删除某个库或表时,相关的访问权限仍存在,如果重建同名库或表,权限仍起作用。
简化多次授权:
GRANT SELECT, INSERT ON crashcourse.* TO bforta;
更改用户口令:
SET PASSWORD FOR bforta = Password('密码');
新口令必须使用Password函数加密。
更改自己的口令:
SET PASSWORD = Password('密码');