DCL:
我们知道,SQL语言按功能用途分为4类,分别是DDL、DML、DQL和DCL。其中,DCL是数据控 制语言,主要用于管理用户和权限。在企业中,这部分工作通常是由DBA完成,一般开发人员很少 接触。
DCL主要能做什么? 1. 创建用户 2. 删除用户 3. 修改密码 4. 给用户赋予权限 5. 撤销用户权限
用户管理:
在MySQL中,使用CREATE USER来创建用户,用户创建后没有任何权限(只能用来登录)。
#创建用户 CREATE USER '用户名' [@'主机名'] [IDENTIFIED BY '密码'];
注意:MySQL的用户账号由两部分组成:用户名和主机名,即用户名@主机名,主机名可以是IP或机器名称,主机名为localhost表示只能当前的主机才能登录,主机名为%表示允许任何地址的主机远程登录MySQL数据库。
#删除用户 DROP USER '用户名' [@'主机名']; #修改密码 ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码'
权限管理:
在MySQL数据库中,使用grant命令授权、revoke命令撤销授权。(all privileges 全部的权限)
#授权 grant all privileges on databaseName.tableName to '用户名' [@'主机名'] ;
#撤销授权 revoke all privileges on databaseName.tableName from '用户名' [@'主机名'] ;
#刷新权限 FLUSH PRIVILEGES; #查看权限 show grants for '用户名' [@'主机名'] ;
例:
use mysql;
#查看用户有哪些权限
#show grants for 'Jean'@'%';
#把mydb读的权限赋予给Jean
#grant select on mydb.* to Jean;
#把Jean的mydb读的权限收回
#revoke select on mydb.* from Jean;
#flush privileges;
#show grants for 'Jean'@'%';
权限列表:
禁止ROOT用户远程登录:
为什么要禁止root远程登录
1. root是MySQL数据库的超级管理员,几乎拥有所有权限,一旦泄露后果非常严重;
2. root是MySQL数据库的默认用户,所有人都知道,如果不禁止远程登录,可以针对root用户暴力破解密码
(user是一张表,对其进行修改操作)
use mysql;
#select * from user;
#禁止Jean远程登录
#update user set Host='localhost' where User='Jean';
#改回去
#update user set Host='%' where User='Jean';