MySQL原始碼學習 MySQL中禁止跨庫訪問的實現

2021-08-26 07:12:59 字數 1088 閱讀 2354

先說一下這裡「跨庫」的意思:當前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)

all_tables= all_tables->next_global; }

說明: only_self_access

是新增的配置,表示不允許跨表訪問。

thd.->

lex->query_tables

是乙個鍊錶,依次存放當前sql

語句需要訪問的表的鍊錶(table_list),

每個表的db

欄位為該錶所在的庫。

每個表的next_global

指向該語句訪問的下乙個表。(注意不是next_local)

mysql原始碼公升級 MySQL原始碼公升級

mysql原始碼公升級 公升級的方法一般有兩類 1.利用mysqldump來直接匯出sql檔案,匯入到新庫中,這種方法是最省事兒的,也是最保險的,缺點的話,也顯而易見,大庫的mysqldump費時費力。2.直接替換掉mysql的安裝目錄和my.cnf,利用mysql upgrade 來完成系統表的公...

原始碼安裝 mysql 原始碼安裝 mysql

yum y install ncurses devel gcc bzip2 bison 安裝解壓命令 安裝命令 wget http 複製的鏈結.解壓命令 tar xf cmake檔案.tar 編譯工具cmake安裝 cmake命令版本 2.8以上 將資料夾放到指定目錄整理 mv usr local ...

mysql 原始碼文件 mysql原始碼安裝官方文件

以下是安裝mysql原始碼分發版的更詳細的描述 1.為mysqld增加乙個登入使用者和組 2.shell groupadd mysql3.shell useradd g mysql mysql 這些命令將增加mysql組和mysql使用者。不同版本的unix中,useradd和groupadd的語法...