我们一般默认使用的都是root用户,超级管理员,拥有全部的权限。但是,一个公司里面的数据库服务器上面可能同时运行着很多个项目的数据库。所以,我们应该可以根据不同的项目建立不同的用户,分配不同的权限来管理和维护数据库。
语法:
# CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
关键字说明:
1. 用户名:将创建的用户名
2. 主机名:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
3. 密码:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器
# 备注: 用户信息是保存在mysql.user表中
1. host: 该用户所允许访问的主机
::1 (ipv6的本地回环地址的简写)
2. user : 用户名
3. password : 经过加密之后的密码
常见的加密方式:
# 加密
1. 用户的密码不可能明文保存在数据库中的,不安全
2. 加密的相关概念
a. 给一个女孩子发信息: I love you.
(明文: 原始的数据)
b. 计算方法: 字母表移动
(加密算法: 凯撒加密)
c. 右移3位
(密钥: 加密的参数)
d. 结果 : L oryh brx.
(密文: 明文经过加密算法得到的数据)
3. 凯撒加密算法的破解
a. 统计学: 频率分析法
1). 缴获了大量的密文
2). 平时字母表的使用发现: e出现的频率最高
3). 密文中发现: h出现的频率最高
4). 猜: h是由e得到的
b. 内奸透露算法规则
4. 现代的加密算法
算法公开, 隐藏密钥
a. 可逆算法
1). 对称加密 : 加解密使用的是同一把密钥
2). 非对称加密 : 加解密使用的是不同的密钥
3). 破解关键: 密钥
b. 不可逆算法(md5,sha...)
一个明文 -> 一个密文
碰撞: 多个不同明文,得到同一密文(碰撞率很低)
告诉你密文,告诉你算法, 你得不出明文
破解: 暴力破解(遍历)
md5算法: 王小云教授
具体操作:
-- user1用户只能在localhost这个IP登录mysql服务器
mysql> CREATE USER 'user1'@'localhost' IDENTIFIED BY '123@abcABC';
Query OK, 0 rows affected (0.00 sec)
-- user2用户可以在任何电脑上登录mysql服务器
mysql> CREATE USER 'user2'@'%' IDENTIFIED BY '123@abcABC';
Query OK, 0 rows affected (0.00 sec)
用户创建之后,基本没什么权限!需要给用户授权
-- 登录用户 user1
[root@server01 mysql5.7.17_install]# mysql -uuser1 -p
Enter password:
-- 查看该用户的数据库权限,可以发现基本没有什么权限。如果要操作其他数据库,只能给该用户进行授权
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.00 sec)
授权格式:GRANT 权限1, 权限2... ON 数据库名.表名 TO '用户名'@'主机名';
关键字说明:
1. GRANT 授权关键字
授予用户的权限,如SELECT,INSERT,UPDATE等。如果要授予所的权限则使用ALL
2. 数据库名.表名:
该用户可以操作哪个数据库的哪些表。如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如`.*`
3. '用户名'@'主机名'
给哪个用户授权
具体操作:
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON test.* TO 'user1'@'localhost';
执行如下:
-- 1. 登录 root 用户给 user1 用户设置数据库 test 权限
[root@server01 mysql5.7.17_install]# mysql -uroot -p
-- 设置权限
mysql> GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON test.* TO 'user1'@'localhost';
Query OK, 0 rows affected (0.00 sec)
-- 2.切换登录 user1 用户
[root@server01 mysql5.7.17_install]# mysql -uuser1 -p
-- 查看所有数据库,发现以及有 test 数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
2 rows in set (0.00 sec)
mysql>
GRANT ALL ON *.* TO 'user2'@'%';
执行如下:
-- 1. 登录root用户,给user2用户授权
[root@server01 mysql5.7.17_install]# mysql -uroot -p
mysql> GRANT ALL ON *.* TO 'user2'@'%';
Query OK, 0 rows affected (0.00 sec)
-- 2. 切换登录 user2 用户,查看可以操作所有数据库
[root@server01 mysql5.7.17_install]# mysql -uuser2 -p
mysql> show databases;
+---------------------------+
| Database |
+---------------------------+
| information_schema |
| assetinfo |
| book |
| dailyfresh |
| db1 |
| db3 |
| flask_ex |
| ihome |
| jumpserver |
| msg_box |
| mysql |
| performance |
| performance_schema |
| performance_visualization |
| sys |
| test |
| testdb |
| userdemo |
+---------------------------+
18 rows in set (0.00 sec)
mysql>
REVOKE 权限1, 权限2... ON 数据库.表名 FROM '用户名'@'主机名';
具体操作:
“撤销之后, user1用户需要下次登录才生效 ”
REVOKE ALL ON test.* FROM 'user1'@'localhost';
image-20210207234821114
SHOW GRANTS FOR '用户名'@'主机名';
具体操作:
mysql> SHOW GRANTS FOR 'user2'@'%';
+--------------------------------------------+
| Grants for user2@% |
+--------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'user2'@'%' |
+--------------------------------------------+
1 row in set (0.00 sec)
mysql>
DROP USER '用户名'@'主机名';
具体操作:
mysql> DROP USER 'user2'@'%';
Query OK, 0 rows affected (0.00 sec)
image-20210207235509981
mysqladmin -uroot -p password 新密码( 新密码不需要加上引号)
“注意:需要在未登陆MySQL的情况下操作。 ”
具体操作:
mysqladmin -uroot -p password 新密码
输入老密码
执行如下:
-- 1.修改user1的密码为 321@abcABC
[root@server01 ~]# mysqladmin -uuser1 -p password '321@abcABC'
Enter password: -- 2.输入旧密码
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
[root@server01 ~]#
-- 3.使用新密码登录
[root@server01 ~]# mysql -uuser1 -p'321@abcABC'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.7.17-log MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
set password for '用户名'@'主机名' = password('新密码');
“注意:需要在登陆MySQL的情况下操作。 ”
具体操作:
mysql> set password for 'user1'@'localhost' = password('456@abcABC');
Query OK, 0 rows affected, 1 warning (0.00 sec)
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有