语法:create user '用户名'@'登陆主机/ip' identified by '密码';
案例
演示一个用户创建过程
**创建一个用户只允许本地登录名叫wwz并设定密码:**mysql> create user 'wwz'@'localhost' identified by '123456';//注意你的密码有可能太过于简单从而MySQL报错不通过
**那么这时候就要设置密码复杂度:**mysql> create user 'wwz'@'localhost' identified by 'Wwz123456.';
**查看用户表数据:**mysql> select host,user,authentication_string from user;//发现新增用户
可能实际在设置密码的时候,因为mysql本身的认证等级比较高,一些简单的密码无法设置,会爆出如下报错:
ERROR1819(HY000): Your password does not satisfy the current policy requirements
**查看密码设置相关要求:**SHOW VARIABLES LIKE 'validate_password%';//查看 mysql 初始的密码策略
set global validate_password_policy=LOW; //改变验证等级,不过太简单了不好
set global validate_password_length=6;//使用sql语句改变密码长度
此时便可以使用新账号新密码进行登陆;
关于新增用户这里,需要大家注意,不要轻易添加一个可以从任意地方登陆的user。
重新登录:[root@wwz ~]# mysql -uwwz -p //登陆成功
**查看当前用户下的数据库:**mysql> show databases;//发现有的数据库不让我看了,看不到我以前的库
**删除用户:**mysql> drop user wwz;这个操作不允许得说明在那台机器上;直接给个用户名不能删除,它默认是%,表示所有地方可以登陆的用户
mysql> drop user wwz@localhost;//因为user和host两列合起来才叫做完整的用户,得指定
**再查用户表:**发现没有wwz了
**再创建一个新用户让他从任意远端登录:**mysql> create user 'wwz'@'%' identified by 'Wwz123456.';//使用%表示可以从任意远端登录MySQL
**查表:**mysql> select user,host,authentication_string from user;//发现新建用户成功
mysql> create table user( id int primary key, name varchar(20) not null );
**wwz使用新建的数据库:**mysql> use rootdb;//权限拒绝报错,因为没有权限,一个他都不知道有这个数据库二是没权限
那么给wwz赋予全部权限:****mysql> grant all on rootdb.user to 'wwz'@'%';
**此时wwz在使用新建的数据库:**发现此时能用
**查看特定用户被赋予了什么权限 :**mysql> show grants for 'wwz'@'%';
**wwz向user表插入数据:**mysql> insert into user values (1,'张飞');//因为他有insert权限
注意:如果发现赋权限后,没有生效,执行如下指令:flush privileges;
回收权限
那如果我不想让wwz有insert权限呢? 回收部分权限即可;
语法:revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';
**删除wwz对于user表的插入权限:**mysql> revoke insert on rootdb.user from 'wwz'@'%';
**那么此时wwz再对user表插入:**mysql> insert into user values (2,'张');//插入失败
**那么此时再查看wwz的权限:**mysql> show grants for 'wwz'@'%'\G
原本是all但是去除了insert所以陈列了除insert的所有权限
**删除wwz对user表的所有权限:**mysql> revoke all on rootdb.user from 'wwz'@'%';
**此时再查看wwz的权限:**mysql> show grants for 'wwz'@'%';//发现什么权限都没有了
**那么此时给wwz用户select权限对rootdb下的所有表:**mysql> grant select on rootdb.* to 'wwz'@'%';//此时能查看rootdb数据库的所有表,原来只能看user表