maxintcsdnblog 2019-06-27
MySQL 的用户账号信息存储在 mysql
数据库中。一般不推荐直接访问 mysql
数据库,因为对它们的任何毁坏都可能严重地伤害到 MySQL 服务器。需要直接访问它的时机之一是在需要获得所有用户账号列表时:
USE mysql; SELECT user, password FROM user;
MySQL 为用户专门提供了账号管理相关的 SQL 语句,接下来我们来看看它们的使用方法。
创建一个新的用户账号,可以使用 CREATE USER
语句。例如,在创建新用户账号时指定用户名、密码和允许连接的主机地址:
CREATE USER 'jochen'@'localhost' IDENTIFIED BY 'password';
主机地址 HOST 允许以下几种类型:
localhost
:只允许该用户在本地登录,不能远程登录;192.168.1.1
:具体的 IP 表示只允许该用户从特定 IP 登录;%
:允许在除本机之外的任何一台机器远程登录。为了重新命名一个用户账号,可以使用 RENAME USER
语句:
RENAME USER finley TO jochen;
为了更改用户密码,可以使用 SET PASSWORD
语句,同时密码必须使用 Password
函数进行加密:
SET PASSWORD FOR jochen = Password('$mysql$');
USE mysql; UPDATE user SET host = '%' where user ='jochen'; FLUSH privileges;
为了删除一个用户账号以及相关的权限信息,可以使用 DROP USER
语句:
DROP USER jochen;
在创建用户账号之后,必须给用户分配相应的访问权限。新创建的用户账号如果没有设置权限信息,该账号用户允许登录 MySQL 系统,但不能看到数据,不能执行任何数据库操作。查看用户账号的权限,可以使用 SHOW GRANTS
语句:
SHOW GRANTS FOR jochen;
为设置权限,使用 GRANT
语句,同时必须提供以下信息:
// 允许用户在 bankaccount 数据库的所有表上使用 SELECT 语句 GRANT SELECT ON bankaccount.* TO jochen; // 授予用户多个权限,同时可以修改允许连接的主机地址 GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON bankaccount.* TO 'jochen'@'localhost'; // 授予用户对所有数据库和表的所有权限,同时允许用户修改权限(相当于 root 用户) GRANT ALL PRIVILEGES ON *.* TO 'jochen'@'localhost' WITH GRANT OPTION;
使用 GRANT
语句来设置用户的访问权限,而 REVOKE
语句可以撤销特定的用户权限:
REVOKE SELECT ON bankaccount.* FROM jochen;用户访问权限必须存在,否则 MySQL 会报错。
权限 | 说明 |
---|---|
ALL | 除 GRANT OPTION 外的所有权限 |
ALTER | 使用 ALTER TABLE 语句 |
CREATE | 使用 CREATE TABLE 语句 |
CREATE USER | 使用 CREATE USER 、DROP USER 、RENAME USER 、CREATE USER 、REVOKE ALL PRIVILEGES 语句 |
DELETE | 使用 DELETE 语句 |
DROP | 使用 DROP TABLE 语句 |
INSERT | 使用 INSERT 语句 |
SELECT | 使用 SELECT 语句 |
UPDATE | 使用 UPDATE 语句 |
USAGE | 无访问权限 |