用户权限管理
用户权限管理:在不同的项目中给不同的角色(开发者)不同的操作权限,为了保证数据库数据的安全。
通常,一个用户的密码不会长期不变,所以需要经常性的变更数据库用户密码来确保用户本身安全(mysql客户端用户)
用户管理
mysql需要客户端进行连接认证才能进行服务器操作,需要用户信息,mysql中所有的用户信息都是保存在mysql数据库下的user表中。
mysql> select * from mysql.user\G
*************************** 1. row ***************************
Host: localhost
User: root
Password: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
默认的,在安装mysql的时候,如果不选择创建匿名用户,那么意味着所有的用户只有一个:root超级用户
mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
在mysql中,对用户管理中,是由对应的Host和User共同组成主键来区分用户。
User:代表用户的用户名
Host:代表本质是允许访问的客户端(ip或者主机地址),如果host使用%代表所有的用户(客户端)都可以访问
创建用户
理论上讲可以采用两种方式创建用户:
1、直接使用root用户在mysql.user表中插入记录(不推荐)
2、专门创建用户的SQL指令
基本语法:create user 'user_name'@'host' identified by 'password’;
主机地址:可以用''或者'%'来匹配
mysql> create user 'user1'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> select * from mysql.user where user='user1'\G;
*************************** 1. row ***************************
Host: %
User: user1
Password: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
user_name:要创建用户的名字。
host:表示要这个新创建的用户允许从哪台机登陆,如果只允许从本机登陆,则填'localhost',如果允许从远程登陆,则填'%'
password:新创建用户的登陆数据库密码,如果没密码可以不写。
新创建的用户的权限很基本都是N,表示没有权限,因为还要为用户授予权限。
简化版创建用户(谁都可以访问而且不需要密码,通常不会这么做,不安全)
create user ‘user_name';
1、不限定客户端ip
2、没有密码的用户
mysql> create user user123;
Query OK, 0 rows affected (0.00 sec)
mysql> \q;
Bye
-- 登入成功
C:\Users\47876>mysql -u user123
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.53 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> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
2 rows in set (0.00 sec)
删除用户
drop user '用户名'@'主机名’;
-- user123中没权限删除用户
mysql> drop user user123;
ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation
-- 在root中删除则成功
mysql> drop user user123;
Query OK, 0 rows affected (1.55 sec)
修改用户密码
mysql中提供了多种修改的方式,基本上都必须使用对应提供的一个系统函数:password(),需要靠该函数对密码进行加密处理。
1、使用专门的修改密码的指令
基本语法:set password for 用户=password('新的明文密码');
2、使用更新语句update来修改表
基本语法:update mysql.user set password = password('新的明文密码) where user = "" and host ="";
-- 修改密码
mysql> set password for user1=password('654321');
Query OK, 0 rows affected (1.66 sec)
mysql> update mysql.user set password = password('13579') where user = "user1" and host ="%";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0