前言
MySQL数据库中,root 用户为管理员用户,该用户拥有超级权限,可以操作整个数据库服务器。但是在日常使用中,我们不只是管理员在操作数据库,还有其他人要操作数据库,并且这些人只需要其中的某些权限,因此在日常使用中,我们可以针对不同的角色设定不同的数据库帐号。
一、创建新用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
使用上述命令创建新用户,其中:
- username 代表用户名称;
- host 用来指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符 % ,也可以指定 IP 地址;
- password 代表新用户密码。
二、授权
在默认情况下,新用户的权限为USAGE,该权限很小,只能用于连接数据库和查询information_schema,因此需要给新用户进行授权。
1.权限介绍
权限 | 权限级别 | 权限说明 |
---|---|---|
USAGE | 数据库 | 新用户默认权限,很小 |
CREATE | 数据库、表或者索引 | 创建数据库、表或者索引权限 |
DROP | 数据库、表 | 删除数据库、表权限 |
GRANT OPTION | 数据库、表或保存的程序 | 赋予权限选项 |
REFERENCES | 数据库或表 | 允许创建外键 |
ALTER | 表 | 更改表,比如添加字段、索引等 |
DELETE | 表 | 删除数据权限 |
INDEX | 表 | 索引权限,允许创建和删除索引 |
INSERT | 表 | 插入权限 |
SELECT | 表 | 查询权限 |
UPDATE | 表 | 更新权限 |
CREATE VIEW | 视图 | 创建视图权限 |
SHOW VIEW | 视图 | 查看视图权限 |
ALTER ROUTINE | 存储过程 | 更改存储过程权限 |
CREATE ROUTINE | 存储过程 | 创建存储过程 |
EXECUTE | 存储过程 | 执行存储过程权限 |
FILE | 服务器主机上的文件访问 | 文件访问权限 |
CREATE TEMPORARY TABLES | 服务器管理 | 创建临时表权限 |
LOCK TABLES | 服务器管理 | 锁表权限 |
CREATE USER | 服务器管理 | 创建用户权限 |
RELOAD | 服务器管理 | 执行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的权限 |
PROCESS | 服务器管理 | 查看进程权限 |
REPLICATION CLIENT | 服务器管理 | 复制权限 |
REPLICATION SLAVE | 服务器管理 | 复制权限 |
SHOW DATABASES | 服务器管理 | 查看数据库权限 |
SHUTDOWN | 服务器管理 | 关闭数据库权限 |
SUPER | 服务器管理 | 执行kill线程权限 |
2.授权
GRANT privileges ON databasename.tablename TO 'username'@'host';
使用上述语句来进行授权,其中:
- privileges:代表所授予的权限,如 SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
- databasename:数据库名
- tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*
- username:权限授予的用户名称
- host:用户主机
3.注意
一般只有root用户才有权限进行权限授予,如果想让其他用户也可以进行授权,可以为其授予 GRANT OPTION 权限:
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
三、重置与更改用户密码
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
-- 例子
SET PASSWORD FOR 'ZhangSan'@'%' = PASSWORD("123456");
四、撤销用户权限
REVOKE privilege ON databasename.tablename FROM 'username'@'host';
-- 例子
REVOKE SELECT ON *.* FROM 'ZhangSan'@'%';
注意:在撤销权限时,使用的命令最好和授权时的命令对应起来,否则将不能撤销成功。
如:授权是使用语句为
GRANT SELECT ON School.Student TO 'ZhangSan'@'%';
如果撤销授权语句为
REVOKE SELECT ON *.* FROM 'ZhangSan'@'%';
则无法撤销成功,推荐使用
REVOKE SELECT ON School.Student FROM 'ZhangSan'@'%';
五、删除用户
DROP USER 'username'@'host';
-- 例子
DROP USER 'ZhangSan'@'%';
六、注意
在授予、更改或者撤销权限后建议刷新一下权限:
flush-privileges;