目录

1、创建数据库

2、MySQL添加用户、删除用户、更改密码及授权

2.1、添加用户

2.2、删除用户

2.3、更改密码

2.4、授权

2.5、查看用户权限

 3、拓展学习

3.1、MySQL数据库如何定义账号

3.2、MySQL常见用户权限

3.3、查看当前数据库所有用户权限

3.4、回收权限

3.5、查看用户权限

3.6、删除用户

3.7、修改密码

3.8、重置root密码

3.9、如何保证数据库账号安全?

mysql.user表字段解析


MySQL安装启动成功后,首先我们需要创建数据库,然后创建一个用户去操作这个数据库。

1、创建数据库

// 登录MySQL客户端:mysql -h [ip] -u[username] -p[password]
C:\Users\Administrator>mysql -h 127.0.0.1 -uroot -p"root"
// 创建数据库,指定字符集
mysql> CREATE DATABASE `apollodb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
// 查看数据库是否创建成功
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| apollodb           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

//如果库名写错了,当然如果库名创建错了,也可以使用命令进行删除,然后重新创建:
mysql> drop database apollodb;

2、MySQL添加用户、删除用户、更改密码及授权

2.1、添加用户

跟以往版本不同,MySQL5.7 mysql.user表没有password字段,这个字段改成了 authentication_string;

这里我们使用命令进行创建用户:

// 创建了一个名为:dev001 密码为:123456 的用户	
mysql> create user 'dev001'@'localhost' identified by '123456';
// 注意:此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。
// 如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录。
// 也可以指定某台机器ip可以远程登录。
// ##### 实际开发用“%”方式 #####
mysql> create user 'dev001'@'%' identified by '123456';
  • username:你将创建的用户名。
  • host:指定该用户在哪个主机上可以登陆,此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录,如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录;也可以指定某台机器可以远程登录。
  • password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器。

2.2、删除用户

// 删除用户“dev001”
mysql> drop user dev001@localhost ;
// 若创建的用户允许任何电脑登陆,删除用户如下
mysql> drop user dev001@'%';

2.3、更改密码

// 方法1,密码实时更新;修改用户“dev001”的密码为“1qaz@WSX”
mysql> set password for dev001=password('1qaz@WSX');

// 方法2,需要刷新;修改用户“dev001”的密码为“1qaz@WSX”
mysql> update mysql.user set password=password('1qaz@WSX') where user='dev001'
// 刷新权限
mysql> flush privileges;

2.4、授权

// 策略一:授予用户kvstore通过外网IP对数据库“apollodb”的全部权限
mysql> grant all privileges on apollodb.* to 'dev001'@'%' identified by '1qaz@WSX';
// 刷新权限
mysql> flush privileges;

// 策略二:授予用户“dev001”通过外网IP对于该数据库“apollodb”中表的创建、修改、删除权限,以及表数据的增删查改权限
mysql> grant create,alter,drop,select,insert,update,delete on apollodb.* to dev001@'%';
// 刷新权限
mysql> flush privileges;

// 策略三:授权dev001用户拥有所有数据库的某些权限
mysql> grant select,delete,update,create,drop on *.* to dev001@'%' identified by '1qaz@WSX';
// 刷新权限
mysql> flush privileges;

privileges:用户的操作权限,如select,delete,update,create,drop等;如果要授予所有的权限可使用all;% 表示对所有非本地主机授权,不包括localhost。

2.5、查看用户权限

// 查看用户“dev001”
mysql> show grants for dev001;
+------------------------------------------------------+
| Grants for dev001@%                                  |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'dev001'@'%'                   |
| GRANT ALL PRIVILEGES ON `apollodb`.* TO 'dev001'@'%' |
+------------------------------------------------------+
2 rows in set (0.00 sec)

// MySQL通过权限表来控制用户对数据库的访问,权限表放在mysql数据库中,常见的有user表。
mysql> use mysql;
Database changed
// 查看用户权限
mysql> select user,host from user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| dev001        | %         |
| dev001        | localhost |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
5 rows in set (0.02 sec)

mysql>

注意:修改完权限以后 一定要刷新服务,或者重启服务,刷新服务用:flush privileges;

最后用MySQL的dev001用户登录查看是否有对apollodb数据库的操作权限:

C:\Users\Administrator>mysql -h 192.168.0.200 -udev001 -p"1qaz@WSX"
mysql> mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| apollodb           |
+--------------------+
2 rows in set (0.00 sec)

mysql> show grants for dev001;
+------------------------------------------------------+
| Grants for dev001@%                                  |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'dev001'@'%'                   |
| GRANT ALL PRIVILEGES ON `apollodb`.* TO 'dev001'@'%' |
+------------------------------------------------------+
2 rows in set (0.00 sec)

 3、拓展学习

3.1、MySQL数据库如何定义账号

用户名@可访问控制列表

如文章开头的数据表查询,解析如下:

  • (root, localhost) 表示只可以在部署mysql的服务器上登录;
  • (root, 192.168.1.%) 表示可以在192.168.1网段登录MySQL;
  • (root, %) 表示可以从除了本地外的所有外部主机登录,即允许远程登录;
  • (root, sla01) 表示主机名为sla01可以登陆(可以在/etc/hostname查看sla01代表哪台服务器。

3.2、MySQL常见用户权限

分类

语句

说明

管理员

create user

建立新用户的权限

grant option

为其它用户授权的权限

super

管理服务器的权限

DDL

create

新建数据库,表的权限

alter

修改表结构的权限

drop

删除数据库,表的权限

index

建立删除索引的权限

DML

select

查询表数据的权限

insert

表中插入数据的权限

update

更新表中数据的权限

delete

删除表中数据的权限

execute

执行存储过程的权限

3.3、查看当前数据库所有用户权限

mysql> show privileges;
+-------------------------+---------------------------------------+-------------------------------------------------------+
| Privilege               | Context                               | Comment                                               |
+-------------------------+---------------------------------------+-------------------------------------------------------+
| Alter                   | Tables                                | To alter the table                                    |
| Alter routine           | Functions,Procedures                  | To alter or drop stored functions/procedures          |
| Create                  | Databases,Tables,Indexes              | To create new databases and tables                    |
| Create routine          | Databases                             | To use CREATE FUNCTION/PROCEDURE                      |
| Create temporary tables | Databases                             | To use CREATE TEMPORARY TABLE                         |
| Create view             | Tables                                | To create new views                                   |
| Create user             | Server Admin                          | To create new users                                   |
| Delete                  | Tables                                | To delete existing rows                               |
| Drop                    | Databases,Tables                      | To drop databases, tables, and views                  |
| Event                   | Server Admin                          | To create, alter, drop and execute events             |
| Execute                 | Functions,Procedures                  | To execute stored routines                            |
| File                    | File access on server                 | To read and write files on the server                 |
| Grant option            | Databases,Tables,Functions,Procedures | To give to other users those privileges you possess   |
| Index                   | Tables                                | To create or drop indexes                             |
| Insert                  | Tables                                | To insert data into tables                            |
| Lock tables             | Databases                             | To use LOCK TABLES (together with SELECT privilege)   |
| Process                 | Server Admin                          | To view the plain text of currently executing queries |
| Proxy                   | Server Admin                          | To make proxy user possible                           |
| References              | Databases,Tables                      | To have references on tables                          |
| Reload                  | Server Admin                          | To reload or refresh tables, logs and privileges      |
| Replication client      | Server Admin                          | To ask where the slave or master servers are          |
| Replication slave       | Server Admin                          | To read binary log events from the master             |
| Select                  | Tables                                | To retrieve rows from table                           |
| Show databases          | Server Admin                          | To see all databases with SHOW DATABASES              |
| Show view               | Tables                                | To see views with SHOW CREATE VIEW                    |
| Shutdown                | Server Admin                          | To shut down the server                               |
| Super                   | Server Admin                          | To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.   |
| Trigger                 | Tables                                | To use triggers                                       |
| Create tablespace       | Server Admin                          | To create/alter/drop tablespaces                      |
| Update                  | Tables                                | To update existing rows                               |
| Usage                   | Server Admin                          | No privileges - allow connect only                    |
+-------------------------+---------------------------------------+-------------------------------------------------------+
31 rows in set (0.00 sec)

3.4、回收权限

命令:

revoke [insert,delete,update,select ...] on Databasename.Tablename from 'username'@'ip';

3.5、查看用户权限

命令:

show grants for 'username'@'ip';

3.6、删除用户

drop user 'username'@'ip';

3.7、修改密码

update mysql.user set authentication_string=password('password') where user='root' and host = 'localhost';
flush privileges;
# 新设置用户或更改密码后需用flush

3.8、重置root密码

  1. 修改MySQL的配置文件(my.ini),在[mysqld]下添加一行skip-grant-tables,重启MYSQL后就不需要密码了。
  2. 重启后,mysql -u root -p登入数据库
  3. update mysql.user set authentication_string=password('password') where user='root' and host = 'localhost';
  4. flush privileges;
  5. 删除skip-grant-tables这一行,重新启动 MySQL。

3.9、如何保证数据库账号安全?

  1. 最小权限原则;
  2. 复杂密码强度策略;
  3. 密码过期和限制重用原则;

mysql.user表字段解析

字段名称

说明

权限列

Host

主机名,值为%时表示允许非本地的其它所有机器登录

User

用户名

Select_priv

确定用户是否有权限使用select命令查询数据

Insert_priv

确定用户是否有权限使用insert命令插入数据

Update_priv

确定用户是否有权限使用update命令更新数据

Delete_priv

确定用户是否有权限使用DELETE命令删除数据

Create_priv

确定用户是否有权限使用create命令创建数据库和表

Drop_priv

确定用户是否有权限使用drop命令删除数据库和表

Reload_priv

确定用户是否有权限执行刷新和重新加载MySQL所用各种内部缓存的特定命令,包括日志、权限、主机、查询和表重新加载权限表

Shutdown_priv

确定用户是否有权限关闭MySQL服务器在将此权限提供给root账户之外的任何用户时

Process_priv

确定用户是否有权限通过SHOW PROCESSLIST命令查看其他用户的进程 

File_priv

确定用户是有权限执行SELECT INTO OUTFILE和LOAD DATA INFILE命令

Grant_priv

 

References_priv

 

Index_priv

 

Alter_priv

 

Show_db_priv

 

Super_priv

 

Create_tmp_table_priv

 

Lock_tables_priv

 

Execute_priv

 

Repl_slave_priv

 

Repl_client_priv

 

Create_view_priv

 

Show_view_priv

 

Create_routine_priv

 

Alter_routine_priv

 

Create_user_priv

 

Event_priv

 

Trigger_priv

 

Create_tablespace_priv

 

安全列

ssl_type

支持ssl标准加密安全字段

ssl_cipher

支持ssl标准加密安全字段

x509_issuer

支持x509标准字段

x509_subject

支持x509标准字段

password_expired

密码是否过期。Y:说明该用户密码已过期 N:没有过期

password_last_changed

 

password_lifetime

 

plugin

5.5.7开始,mysql引入plugins以进行用户连接时的密码验证,plugin创建外部/代理用户

authentication_string

通过authentication_string可以控制两者的映射关系,(PAM plugin等,PAM可以支持多个服务名)

 

 

资源控制列

max_questions

每小时允许执行多少次查询:0表示无限制

max_updates

每小时可以执行多少次更新:0表示无限制

max_connections

每小时可以建立的多少次连接:0表示无限制

max_user_connections

单用户可以同时具有的连接数:0表示无限制

account_lock