MySQL從視圖到用戶和權(quán)限管理操作
一:視圖的定義
視圖是?個(gè)虛擬的表,它是基于?個(gè)或多個(gè)基本表或其他視圖的查詢結(jié)果集。視圖本?不存儲(chǔ)數(shù)據(jù),?是通過(guò)執(zhí)?查詢來(lái)動(dòng)態(tài)?成數(shù)據(jù)。??可以像操作普通表?樣使?視圖進(jìn)?查詢、更新和管理。視圖本?并不占?物理存儲(chǔ)空間,它僅僅是?個(gè)查詢的邏輯表?,物理上它依賴于基礎(chǔ)表中的數(shù)據(jù)。
那么該怎么創(chuàng)建視圖呢?跟創(chuàng)建表時(shí)差不多
CREATE VIEW view_name [(column_list)] AS select_statement
二:創(chuàng)建好了那么該如何使用我們的視圖以及視圖的一些操作
例如:查詢用戶的所有信息和考試成績(jī)
select s.id, s.name, s.sno, s.age, s.gender, s.enroll_date, c.id, c.`name`, co.id, co.`name`, sc.id, sc.score from student s, class c, course co, score sc where s.class_id = c.id and sc.student_id = s.id and sc.course_id = co.id order by s.id;

創(chuàng)建視圖,在select中使?別名
create view v_student_socre as select s.id, s.name, s.sno, s.age, s.gender, s.enroll_date, c.id as class_id, c.`name` as class_name, co.id as course_id, co.`name` as course_name, sc.id as score_id, sc.score from student s, class c, course co, score sc where s.class_id = c.id and sc.student_id = s.id and sc.course_id = co.id order by s.id;
創(chuàng)建視圖,指定結(jié)果集中的列名
create view v_student_socre_v1 (id, name, sno, age, gender, enroll_date, class_id, class_name, course_id, course_name, score_id, score) as select s.id, s.name, s.sno, s.age, s.gender, s.enroll_date, c.id, c.`name`, co.id, co.`name`, sc.id, sc.score from student s, class c, course co, score sc where s.class_id = c.id and sc.student_id = s.id and sc.course_id = co.id;
最后查詢視圖
select * from v_student_socre;

select * from v_student_socre_v1;

但是要注意的是通過(guò)真實(shí)表修改數(shù)據(jù),會(huì)影響視圖
當(dāng)我們修改唐三藏的JAVA成績(jī)?yōu)?9分

我們?cè)俅尾榭匆晥D時(shí),發(fā)現(xiàn)唐三藏這條記錄已被修改
同樣的是通過(guò)視圖修改數(shù)據(jù)也會(huì)影響基表
當(dāng)我們修改唐三藏的計(jì)算機(jī)?絡(luò)成績(jī)?yōu)?9分
update v_student_socre set score = 99 where score_id = 3;
可以發(fā)現(xiàn)更新失敗,因?yàn)閯?chuàng)建視圖時(shí)使?了order by 語(yǔ)句

