暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL基础SQL-DCL语句-创建用户-授权用户-撤销授权-查看权限-删除用户-修改用户密码

海洋的渔夫 2021-03-08
733

8. 基础SQL-DCL语句-创建用户-授权用户-撤销授权-查看权限-删除用户-修改用户密码

我们一般默认使用的都是root用户,超级管理员,拥有全部的权限。但是,一个公司里面的数据库服务器上面可能同时运行着很多个项目的数据库。所以,我们应该可以根据不同的项目建立不同的用户,分配不同的权限来管理和维护数据库。

1. 创建用户

语法:

# 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)

2. 授权用户

用户创建之后,基本没什么权限!需要给用户授权

-- 登录用户 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. '用户名'@'主机名'
  给哪个用户授权

具体操作:

2.1 首先登录 root 用户,给 user1 用户分配对test这个数据库操作的权限

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> 

2.2 登录 root 用户,给user2用户分配对所有数据库操作的权限

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> 

3. 撤销授权

REVOKE  权限1, 权限2... ON 数据库.表名 FROM '用户名'@'主机名';

具体操作:

撤销user1用户对test操作的权限

撤销之后, user1用户需要下次登录才生效

REVOKE ALL ON test.* FROM 'user1'@'localhost';

image-20210207234821114

4. 查看权限

SHOW GRANTS FOR '用户名'@'主机名';

具体操作:

  • 查看user2用户的权限
mysql> SHOW GRANTS FOR 'user2'@'%';
+--------------------------------------------+
| Grants for user2@%                         |
+--------------------------------------------+
GRANT ALL PRIVILEGES ON *.* TO 'user2'@'%' |
+--------------------------------------------+
1 row in set (0.00 sec)

mysql> 

5. 删除用户

DROP USER '用户名'@'主机名';

具体操作:

  • 删除user2
mysql> DROP USER 'user2'@'%';
Query OK, 0 rows affected (0.00 sec)

image-20210207235509981

6. 修改用户密码

6.1 使用 mysqladmin 修改 管理员 或者 普通用户 密码

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: [WarningUsing 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> 

6.2 登录root用户,修改普通用户密码

set password for '用户名'@'主机名' = password('新密码');

注意:需要在登陆MySQL的情况下操作。

具体操作:

mysql> set password for 'user1'@'localhost' = password('456@abcABC');
Query OK, 0 rows affected, 1 warning (0.00 sec)


最后修改时间:2021-03-08 16:45:03
文章转载自海洋的渔夫,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论