一、新建一个用户
老板:给我新建一个用户joytom,密码设置为123321,并任意远程主机都能访问,五分钟完成,实现不了就给我提桶走人!
小王会心一笑,对创建用户的命令早已滚瓜烂熟了,于是熟练的操作了起来:
1、创建用户命令:
CREATE USER ‘username‘@’host’ IDENTIFIED BY ‘password’;
2、创建用户
mysql> create user 'hh'@'%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
查看一下是否创建成功:?
mysql> select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| caona | % |
| hh | % |
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
二、为用户授权
创建完用户后……
老板:好,比以前有进步了,那你再给joytom这个用户设置一个权限,只允许查询和修改copytest数据库中的student表。
小王信手拈来,又熟练的操作了一波:
1、给用户授权命令
grant privileges on database.tablename to “username”@’host’;
privileges:用户的操作权限,如 SELECT,INSERT,UPDATE 等,如果要授予所的权限则使用 ALL。
?
?2、给 hh 用户授可查、改的权限。
mysql> grant select,update on mysql.user to 'hh'@'%';
Query OK, 0 rows affected (0.02 sec)
3、在给 hh用户增加一个查看视图的权限,并刷新
mysql> grant SHOW VIEW on mysql.user to 'hh'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
三、撤销用户权限
老板:咳咳,很好,现在 joytom 不是有三个权限了么(查询,修改,查询视图),那你把查询视图的权限给去掉,只留查询和修改。
小王心中暗喜,这我都学了,很基础的啊……
1、撤销用户权限命令
revoke privileges ON database.tablename FROM ‘username‘@’host’;
撤销(revoke)的和授予(grant)的基本一样,除了 revoke(对应 grant)和 from(对应 to)
2、撤销 joytom 用户的查看视图的权限
mysql> revoke SHOW VIEW on mysql.user from 'hh'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
再次查看:?
?mysql> show grants for 'hh'@'%';
+----------------------------------------------------+
| Grants for hh@% ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
+----------------------------------------------------+
| GRANT USAGE ON *.* TO `hh`@`%` ? ? ? ? ? ? ? ? ? ? |
| GRANT SELECT, UPDATE ON `mysql`.`user` TO `hh`@`%` |
+----------------------------------------------------+
2 rows in set (0.00 sec)
?发现已经没了查看视图的权限。
grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。
四、删除一个用户
老板:把 joytom 这个用户删掉让我看看。
小王:好嘞,40 秒完事。
1、删除用户命令
drop user username@host
2、删除用户
先查看一下现在的所有用户:
mysql> select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| caona | % |
| hh | % |
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
?删除 hh:
mysql> drop user hh@'%';
Query OK, 0 rows affected (0.01 sec)
再次查看,发现已经没了 joytom 这个用户:
mysql> select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| caona | % |
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)
五、修改用户的密码
老板:把 joytom 这个用户密码修改一下。
小王:好嘞老板。
mysql5.*版本使用如下语句:
要想为匿名账户指定密码,可以使用SET PASSWORD或UPDATE。在两种情况中,一定要使用PASSWORD()函数为密码加密
在Windows/Unix中使用PASSWORD的方法:
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR ''@'%' = PASSWORD('newpwd');
为匿名账户指定密码的另一种方法是使用UPDATE直接修改用户表。
在Windows和Unix中的过程是相同的。
下面的UPDATE语句同时为两个匿名账户指定密码:
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd') WHERE User = '';
mysql> FLUSH PRIVILEGES;
mysql8.*版本使用如下语句:
1、?修改用户登录密码
?ALTER USER 'caona'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY '123456'; ?
六、密码过期和锁定用户
老板大喜:非常好非常好,加薪 2k,继续努力,另外给其它同事讲一下密码过期和锁定用户的问题。
感谢老板,我会继续努力,我这就去整理一下课件。
1、关于密码过期
在 MySQL5.6.6 版本起,增加了 password_expired 功能,它允许设置 MySQL 数据库用户的密码过期时间。这个特性已经添加到 mysql.user 数据表,它的默认值是”N”,表示已禁用密码过期功能
强制设置为密码过期:
强制设置密码过期后,虽然能够登陆,但是一切权限都为空了。
2、关于 mysql5.7 锁定用户
在创建的时候锁定用户:
?
已存在的时候锁定用户:
解锁账号:
七、权限常用关键字
老板:现在你对 mysql 的权限管理掌握的还算可以了,咳咳,今天下班前给我整理一个权限常用关键字,整理不好就加会班吧。
小王想,幸亏这个我在学的时候就已经整理过啊,看样今天不用加班了!
权限 | 意义 | ALL [PRIVILEGES] | 设置除GRANT OPTION之外的所有简单权限 | ALTER | 允许使用ALTER TABLE | ALTER ROUTINE | 更改或取消已存储的子程序 | CREATE | 允许使用CREATE TABLE | CREATE ROUTINE | 创建已存储的子程序 | CREATE TEMPORARY TABLES | 允许使用CREATE TEMPORARY TABLE | CREATE USER | 允许使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。 | CREATE VIEW | 允许使用CREATE VIEW | DELETE | 允许使用DELETE | DROP | 允许使用DROP TABLE | EXECUTE | 允许用户运行已存储的子程序 | FILE | 允许使用SELECT...INTO OUTFILE和LOAD DATA INFILE | INDEX | 允许使用CREATE INDEX和DROP INDEX | INSERT | 允许使用INSERT | LOCK TABLES | 允许对您拥有SELECT权限的表使用LOCK TABLES | PROCESS | 允许使用SHOW FULL PROCESSLIST | REFERENCES | 未被实施 | RELOAD | 允许使用FLUSH | REPLICATION CLIENT | 允许用户询问从属服务器或主服务器的地址 | REPLICATION SLAVE | 用于复制型从属服务器(从主服务器中读取二进制日志事件) | SELECT | 允许使用SELECT | SHOW DATABASES | SHOW DATABASES显示所有数据库 | SHOW VIEW | 允许使用SHOW CREATE VIEW | SHUTDOWN | 允许使用mysqladmin shutdown | SUPER | 允许使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL语句,mysqladmin debug命令;允许您连接(一次),即使已达到max_connections。 | UPDATE | 允许使用UPDATE | USAGE | “无权限”的同义词 | GRANT OPTION | 允许授予权限 |
|