0基础linux运维教程 mysql权限管理

很多学习linux的同学都必须要对mysql精通,对于mysql的操作更是需要信手捏来,那么本章节主要介绍的mysql的权限管理及权限相关操作。

## 一 mysql库下的授权表

linux系统的用户作用是:

- 1、登陆系统

- 2、管理系统文件

一样的道理,mysql数据库管理软件用户的则作用是:

- 1、登陆MySQL数据库

- 2、管理库与表等数据库对象

mysql数据库管理软件将权限信息都存放于mysql库下,该库下有一系列授权表,权限信息都存放于这一系列表中,我们挑几个重点介绍一下

mysql库下的授权表及其放行权限的范围

- 1、mysql.user

  针对所有数据、所有库下所有表、以及表下的所有字段

- 2、msyql.db

  只针对某一数据库下的所有表,以及表下的所有字段

- 3、tables_priv

  只针对某一张表、以及该表下的所有字段

- 4、columns_priv

  只针对某一个字段

例如:如下图,权限表放行权限的范围

```

mysql.user:针对库db1,db2及其包含的所有

db:只针对库例如db1,及其db1包含的所有

tables_priv:只针对db1.table1,及其该表包含的所有

columns_prive:只针对db1.table1.column1,只放行该字段

```

![img](.\img\11.png)

## 二 权限相关操作

### 2.1 创建\查询\删除用户

创建用户语法

```

create user '用户名'@'主机' identified by '密码';

```

```

create user 'egon'@'1.1.1.1' identified by '123';

create user 'egon'@'192.168.1.%' identified by '123';

create user 'egon'@'%' identified by '123';

```

查询用户

```

mysql> select user,host from mysql.user;

+------+-----------+

| user | host      |

+------+-----------+

| root | 127.0.0.1 |

| root | ::1      |

|      | db04      |

| root | db04      |

|      | localhost |

| root | localhost |

+------+-----------+

```

删除用户

```

mysql> drop user root@'::1';

Query OK, 0 rows affected (0.01 sec)

mysql> drop user ''@db04;

Query OK, 0 rows affected (0.00 sec)

mysql> drop user 'root'@db04;

Query OK, 0 rows affected (0.00 sec)

mysql> drop user ''@localhost;

Query OK, 0 rows affected (0.00 sec)

```

修改密码

```

# 方式1

mysqladmin -uroot -p123 password '1'

# 方式2

update mysql.user set password=password('123') where user='root' and host='localhost';

# 方式3

set password=password('1');  修改当前用户的密码

# 方式4

grant all on *.* to 'root'@'localhost' identified by '123';

```

### 2.2 授权

MySQL 赋予用户权限命令的简单格式可概括为:

```

grant 权限 on 数据库对象 to 用户

```

注意:grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。

查看帮助

```

mysql> help grant

```

权限:对文件夹,对文件,对文件某一字段的权限

常用权限有:select, insert, update, delete

all可以代表除了grant之外的所有权限

MySQL 的 权限,分别可以作用在多个层次上

- 1、所有库的所有表

- 2、单库下的所有表(最常用的授权级别)

- 3、单表下的所有列

- 4、单列权限:企业业里称单列授权为 脱敏,即脱离敏感信息,涉及到敏感信息一定要脱敏

  ```

  例如

  授予vip账号对某一表下所有列的查询权限

  而授予非vip账号对某一表下的某一列的查询权限

  ```

- 5、针对存储过程的权限

- 6、针对函数的权限

举例如下

```

#(1)针对所有库的所有表:*.*

grant select on *.* to 'egon1'@'localhost' identified by '123';

只在user表中可以查到egon1用户的select权限被设置为Y

#(2)针对某一数据库:db1.*

grant select on db1.* to 'egon2'@'%' identified by '123';

只在db表中可以查到egon2用户的select权限被设置为Y

#(3)针对某一个表:db1.t1

grant select on db1.t1 to 'egon3'@'%' identified by '123'; 

只在tables_priv表中可以查到egon3用户的select权限

#(4)针对某一个字段:

mysql> select * from t3;

+------+-------+------+

| id  | name  | age  |

+------+-------+------+

|    1 | egon1 |  18 |

|    2 | egon2 |  19 |

|    3 | egon3 |  29 |

+------+-------+------+

grant select (id,name),update (age) on db1.t3 to 'egon4'@'localhost' identified by '123';

#可以在tables_priv和columns_priv中看到相应的权限

mysql> select * from tables_priv where user='egon4'\G

*************************** 1. row ***************************

      Host: localhost

        Db: db1

      User: egon4

Table_name: t3

    Grantor: root@localhost

  Timestamp: 0000-00-00 00:00:00

Table_priv:

Column_priv: Select,Update

row in set (0.00 sec)

mysql> select * from columns_priv where user='egon4'\G

*************************** 1. row ***************************

      Host: localhost

        Db: db1

      User: egon4

Table_name: t3

Column_name: id

  Timestamp: 0000-00-00 00:00:00

Column_priv: Select

*************************** 2. row ***************************

      Host: localhost

        Db: db1

      User: egon4

Table_name: t3

Column_name: name

  Timestamp: 0000-00-00 00:00:00

Column_priv: Select

*************************** 3. row ***************************

      Host: localhost

        Db: db1

      User: egon4

Table_name: t3

Column_name: age

  Timestamp: 0000-00-00 00:00:00

Column_priv: Update

rows in set (0.00 sec)

#(5)作用在存储过程上:

use db1;

delimiter //

create procedure p1()

BEGIN

    select * from blog;

    INSERT into blog(name,sub_time) values("xxx",now());

END //

delimiter ;

show procedure status; -- 查看到db1下有一个名为p1的存储过程

grant execute on procedure db1.p1 to 'dba'@'localhost';

#(6)作用在函数上:

delimiter //

create function f1(

    i1 int,

    i2 int)

returns int

BEGIN

    declare num int;

    set num = i1 + i2;

    return(num);

END //

delimiter ;

show function status; -- 查看到db1下有一个名为f1的函数

grant execute on function db1.f1 to 'dba'@'localhost';

测试:

[root@localhost ~]# mysql -udba -p

mysql> select db1.f1(1,2);

```

