MySQL用户账号和信息存储在名为mysql的MySQL数据库中。一般不需要直接访问mysql数据库和表,但有时需要直接访问。需要直接访问它的时机之一是在需要获得所有用户账号列表时。为此,可使用以下代码:
use mysql; select user from user;
创建用户账户
CREATE USER ben IDENTIFIED BY 'p@$$w0rd';
指定散列口令 IDENTIFIED BY指定的口令为纯文本,MySQL 将在保存到user表之前对其进行加密。为了作为散列值指定口令,使用IDENTIFIED BY PASSWORD。
重新命名一个用户账号
RENAME USER ben TO xiaomei;
删除用户账号
DROP USER xiaomei;
更改用户密码
SET PASSWORD FOR xiaomei = Password('xinmima');
GRANT语句
GRANT要求你至少给出以下信息:
要授予的权限;
被授予访问权限的数据库或表;
用户名。
GRANT SELECT ON dbname.* TO xiaomei;
此GRANT允许用户在dbname.*(dbname数据库的所有表)上使用SELECT。通过只授予SELECT访问权限,用户xiaomei对dbname数据库中的所有数据具有只读访问权限。
查看用户账号权限
SHOW GRANTS FOR xiaomei;
REVOKE语句
GRANT的反操作为REVOKE,用它来撤销特定的权限。下面举一个例子:
REVOKE SELECT ON dbname.* TO xiaomei;
这条REVOKE语句取消刚赋予用户xiaomei的SELECT访问权限。被撤销的访问权限必须存在,否则会出错。
GRANT和REVOKE可在几个层次上控制访问权限:
整个服务器,使用GRANT ALL和REVOKE ALL;
整个数据库,使用ON database.*;
特定的表,使用ON database.table;
特定的列;
特定的存储过程。
未来的授权
在使用GRANT和REVOKE时,用户账号必须存在,但对所涉及的对象没有这个要求。这允许管理员在创建数据库和表之前设计和实现安全措施。
这样做的副作用是,当某个数据库或表被删除时(用DROP语句),相关的访问权限仍然存在。而且,如果将来重新创建该数据库或表,这些权限仍然起作用。
简化多次授权
可通过列出各权限并用逗号分隔,将多条GRANT语句串在一起,如下所示:
GRANT SELECT,INSERT ON dbname.* TO xiaomei;
参考:《MySQL必知必会》
修改时间 2021-01-14