`
丁林.tb
  • 浏览: 794811 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MySQL源码学习:MySQL中禁止跨库访问的实现

阅读更多

    先说一下这里“跨库”的意思:当前use的是db1, 仍可以使用select * from db2.table1来访问table1表。

这样使得我们需要访问同一个MySQL下的其他表时不需要多一次use,也使得多个库间的表join这样的操作成为可能。

 

 

1、              问题背景

但有些使用场景下是有禁掉这种功能的需求。比如一些开放应用托管服务,一般给一个应用指定使用一种类型的db 多个用户使用相同的应用,但每个用户访问自己的db。由于有复用连接的需求,使得不能给连接的mysqluser作库权限限制。对于指定一个新用户连接后,强行use db来控制其只能在这个db中操作。

这时候如果允许上面说的这种SQL语句,就会导致一个用户可以访问其他用户的数据。

 

2、              简单方案

1)      不允许应用端使用use语句

2)      MySQL里面对于跨表的访问,直接拒绝。

当然如果原意在中间层作SQL解析,然后判断使用的表也行。如果允许改一点MySQL代码可以如下;

  all_tables= thd.-> lex->query_tables;

if (only_self_access)

  {

    while (all_tables)

    {

      if (all_tables->db && thd->db && strcmp(all_tables->db, thd->db)!=0 && strcmp(all_tables->db, INFORMATION_SCHEMA_NAME.str) )

      {

        my_error(ER_DBACCESS_DENIED_ERROR, MYF(0),

                 thd->security_ctx->priv_user, thd->security_ctx->priv_host, all_tables->db);

        DBUG_RETURN(TRUE);

      }

      all_tables= all_tables->next_global;

    }

 

说明: only_self_access是新增的配置,表示不允许跨表访问。

         thd.-> lex->query_tables 是一个链表,依次存放当前SQL语句需要访问的表的链表(table_list)

每个表的db字段为该表所在的库。

每个表的next_global指向该语句访问的下一个表。(注意不是next_local

 

2
3
分享到:
评论

相关推荐

    PHP和MySQL Web开发第4版pdf以及源码

    6.7 在PHP中实现继承 6.7.1 通过继承使用private和protected访问修饰符控制可见性 6.7.2 重载 6.7.3 使用final关键字禁止继承和重载 6.7.4 理解多重继承 6.7.5 实现接口 6.8 类的设计 6.9 编写类代码 6.10 ...

    Linux平台MYSQL安装部署手册

    **二、获取MySQL源码** 由于标签中提到了"源码",我们将采用源码编译的方式进行安装。首先,访问MySQL官方网站(https://dev.mysql.com/downloads/mysql/)下载最新的源码包。解压下载的文件到一个合适的目录,例如 ...

    Linux_RedHat下安装MySQL

    `gcc`是编译器,`openssl-devel`和`cmake`用于构建MySQL源码,`make`是必备的构建工具,`libaio-devel`则是MySQL异步I/O操作所需的库。 接下来,下载MySQL的源代码。你可以从MySQL官方网站或者通过`wget`命令下载。...

    MYSQL图文安装指南

    1. 运行`mysql_secure_installation`命令,可以进一步优化安全性,如删除匿名用户、禁止root远程登录等。 九、MySQL客户端工具 1. MySQL Workbench:官方提供的图形化管理工具,用于数据库设计、管理和开发。 2. ...

    mysql-安装篇

    MySQL是一种广泛使用的开源关系型数据库管理系统,以其高效、稳定和易于管理的特点,深受开发者和企业的喜爱。本篇文章将深入探讨MySQL的安装过程,包括...在使用过程中,不断学习和实践是提升MySQL管理技能的关键。

    计算机软件-编程源码-MYSQL中文手册完全版.zip

    MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),它以其高效、稳定和易于扩展的特性在Web开发领域中占据重要地位。这份“MYSQL中文手册完全版”是开发者和数据库管理员的重要参考资料,提供了全面的MySQL...

    PHP和MySQL WEB开发(第4版)

    6.7 在PHP中实现继承 6.7.1 通过继承使用private和protected访问修饰符控制可见性 6.7.2 重载 6.7.3 使用final关键字禁止继承和重载 6.7.4 理解多重继承 6.7.5 实现接口 6.8 类的设计 6.9 编写类代码 6.10 理解PHP...

    PHP+MYSQL 仿阿里巴巴大型B2B行业网站

    在这个项目中,`.htaccess`可能被用来优化URL结构,实现伪静态,提高SEO友好性。 `index.html`是网站的首页,它通常是用户访问网站时首先看到的页面。在这个B2B网站中,`index.html`可能包含公司的品牌展示、产品...

    通用权限管理的后台源码

    3. 安全配置:源码中可能包含了Spring Security的配置类,定义了哪些URL需要保护,以及对应的访问策略。 四、角色与权限的关系 源码可能使用关系型数据库(如MySQL)存储用户、角色和权限之间的关联。通过Role-...

    Java-SpringBoot的学生在线考试系统毕业设计源码(源代码+论文)

    标题中的“Java-SpringBoot的学生在线考试系统毕业设计源码(源代码+论文)”表明这是一个基于Java编程语言和SpringBoot框架开发的项目,主要用于学生在线考试的毕业设计。这个系统包含完整的源代码和相关的论文文档,...

    运维新手学习手册

    ### 运维新手学习手册知识点概览 #### 1. LAMP(PHP环境配置) - **LAMP**:指的是Linux + Apache + MySQL + PHP组成的Web服务环境。 - **Linux**:作为操作系统基础,提供了安全稳定的运行环境。 - **Apache**...

    php,apache,mysql详细配置

    在`mysql的备份.doc`中,学习如何定期备份数据库至关重要,可以使用`mysqldump`命令进行逻辑备份,或者使用InnoDB引擎的物理备份功能。 数据库的配置在`web的配置.doc`中可能有所提及。你需要创建数据库和对应的...

    基于PHP的自适应各终端懒人网址导航源码.zip

    6. **其他辅助文件**:如robots.txt(搜索引擎爬虫指南),.htaccess(Apache服务器的配置文件,用于URL重写、禁止访问等)。 这个懒人网址导航系统可能具备以下特性: 1. **用户友好**:简洁的界面设计,易于导航...

    PHP仿土巴兔装修门户源码

    7. **安全机制**:`.htaccess`文件通常用于设置Apache服务器的访问规则,可以实现URL重写、防盗链、禁止目录浏览等安全措施。了解基本的Web安全知识,如防止SQL注入、XSS攻击等,对于保护源码和用户数据至关重要。 ...

    超级简单基于spring boot高速公路收费系统的设计与实现.rar(含源码及数据库文件)

    在本项目中,可能使用了Spring Security或者自定义的认证逻辑来实现用户登录和权限分配,确保只有授权的操作员能访问系统。 4. **操作员管理**: 涉及到对系统操作员的信息管理,包括添加、删除、修改操作员信息,...

    iapp开源玩机社区源码 社区论坛系统源码 2024年最美社区源码 社区商城源码 社区源码带手机端.zip

    源码中的关键组件可能包括用户管理模块、论坛板块管理、发帖和回帖功能、搜索功能以及权限控制等。用户管理通常涉及注册、登录、个人信息设置等;论坛板块则允许管理员划分不同的话题领域,如技术讨论、生活分享等;...

    最新PHP短视频流量社群掘金系统源码

    `.htaccess`文件是Apache服务器配置的一部分,用于控制目录级别的访问权限,比如重定向、URL美化、禁止索引等。在这个系统中,它可能被用来优化SEO、保护敏感文件或实现特定的URL路由规则。 `composer.json`和`...

    PHP防红缩短链接网站源码,

    下载说明 : 本站所有资源(包括模板、教程、插件、源码、教程等)仅供学习与参考,请勿用于商业用途。 禁止恶意使用本站资源搭建或从事违法行为,一律使用于者承担。 本站只提供资源下载服务,不保证资源完整可用性...

    在线考试是书里带的源码含数据库

    在线考试系统是一个基于Web的应用程序,它允许用户通过互联网进行...通过对这个源码的学习和分析,不仅可以了解在线考试系统的实现原理,还能加深对C#和.NET Framework 2.0的理解,为今后的Web开发工作积累宝贵经验。

    .net 企业门户网站源码

    在使用提供的".NET 企业门户网站源码"时,请遵循“仅供学习,禁止商用”的原则,尊重知识产权,避免不必要的法律风险。同时,学习过程中应注重理论与实践相结合,不断加深对.NET框架及企业级网站开发的理解。 总结...

Global site tag (gtag.js) - Google Analytics