mysql权限表(控制用户对数据库的访底层实现)

1 权限表的作用

MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库中。MySQL数据库系统会根据这些权限表的内容为每个用户赋予相应的权限。这些权限表中最重要的是user表、db表。除此之外,还有table_priv表、column_priv表和proc_priv表等。在MySQL启动时,服务器将这些数据库表中权限信息的内容读入内存

2 访问控制

正常情况下,并不希望每个用户都可以执行所有的数据库操作。当MySQL允许一个用户执行各种操作时,它将首先核实该用户向MySQL服务器发送的连接请求,然后确认用户的操作请求是否被允许。这个过程称为MySQL中的访问控制过程。MySQL的访问控制分为两个阶段:连接核实阶段请求核实阶段

2.1 连接核实阶段

当用户试图连接MySQL服务器时,服务器基于用户的身份以及用户是否能提供正确的密码验证身份来确定接受或者拒绝连接。即客户端用户会在连接请求中提供用户名、主机地址、用户密码,MySQL服务器接收到用户请求后,会使用user表中的host、userauthentication_string这3个字段匹配客户端提供信息。
服务器只有在user表记录的Host和User字段匹配客户端主机名和用户名,并且提供正确的密码时才接受连接。如果连接核实没有通过,服务器就完全拒绝访问;否则,服务器接受连接,然后进入阶段2等待用户请求

2.2 请求核实阶段

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Repository层访数据库时,我们可以通过拦截器(Interceptor)来拦截数据库访问,从而实现一些额外的功能,例如:日志记录、权限控制、事务管理等。 在Java中,我们可以使用Mybatis提供的拦截器接口Interceptor来实现拦截器。具体的实现步骤如下: 1. 实现Interceptor接口,重写intercept方法,该方法中可以实现拦截器的具体逻辑。 2. 在Mybatis的配置文件中,配置拦截器。 例如,在Mybatis中配置一个日志拦截器,可以将所有的SQL语句及其执行时间记录到日志中,具体实现如下: 1. 实现Interceptor接口,重写intercept方法: ```java public class LogInterceptor implements Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable { // 获取当前执行的SQL语句 MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0]; Object parameter = invocation.getArgs()[1]; BoundSql boundSql = mappedStatement.getBoundSql(parameter); String sql = boundSql.getSql(); // 记录SQL执行时间 long startTime = System.currentTimeMillis(); Object result = invocation.proceed(); long endTime = System.currentTimeMillis(); long time = endTime - startTime; // 将SQL及其执行时间记录到日志中 log.info("SQL:{},执行时间:{}ms", sql, time); return result; } @Override public Object plugin(Object target) { return Plugin.wrap(target, this); } @Override public void setProperties(Properties properties) { } } ``` 2. 在Mybatis的配置文件中,配置拦截器: ```xml <configuration> <plugins> <plugin interceptor="com.example.LogInterceptor"></plugin> </plugins> </configuration> ``` 通过上述配置,我们就可以将LogInterceptor拦截器应用到所有的SQL执行中,实现SQL执行的日志记录功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值