用户权限管理
用户权限管理:在不同的项目中给不同的角色(开发者)不同的操作权限,为了保证数据库数据的安全。
通常,一个用户的密码不会长期不变,所以需要经常性的变更数据库用户密码来确保用户本身安全(mysql客户端用户)
1、用户管理
Mysql需要客户端进行连接认证才能进行服务器操作:需要用户信息。Mysql中所有的用户信息都是保存在mysql数据库下的user表中。
mysql> select * from mysql.user\G
默认的,在安装Mysql的时候,如果不选择创建匿名用户,那么意味着所有的用户只有一个:root超级用户
mysql> desc mysql.user;
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(255) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
在mysql中,对应的用户管理中,是由对应的Host和User共同组成主键来区分用户。
User:代表用户的用户名
Host:代表本质是允许访问的客户端(IP或者主机地址)。如果host使用%代表所有的用户(客户端)都可以访问。
2、创建用户
1、 直接使用root用户在mysql.user表中插入记录(不推荐)
2、 专门创建用户的SQL指令
基本语法:create user 用户名 identified by ‘明文密码’;
用户:用户名@主机地址
主机地址:’’ / ‘%’
mysql> create user 'user1'@'%' identified by '123456';
Query OK, 0 rows affected (0.07 sec)
查看mysql.user表中是否存在新增的用户
*************************** 2. row ***************************
Host: %
User: user1
简化版创建用户(谁都可以访问,不需要密码)
mysql> create user user2;
#不限定客户端IP,没有密码的用户。
当用户创建完成之后,用户是否可以使用?
C:\mysql\mysql-8.0.22-winx64\bin>mysql -uuser2
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 29
Server version: 8.0.22 MySQL Community Server - GPL
Copyright (c) 2000, 2020, 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>
3、删除用户
注意:mysql中user是带着host本身的(具有唯一性)
基本语法:drop user 用户名@host;
mysql> drop user user2;
Query OK, 0 rows affected (0.05 sec)
4、修改用户密码
Mysql中提供了多种修改的方式:基本上都必须使用对应提供的一个系统函数:password(),需要靠该函数对密码进行加密处理。
1、 使用专门的修改密码的指令
基本语法:set password for 用户 = password(‘新的明文密码’);
2、 使用更新语句update来修改表
基本语法:update mysql.user set password = password(‘新的明文密码’) where user = ‘’ and host= ‘’;
3、mysql 8.0 之后的版本
ALTER USER 'user1'@'%' IDENTIFIED WITH mysql_native_password BY 'mysql@123';
Query OK, 0 rows affected (0.06 sec)
5、权限管理
在mysql中将权限管理分为三类:
1、 数据权限:增删改查(select\update\delete\insert)
2、 结构权限:结构操作(create\drop)
3、 管理权限:权限管理(create user\grant\revoke):通常只给管理员如此权限
5.1 授予权限:grant
将权限分配给指定的用户
基本语法:grant 权限列表 on 数据库/.表名/ to 用户;
权限列表:使用逗号分隔,但是可以使用all privileges代表全部权限
数据库.表名:可以是单表(数据库名字.表名),可以是具体某个数据库(数据库.),也可以整库(.*)
mysql> grant select on mydatabase_backup.class to 'user1'@'%';
Query OK, 0 rows affected (0.07 sec)
登陆user1用户查看:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydatabase_backup |
+--------------------+
2 rows in set (0.05 sec)
mysql> use mydatabase_backup;
Database changed
mysql> show tables;
+-----------------------------+
| Tables_in_mydatabase_backup |
+-----------------------------+
| class |
+-----------------------------+
1 row in set (0.04 sec)
5.2 取消权限:revoke
权限回收:将权限从用户手中收回
基本语法:revoke 权限列表/all privileges on 数据库/.表/ from 用户;
mysql> revoke all privileges on mydatabase_backup.class from 'user1'@'%';
Query OK, 0 rows affected (0.04 sec)
登陆user1用户查看:
mysql> show tables;
+-----------------------------+
| Tables_in_mydatabase_backup |
+-----------------------------+
| class |
+-----------------------------+
1 row in set (0.04 sec)
mysql> show tables;
ERROR 1044 (42000): Access denied for user 'user1'@'%' to database 'mydatabase_backup'
mysql>
5.3 刷新权限:flush
Flush:刷新,将当前对用户的权限操作,进行一个刷新,将操作的具体内容同步到对应的表中。
基本语法:flush privileges;
mysql> flush privileges;
Query OK, 0 rows affected (0.05 sec)
mysql>
6、密码丢失的解决方案
如果忘记了root用户密码,就需要去找回或者重置root用户密码
1、 停止服务
net stop mysql
2、 重新启动服务:mysqld.exe –skip-grant-tables //启动服务器但是跳过权限
mysqld.exe --skip-grant-tables
3、 当前启动的服务器没有权限概念:非常危险,任何客户端,不需要任何用户信息都可以直接登录,而且是root权限:新开客户端,使用mysql.exe登录即可
4、 修改root用户的密码:指定 用户名@host
update mysql.user set password = password('root') where user='root' and host='localhost';
5、赶紧关闭服务器,重启服务。
net start mysql
第二种:
1.服务端:
mysqld --console --skip-grant-tables --shared-memory,
2.客户端:
mysql -u root -p
密码置空:update mysql.user set authentication_string='' where user="root";
刷新:flush privileges;
3.客户端:
设置密码:ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';
加密规则和密码同时改.ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin'; OK
4.查看
select host,user,user password,plugin,authentication_string from mysql.user;
最后更新于
这有帮助吗?