MariaDB用户权限表


安装MariaDB会自动安装一个名为MySQL的数据库,MySQL数据库下面存储的都是权限表。用户登录以后,MariaDB数据库系统会根据这些权限表的内容为每个用户赋予相应权限,有几个权限表非常重要。

user表

user表是MariaDB数据库最重要的一个权限表。查看表的基本结构可以看到,user表有39个字段,这些字段大致分为4类,分别是用户列、权限列、安全列和资源控制列。

用户列

用户列包括

| Host                   | char(60)                          | NO   | PRI |          |       |
| User                   | char(80)                          | NO   | PRI |          |       |
| Password               | char(41)                          | NO   |     |          |       |

用户登录时首先判断这三个字段,只有三个字段同时匹配,MariaDB数据库才会允许登录。

权限列

权限列包含所有以_priv结尾的字段,这些字段决定用户的权限,既包括查询权限、修改权限等普通权限,也包括关闭服务的权限、超级权限。普通权限用于操作数据库,高级管理权限用于对数据库进行管理。
这些字段的值只有Y和N。Y表示该权限可以用于所有数据库,N表示该权限不能用于所有数据库。

| 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        |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N        |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N        |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N        |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N        |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N        |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N        |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N        |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N        |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N        |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N        |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N        |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N        |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N        |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N        |       |

有些权限字段应该特别注意:

  • Grant_priv字段表示是否拥有GRANT权限
  • Shutdown_priv字段表示是否拥有停止MariaDB服务的权限
  • Super_priv字段表示是否拥有超级权限
  • Execute_priv字段表示是否拥有EXECUTE权限,拥有EXECUTE权限可以执行存储过程和函数

安全列

user表的安全列有4个字段:

| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |          |       |
| ssl_cipher             | blob                              | NO   |     | NULL     |       |
| x509_issuer            | blob                              | NO   |     | NULL     |       |
| x509_subject           | blob                              | NO   |     | NULL     |       |

ssl用于加密;x509标准可以用来识别用户。
我们可以查看是否具有ssl功能:

show variables like 'have_openssl';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl  | YES   |
+---------------+-------+

资源控制列

user表的资源控制列有:

| max_questions          | int(11) unsigned                  | NO   |     | 0        |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0        |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0        |       |
| max_user_connections   | int(11)                           | NO   |     | 0        |       |
  • max_questions:每小时可以允许执行多少次查询
  • max_updates:每小时可以允许执行多少次更新
  • max_connections:每小时可以建立多少连接
  • max_user_connections:单个用户可以同时具有的连接数

这些字段的默认值是0,表示没有限制。

db表和host表

db表和host表也是MariaDB数据库中非常重要的权限表,db表和host表存储了数据库用户对一个数据库的权限,一般我们经常用db表而很少用host表。db表和host表的字段大致能分成两列,用户列和权限列。
host表是db表的扩展,如果在db表中找不到host字段的值,就需要去host表中找,但是一般不会用到host表,有db表就足够了。

用户列

db表的用户列有三个字段:

| Host                  | char(60)      | NO   | PRI |         |       |
| Db                    | char(64)      | NO   | PRI |         |       |
| User                  | char(80)      | NO   | PRI |         |       |

这三个字段分别表示主机名、数据库名和用户名。

host表的用户列有两个字段:

| Host                  | char(60)      | NO   | PRI |         |       |
| Db                    | char(64)      | NO   | PRI |         |       |

这两个字段分别表示主机名和数据库名。

权限列

db表和host表的权限列几乎一样,只是多了Create_routine_priv和Alter_routine_priv两个字段,这两个字段决定用户是否具有创建和修改存储过程的权限。

| 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       |       |
| 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       |       |
| Create_tmp_table_priv | enum('N','Y') | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y') | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y') | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y') | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y') | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y') | NO   |     | N       |       |
| Execute_priv          | enum('N','Y') | NO   |     | N       |       |
| Event_priv            | enum('N','Y') | NO   |     | N       |       |
| Trigger_priv          | enum('N','Y') | NO   |     | N       |       |

user表中的权限针对所有数据库,db表和host表中的权限对其进行补充。如果某个用户只有查询test数据库的权限,nm在user表中Select_priv字段取值为N,而这个权限会记录在db表中。

tables_priv表和columns_priv表

tables_priv表可以对单个表进行权限设置,columns_priv表可以对单个数据列进行权限设置。

tables_priv表

tables_priv表包含8个字段:

| Host        | char(60)                                                                                                                          | NO   | PRI |                     |                               |
| Db          | char(64)                                                                                                                          | NO   | PRI |                     |                               |
| User        | char(80)                                                                                                                          | NO   | PRI |                     |                               |
| Table_name  | char(64)                                                                                                                          | NO   | PRI |                     |                               |
| Grantor     | char(141)                                                                                                                         | NO   | MUL |                     |                               |
| Timestamp   | timestamp                                                                                                                         | NO   |     | current_timestamp() | on update current_timestamp() |
| Table_priv  | set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') | NO   |     |                     |                               |
| Column_priv | set('Select','Insert','Update','References')                                                                                      | NO   |     |                     |                               |

前4个字段分别表示主机名、数据库名、用户名和表名。Table_priv表示对表进行操作的权限,这些权限包括Select、Insert、Update、Delete、Create、Drop、Grant、References、Index、Alter、Create View、Show view和Trigger。Column_priv表示对表中的数据列进行操作的权限,这些权限包括Select、Insert、Update和References。Timestamp表示修改权限的时间。Grantor表示权限是谁设置的。

columns_priv表

columns_priv表包括7个字段:

| Host        | char(60)                                     | NO   | PRI |                     |                               |
| Db          | char(64)                                     | NO   | PRI |                     |                               |
| User        | char(80)                                     | NO   | PRI |                     |                               |
| Table_name  | char(64)                                     | NO   | PRI |                     |                               |
| Column_name | char(64)                                     | NO   | PRI |                     |                               |
| Timestamp   | timestamp                                    | NO   |     | current_timestamp() | on update current_timestamp() |
| Column_priv | set('Select','Insert','Update','References') | NO   |     |                     |                               |

这里比tables_priv表多了Column_name,表示可以对那些数据列进行操作、

MariaDB中权限分配是按照user表、db表、tables_priv表和columns_priv表的顺序进行的,数据库系统先判断user表中值是否为Y,如果是Y就不再检查后面的表,如果是N就继续检查后面的表

procs_priv表

procs_priv表可以对存储过程和存储函数进行权限设置。
procs_priv表包括8个字段:

| Host         | char(60)                               | NO   | PRI |                     |                               |
| Db           | char(64)                               | NO   | PRI |                     |                               |
| User         | char(80)                               | NO   | PRI |                     |                               |
| Routine_name | char(64)                               | NO   | PRI |                     |                               |
| Routine_type | enum('FUNCTION','PROCEDURE')           | NO   | PRI | NULL                |                               |
| Grantor      | char(141)                              | NO   | MUL |                     |                               |
| Proc_priv    | set('Execute','Alter Routine','Grant') | NO   |     |                     |                               |
| Timestamp    | timestamp                              | NO   |     | current_timestamp() | on update current_timestamp() |

前三个字段表示主机名、数据库名和用户名。Routine_name表示存储过程或函数的名称。Routine_type表示类型,这一字段的两个值,FUNCTION表示这是一个存储函数,PROCEDURE表示这是一个存储过程。Proc_priv表示拥有的权限。Timestamp存储更新时间。Grantor存储权限是谁设置的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值