all可以代表除了grant之外的所有权限,可以用with带上grant,授权一个超级管理员

```

grant all on *.* to egon@'%' identified by '123' with grant option;

查看mysql.user表中可以查到egon用户的grant权限也被设置为Y

```

### 2.3 查看授权

```

#1.授权:

mysql> grant all on *.* to root@'%' identified by '123';

#2.查看用户权限

查看当前用户(自己)权限:

mysql> show grants;

查看其他 MySQL 用户权限:

mysql> show grants for root@'%';

```

### 2.4 撤销权限。

revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:

```

grant  all on *.* to  dba@localhost;

revoke all on *.* from dba@localhost;

revoke select on db1.* from 'egon'@'%';

```

### 2.5 扩展授权

```

max_queries_per_hour:一个用户每小时可发出的查询数量

max_updates_per_hour:一个用户每小时可发出的更新数量

max_connections_per_hour:一个用户每小时可连接到服务器的次数

max_user_connections:允许同时连接数量

mysql> grant all on *.* to test@'%' identified by '123' with max_user_connections 1;

# 测试:

mysql -utest -p123 -h192.168.15.100

不要用-hlocalhost,它代表通过本地套接字链接

```

### 2.6 针对不同角色权限分配

#### 2.6.1 针对普通用户

grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。

```

grant select on testdb.* to common_user@'%'

grant insert on testdb.* to common_user@'%'

grant update on testdb.* to common_user@'%'

grant delete on testdb.* to common_user@'%'

```

或者,用一条 MySQL 命令来替代:

```

grant select, insert, update, delete on testdb.* to common_user@'%'

```

#### 2.6.2 针对开发人员

grant 数据库开发人员,创建表、索引、视图、存储过程、函数。。。等权限,具体操作如下

1、grant 创建、修改、删除 MySQL 数据表结构权限。

```

grant create on testdb.* to developer@'192.168.0.%';

grant alter  on testdb.* to developer@'192.168.0.%';

grant drop  on testdb.* to developer@'192.168.0.%';

```

2、grant 操作 MySQL 外键权限。

```

grant references on testdb.* to developer@'192.168.0.%';

```

3、grant 操作 MySQL 临时表权限。

```

grant create temporary tables on testdb.* to developer@'192.168.0.%';

```

4、grant 操作 MySQL 索引权限。

```

grant index on testdb.* to developer@'192.168.0.%';

```

5、grant 操作 MySQL 视图、查看视图源代码 权限。

```

grant create view on testdb.* to developer@'192.168.0.%';

grant show view on testdb.* to developer@'192.168.0.%';

```

6、grant 操作 MySQL 存储过程、函数 权限。

```

grant create routine on testdb.* to developer@'192.168.0.%'; -- now, can show procedure status

grant alter  routine on testdb.* to developer@'192.168.0.%'; -- now, you can drop a procedure

grant execute        on testdb.* to developer@'192.168.0.%';

```

#### 2.6.3 针对普通DBA

grant 普通 DBA 管理某个 MySQL 数据库的权限。

```

grant all privileges on testdb.* to dba@'localhost'

```

其中,关键字 “privileges” 可以省略。

#### 2.6.4 针对高级DBA

grant 高级 DBA 管理 MySQL 中所有数据库的权限。

```

grant all on *.* to dba@'localhost'

```

### 2.7 在企业中权限的设定

```

#开发人员说:请给我开一个用户

#1.首先进行沟通

1.你需要对哪些库、表进行操作

2.你从哪里连接过来

3.用户名有没有要求

4.密码要求

5.你要使用多长时间

6.发邮件

#2.一般给开发创建用户权限,建议不给delete权限

grant select,update,delete,insert on *.* to egon@'10.0.0.%'' identified by '123';

#3.注意:

开发图方便想要root用户,这玩意,谁给谁背锅,自己斟酌,可以考虑让部门老大来给

```

你可能感兴趣的:(0基础linux运维教程 mysql权限管理)