老板:给我新建一个用户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 |
允许授予权限 |