数据库服务器通常包含关键的数据,确保这些数据的安全和完整性要利用访问控制。
28.1 访问控制
用户不能对过多的数据具有过多的访问权。
访问控制:需要给用户提高他们所需的访问权,且仅提供他们所需的访问权。管理访问控制需要创建和管理用户的账号。
使用MySQL Administrator:MySQL Administrator提供了一个图形用户界面,可用来管理用户及账号权限。
防止无意的错误
不要使用root
28.2 管理用户
MySQL用户账号和信息存储在名为mysql的MySQL数据库中,一般不需要直接访问mysql数据库和表。在需要获得所有用户账号列表时直接访问mysql数据库和表。
USE mysql;
SELECT user FROM user;
mysql数据库有一个名为user的表,包含所有用户账号。user表有user列,存储用户登录名。
28.2.1 创建用户账号
CREATE USER ben IDENTIFIED BY 'p@$$w0rd';
指定散列口令:
IDENTIFIED BY PASSWORD
使用GRANT或INSERT(不建议INSERT)
重命名一个用户账号(MySQL 5及以后):
RENAME USER ben TO bforta;
28.2.2 删除用户账号
删除一个用户账号(以及相关权限:MySQL 5及以后)
DROP USER bforta;
28.2.3 设置访问权限
看到赋予用户账号的权限:
SHOW GRANTS FOR bforta;
USAGE:根本没有权限
MySQL的权限用用户名和主机名结合定义。
user@host
使用GRANT设置权限:至少给出以下信息:
- 要授予的权限
- 被授予访问权限的数据库或表
- 用户名
GRANT SELECT ON crashcouese.* TO bforta;
通过只授予SELECT访问权限,用户bforta对crashcouese数据库中的所有数据具有只读访问权限。
REVOKE用来撤销特定的权限。
REVOKE SELECT ON crashcouese.* TO bforta;
GRANT和REVOKE可在几个层次上控制访问权限:
- 整个服务器,使用GRANT ALL或REVOKE ALL;
- 整个数据库,使用ON database.*;
- 特定的表,使用 ON database.table;
- 特定的列;
- 特定的存储过程。
28.2.4 更改口令
SET PASSWORD FOR bforta=Password('p@$$w0rd');
新口令必须传递到Password()函数进行加密。
不指定用户名时,更新当前登录用户的口令。
SET PASSWORD =Password('p@$$w0rd');