MySQL從視圖到用戶和權(quán)限管理操作
一:視圖的定義
視圖是?個(gè)虛擬的表,它是基于?個(gè)或多個(gè)基本表或其他視圖的查詢結(jié)果集。視圖本?不存儲(chǔ)數(shù)據(jù),?是通過執(zhí)?查詢來動(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)建好了那么該如何使用我們的視圖以及視圖的一些操作
例如:查詢用戶的所有信息和考試成績
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;

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

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

小編整理了視圖修改會(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)
- 簡單性:視圖可以將復(fù)雜的查詢封裝成?個(gè)簡單的查詢。例如,針對(duì)?個(gè)復(fù)雜的多表連接查詢,可
以創(chuàng)建?個(gè)視圖,??只需查詢視圖??需了解底層的復(fù)雜邏輯。 - 安全性:通過視圖,可以隱藏表中的敏感數(shù)據(jù)。例如,?個(gè)系統(tǒng)的??表中,可以創(chuàng)建?個(gè)不包含
密碼列視圖,普通??只能訪問這個(gè)視圖,?不能訪問原始表。 - 邏輯數(shù)據(jù)獨(dú)?性:視圖提供了?種邏輯數(shù)據(jù)獨(dú)?性,即使底層表結(jié)構(gòu)發(fā)?變化,只需修改視圖定
義,??需修改依賴視圖的應(yīng)?程序。使?到應(yīng)?程序與數(shù)據(jù)庫的解耦 - 重命名列:視圖允許??重命名列名,以增強(qiáng)數(shù)據(jù)可讀性。
三:用戶
數(shù)據(jù)庫服務(wù)安裝成功后默認(rèn)有?個(gè)root??,可以新建和操縱數(shù)據(jù)庫服務(wù)中管理的所有數(shù)據(jù)庫。在真實(shí)的使?過程中,通常每個(gè)應(yīng)?對(duì)應(yīng)著?個(gè)數(shù)據(jù)庫,我們只希望某個(gè)??只能操縱和管理當(dāng)前應(yīng)?對(duì)應(yīng)的那個(gè)數(shù)據(jù)庫,?不能操縱和管理其他應(yīng)?的數(shù)據(jù)庫,這時(shí)就可以添加?個(gè)??并指定??的權(quán)限

以這張圖片為例
root 可以訪問和操縱所有的數(shù)據(jù)庫:DB1, DB2, DB3, DB4
普通??1 只能訪問和操縱數(shù)據(jù)庫DB1
普通??2 只能訪問和操縱數(shù)據(jù)庫DB3
只讀??1 只能訪問數(shù)據(jù)庫DB3
只讀??2 只能訪問數(shù)據(jù)庫DB4
host: 允許登錄的主機(jī),相當(dāng)于?名單,如果是localhost,表?只能從本機(jī)登陸
user: ??名
*_priv:??擁有的權(quán)限
authentication_string: 加密后的??密碼
接下來開始創(chuàng)建我們的用戶
CREATE USER [IF NOT EXISTS] 'user_name'@'host_name' IDENTIFIED BY 'auth_string';
user_name: ??名,?單引號(hào)包裹,區(qū)分??寫
host_name: 主機(jī)或IP(段),?單引號(hào)包裹
auth_string: 真實(shí)密碼,有些密碼策略不允許使?簡單密碼
這里需要的注意的是
如果不指定host_name相當(dāng)于’user_name’@‘%’,%表?所有主機(jī)都可以連接到數(shù)據(jù)庫,強(qiáng)烈建議不要這樣設(shè)置,因?yàn)闀?huì)導(dǎo)致嚴(yán)重的安全問題
user_name和host_name分別?單引號(hào)包裹,如果寫成 ‘user_name @host_name’,相當(dāng)
‘user_name@host_name’@'%
host_name可以通過??掩碼設(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開始,指定為IPv4地址的主機(jī)值可以使?CIDR表?法寫?,例如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ù)庫權(quán)限(db.*) - 數(shù)據(jù)庫權(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)限說明:
- 數(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è)置- 推薦通過
GRANT/REVOKE操作權(quán)限,而非直接修改mysql系統(tǒng)庫表
- 安全建議:
- 避免給普通用戶授予
DROP、ALTER等危險(xiǎn)權(quán)限 - 限制
GRANT OPTION權(quán)限的使用,防止權(quán)限擴(kuò)散 - 定期審計(jì)權(quán)限,移除不再需要的權(quán)限
- 敏感操作(如刪除表)建議使用專門的管理員賬號(hào)執(zhí)行
- 避免給普通用戶授予
通過以上操作,可以實(shí)現(xiàn)對(duì) MySQL 用戶權(quán)限的精細(xì)化管理,確保數(shù)據(jù)庫操作的安全性和可控性。
到此這篇關(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)化全攻略及常見問題
在數(shù)據(jù)驅(qū)動(dòng)的時(shí)代,SQL作為數(shù)據(jù)庫交互的核心語言,其重要性不言而喻,這篇文章主要介紹了SQL大表關(guān)聯(lián)優(yōu)化全攻略及常見問題的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-11-11
Linux系統(tǒng)部署MySQL(mariadb)并進(jìn)行簡單的操作步驟
MariaDB作為Mysql的一個(gè)分支,在開源項(xiàng)目中已經(jīng)廣泛使用,這篇文章主要介紹了Linux系統(tǒng)部署MySQL(mariadb)并進(jìn)行簡單的操作步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2026-05-05
MySQL 配置免密碼登錄的問題記錄(mysql_config_editor Configurati
這篇文章主要介紹了MySQL 配置免密碼登錄的問題記錄(mysql_config_editor Configuration),本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08
PHP使用mysqli擴(kuò)展連接MySQL數(shù)據(jù)庫
這篇文章主要介紹了PHP使用mysqli擴(kuò)展連接MySQL數(shù)據(jù)庫,需要的朋友可以參考下2014-08-08
MySQL高級(jí)進(jìn)階sql語句總結(jié)大全
這篇文章主要給大家介紹了關(guān)于MySQL高級(jí)進(jìn)階sql語句的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03

