目录

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

 

 

 

 

 

 

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