- 用户管理主要包括两方面的工作: 用户账号的管理,包括: 创建、删除、改密 用户权限的管理,包括: 授予权限、取消权限
- 先测试一下通过 ip 地址连接数据库
dengzemiaodeMacBook-Pro:~ dengzemiao$ mysql -h10.0.90.48 -uroot -p Enter password: ERROR 1130 (HY000): Host '10.0.90.48' is not allowed to connect to this MySQL server 因为 root 账号其他人是没有权限用它进行访问的,现在我们需求来创建一个用户给与别人来访问我们的数据库。
- 查看用户
mysql 数据库管理系统中有个数据库叫做 "mysql" ,绝对不能删除!其中有个表 "user",就是存储了当前数据库系统中的所有用户信息,初始时只有一个用户: root。
mysql> use mysql; Database changed mysql> select * from user; 查出来的符号太多了,截图算了
- 创建用户
``` 创建用户不能通过正常的 sql 插入语句操作。
语法形式: create user '用户名' [@'允许登录的地址'] identified by '密码'; create user '用户名'[@'允许登录的地址'] identified by '密码'; // @ 符号挨着用户名也是没问题的
说明: 1、创建用户之后,数据库 mysql 中的 user 表中就会多一个用户。 2、'允许登录的地址' 就是允许登录的客户端的ip地址,如果设置了就只能在这个指定的地址进行登录: ① 'localhost':表示只能本地登录。 ② '%':表示任何位置都可以登录。 ③ 该部分可以省略,如果省略,默认就是 '%'。 ④ 后续涉及到用户的操作,都是这个格式。
示例: create user 'user1' identified by '123456'; create user 'user1' @'localhost' identified by '123456'; create user 'user1' @'10.0.90.48' by '123456'; create user 'user1' @'%' by '123456'; ```
那么就来创建一个用户 user_all 测试一下:
mysql> create user 'user_all' identified by '123456'; Query OK, 0 rows affected (0.00 sec)
然后我们再次执行 ip 登录我们的数据库:
``` 会发现连接成功了 dengzemiaodeMacBook-Pro:~ dengzemiao$ mysql -h10.0.90.48 -uuser_all -p Enter password: Welcome to the MySQL monitor...
但是我们的权限有限,能查看的数据库很少,都是无关紧要的库,所以等下我们还需要配置权限 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | +--------------------+ ```
- 删除用户
``` 删除用户后,数据库 mysql 中的 user 表中就会少一个用户。
语法形式: drop user '用户名' [@'允许登录的地址']; drop user '用户名'[@'允许登录的地址']; // @ 符号挨着用户名也是没问题的
注意: 如果在创建用户的时候,用户指定了 '允许登录的地址',那么在删除的时候也需要带上 '允许登录的地址' 进行删除
举例: drop user '用户名'; // 默认就是删除 @'%' drop user '用户名' @'%'; drop user '用户名' @10.0.90.48; ```
那么就来删除一下这两种情况下的用户:
``` 创建一个不带 '允许登录的地址' 的用户 mysql> create user 'user_all' identified by '123456'; Query OK, 0 rows affected (0.00 sec)
删除一个不带 '允许登录的地址' 的用户 mysql> drop user 'user_all'; Query OK, 0 rows affected (0.00 sec)
创建一个带 '允许登录的地址' 的用户 mysql> create user 'user_all' @'10.0.90.48' identified by '123456'; Query OK, 0 rows affected (0.00 sec)
通过不带 '允许登录的地址' 的方式删除会报错 mysql> drop user 'userall'; ERROR 1396 (HY000): Operation DROP USER failed for 'userall'@'%'
删除一个带 '允许登录的地址' 的用户 mysql> drop user 'user_all' @10.0.90.48; Query OK, 0 rows affected (0.00 sec) ```
- 修改/设置用户密码
``` 修改当前账户密码 set password = password('密码');
修改指定账户密码 set password for '用户名' [@'允许登录的地址'] = password('密码'); set password for '用户名'[@'允许登录的地址'] = password('密码'); // @ 符号挨着用户名也是没问题的 ```
password()、md5() 是加密函数:
mysql> select password('123'), md5('123'); +-------------------------------------------+----------------------------------+ | password('123') | md5('123') | +-------------------------------------------+----------------------------------+ | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | 202cb962ac59075b964b07152d234b70 | +-------------------------------------------+----------------------------------+
- 授予用户权限
``` 语法形式: grant 权限1, 权限2, ... on .(或 数据库名.* 或 数据库名.表名) to '用户名'[@'允许登录的地址'];
说明: 1、'权限1' 其实就是权限名,是一个"特定词",比如: delete, insert, update, select, create 等等。 ① 其中,还可以用 "all",表示 "所有权限" (除了 grant 权限)。 2、on 后表示对 "什么东西" 来设定该权限,意思是对什么库的什么表,其中: ① .:表示所有库的所有表, ② 数据库名.*:表示该指定数据库的所有表; ③ 数据库名.表名:表示该指定数据库的该指定表;
示例: grant all on test.* to userall; grant select, insert on test.* to userall; grant select, insert on test.* to user_all@'%'; ```
我在 root 账号中对 user_all 账号赋予 test 数据库的 select 权限:
mysql> grant select on test.* to user_all; Query OK, 0 rows affected (0.01 sec)
然后去 user_all 账号中去查看一下,注意如果看不到表可以退出重新登录数据库,会发现比之前查看的时候多了一个 test 数据库:
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | test | +--------------------+
你限制只有查询权限,其他删除、更新权限都是没有的,使用这方面的命令会报错,除非给与权限。
常用权限:
- 取消用户授权
``` 语法形式: revoke 权限1, 权限2, ... on .(或 数据库名.* 或 数据库名.表名) from '用户名'[@'允许登录的地址'];
说明: 与授予用户权限一致。
示例: 与授予用户权限一致。 ```
我在 root 账号中对 user_all 账号移除 test 数据库的 select 权限:
mysql> revoke select on test.* from user_all; Query OK, 0 rows affected (0.00 sec)
然后去 user_all 账号中去查看一下,注意显示有问题可以退出重新登录数据库,会发现已经不能访问 test 数据库了:
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | +--------------------+