小編整理了視圖修改會(huì)受到影響的點(diǎn)
- 創(chuàng)建視圖時(shí)使?聚合函數(shù)的視圖
- 創(chuàng)建視圖時(shí)使? DISTINCT
- 創(chuàng)建視圖時(shí)使? GROUP BY 以及 HAVING ?句
- 創(chuàng)建視圖時(shí)使? UNION 或 UNION ALL
- 查詢列表中使??查詢
- 在FROM?句中引?不可更新視圖
你要?jiǎng)h除視圖的話可以使用
drop view view_name;
相信很多人很期待那么視圖有哪些優(yōu)點(diǎn)呢?我將一一列舉
視圖的優(yōu)點(diǎn)
- 簡(jiǎn)單性:視圖可以將復(fù)雜的查詢封裝成?個(gè)簡(jiǎn)單的查詢。例如,針對(duì)?個(gè)復(fù)雜的多表連接查詢,可
以創(chuàng)建?個(gè)視圖,??只需查詢視圖??需了解底層的復(fù)雜邏輯。 - 安全性:通過(guò)視圖,可以隱藏表中的敏感數(shù)據(jù)。例如,?個(gè)系統(tǒng)的??表中,可以創(chuàng)建?個(gè)不包含
密碼列視圖,普通??只能訪問(wèn)這個(gè)視圖,?不能訪問(wèn)原始表。 - 邏輯數(shù)據(jù)獨(dú)?性:視圖提供了?種邏輯數(shù)據(jù)獨(dú)?性,即使底層表結(jié)構(gòu)發(fā)?變化,只需修改視圖定
義,??需修改依賴視圖的應(yīng)?程序。使?到應(yīng)?程序與數(shù)據(jù)庫(kù)的解耦 - 重命名列:視圖允許??重命名列名,以增強(qiáng)數(shù)據(jù)可讀性。
三:用戶
數(shù)據(jù)庫(kù)服務(wù)安裝成功后默認(rèn)有?個(gè)root??,可以新建和操縱數(shù)據(jù)庫(kù)服務(wù)中管理的所有數(shù)據(jù)庫(kù)。在真實(shí)的使?過(guò)程中,通常每個(gè)應(yīng)?對(duì)應(yīng)著?個(gè)數(shù)據(jù)庫(kù),我們只希望某個(gè)??只能操縱和管理當(dāng)前應(yīng)?對(duì)應(yīng)的那個(gè)數(shù)據(jù)庫(kù),?不能操縱和管理其他應(yīng)?的數(shù)據(jù)庫(kù),這時(shí)就可以添加?個(gè)??并指定??的權(quán)限

以這張圖片為例
root 可以訪問(wèn)和操縱所有的數(shù)據(jù)庫(kù):DB1, DB2, DB3, DB4
普通??1 只能訪問(wèn)和操縱數(shù)據(jù)庫(kù)DB1
普通??2 只能訪問(wèn)和操縱數(shù)據(jù)庫(kù)DB3
只讀??1 只能訪問(wèn)數(shù)據(jù)庫(kù)DB3
只讀??2 只能訪問(wèn)數(shù)據(jù)庫(kù)DB4
host: 允許登錄的主機(jī),相當(dāng)于?名單,如果是localhost,表?只能從本機(jī)登陸
user: ??名
*_priv:??擁有的權(quán)限
authentication_string: 加密后的??密碼
接下來(lái)開(kāi)始創(chuàng)建我們的用戶
CREATE USER [IF NOT EXISTS] 'user_name'@'host_name' IDENTIFIED BY 'auth_string';
user_name: ??名,?單引號(hào)包裹,區(qū)分??寫(xiě)
host_name: 主機(jī)或IP(段),?單引號(hào)包裹
auth_string: 真實(shí)密碼,有些密碼策略不允許使?簡(jiǎn)單密碼
這里需要的注意的是
如果不指定host_name相當(dāng)于’user_name’@‘%’,%表?所有主機(jī)都可以連接到數(shù)據(jù)庫(kù),強(qiáng)烈建議不要這樣設(shè)置,因?yàn)闀?huì)導(dǎo)致嚴(yán)重的安全問(wèn)題
user_name和host_name分別?單引號(hào)包裹,如果寫(xiě)成 ‘user_name @host_name’,相當(dāng)
‘user_name@host_name’@'%
host_name可以通過(guò)??掩碼設(shè)置主機(jī)范圍
- 198.0.0.0/255.0.0.0 : A段?絡(luò)中的任意?臺(tái)主機(jī)
- 198.51.0.0/255.255.0.0: 198.51 B段?絡(luò)中的任意?臺(tái)主機(jī)
- 198.51.100.0/255.255.255.0: 198.51.100 C段?絡(luò)中的任意?臺(tái)主機(jī)
- 198.51.100.1 :只包含特定IP地址的主機(jī)
從MySQL 8.0.23開(kāi)始,指定為IPv4地址的主機(jī)值可以使?CIDR表?法寫(xiě)?,例如198.51.100.44/24
• 允許在IP地址中使?%通配符,?如,主機(jī)值’%'匹配任何主機(jī)名, 198.51.100.% 匹配198.51.100C段?絡(luò)中的任何主機(jī)。MySQL 8.0.35中已棄?,以后可能會(huì)刪除
四:權(quán)限管理
內(nèi)置的一些權(quán)限如下圖所示:

- 權(quán)限層級(jí)關(guān)系:
- 全局權(quán)限(
*.*)覆蓋數(shù)據(jù)庫(kù)權(quán)限(db.*) - 數(shù)據(jù)庫(kù)權(quán)限覆蓋表級(jí)權(quán)限(
db.table) - 表級(jí)權(quán)限覆蓋列級(jí)權(quán)限(
db.table(column)) - 權(quán)限遵循"最小權(quán)限原則",應(yīng)按需分配最窄范圍的權(quán)限
- 全局權(quán)限(
- 常用權(quán)限說(shuō)明:
- 數(shù)據(jù)操作:
SELECT(查詢)、INSERT(插入)、UPDATE(更新)、DELETE(刪除) - 結(jié)構(gòu)操作:
CREATE(創(chuàng)建)、ALTER(修改)、DROP(刪除) - 管理權(quán)限:
GRANT OPTION(授權(quán)他人)、SUPER(超級(jí)權(quán)限)、SHUTDOWN(關(guān)閉服務(wù))
- 數(shù)據(jù)操作:
- 權(quán)限生效機(jī)制:
- 新授予的權(quán)限對(duì)已有連接不生效,需重新連接
FLUSH PRIVILEGES命令用于從權(quán)限表重新加載權(quán)限設(shè)置- 推薦通過(guò)
GRANT/REVOKE操作權(quán)限,而非直接修改mysql系統(tǒng)庫(kù)表
- 安全建議:
- 避免給普通用戶授予
DROP、ALTER等危險(xiǎn)權(quán)限 - 限制
GRANT OPTION權(quán)限的使用,防止權(quán)限擴(kuò)散 - 定期審計(jì)權(quán)限,移除不再需要的權(quán)限
- 敏感操作(如刪除表)建議使用專門(mén)的管理員賬號(hào)執(zhí)行
- 避免給普通用戶授予
通過(guò)以上操作,可以實(shí)現(xiàn)對(duì) MySQL 用戶權(quán)限的精細(xì)化管理,確保數(shù)據(jù)庫(kù)操作的安全性和可控性。
到此這篇關(guān)于MySQL從視圖到用戶和權(quán)限管理操作的文章就介紹到這了,更多相關(guān)mysql用戶權(quán)限管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL大表關(guān)聯(lián)優(yōu)化全攻略及常見(jiàn)問(wèn)題
在數(shù)據(jù)驅(qū)動(dòng)的時(shí)代,SQL作為數(shù)據(jù)庫(kù)交互的核心語(yǔ)言,其重要性不言而喻,這篇文章主要介紹了SQL大表關(guān)聯(lián)優(yōu)化全攻略及常見(jiàn)問(wèn)題的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-11-11
MySQL復(fù)制架構(gòu)的搭建及配置過(guò)程
這篇文章主要介紹了MySQL復(fù)制架構(gòu)的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
Linux系統(tǒng)部署MySQL(mariadb)并進(jìn)行簡(jiǎn)單的操作步驟
MariaDB作為Mysql的一個(gè)分支,在開(kāi)源項(xiàng)目中已經(jīng)廣泛使用,這篇文章主要介紹了Linux系統(tǒng)部署MySQL(mariadb)并進(jìn)行簡(jiǎn)單的操作步驟,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2026-05-05
MySQL 配置免密碼登錄的問(wèn)題記錄(mysql_config_editor Configurati
這篇文章主要介紹了MySQL 配置免密碼登錄的問(wèn)題記錄(mysql_config_editor Configuration),本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08
PHP使用mysqli擴(kuò)展連接MySQL數(shù)據(jù)庫(kù)
這篇文章主要介紹了PHP使用mysqli擴(kuò)展連接MySQL數(shù)據(jù)庫(kù),需要的朋友可以參考下2014-08-08
MLSQL Stack如何讓流調(diào)試更加簡(jiǎn)單詳解
這篇文章主要給大家介紹了關(guān)于MLSQL Stack如何讓流調(diào)試更加簡(jiǎn)單的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MLSQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
MySQL高級(jí)進(jìn)階sql語(yǔ)句總結(jié)大全
這篇文章主要給大家介紹了關(guān)于MySQL高級(jí)進(jìn)階sql語(yǔ)句的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03

