二、mysql權限系統

前言:Mysql重要性、安裝等本大章節不做闡述。主要講述mysql使用mysql權限、架構與存儲引擎、業務設計、mysql優化

一、簡單的權限使用

grant SELECT on mall.* TO 'dev'@'192.168.244.%' IDENTIFIED BY '123' WITH GRANT OPTION;

對dev用戶加上mall庫中所有表的查詢權限,只能在192.168.0.*的 網段進行查詢操作。

二、深入理解mysql權限

1、用戶標識是什麼

在 mysql 中的權限不是單純的賦予給用戶的,而是賦予給” 用戶+IP”的。比如 dev 用戶是否能登陸,用什麼密碼登陸,並且能訪問什麼數據庫等都需要加上 IP,這樣 纔算一個完整的用戶標識

2、用戶權限設計的表

mysql.user,mysql.db,mysql.table_priv,mysql_column_priv
那這些表有什麼用,和權限又有什麼關係呢?

  • User的一行記錄代表一個用戶標識
  • db的一行記錄代表對數據庫的權限
  • table_priv的一行記錄代表對錶的權限
  • column_priv的一行記錄代表對某一列的權限

舉例:有用戶只能訪問某張表的部分數據

新建一張account表並且插入部分數據

DROP TABLE IF EXISTS `account`; 
CREATE TABLE `account` (
`id` int(11) NOT NULL,
`name` varchar(50) DEFAULT NULL,
`balance` int(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_balance` (`balance`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `account` VALUES ('1', 'lilei', '900');
INSERT INTO `account` VALUES ('2', 'hanmei', '100'); 
INSERT INTO `account` VALUES ('3', 'lucy', '250');
INSERT INTO `account` VALUES ('5', 'tom', '0');

對於前面創建的 dev 用戶我不想讓他訪問 balance 列,但是 id 和 name 列是可以訪問的,這樣 的需求在工作中不是沒有。

grant select(id,name) on mall.account to 'dev'@'192.168.244.%';

對dev用戶在account表中只加id,name的select權限

我們可以去看下相關權限表中的數據。
table_priv
在這裏插入圖片描述
column_priv
在這裏插入圖片描述
現在dev用戶直接去查詢全表就會報錯:無權訪問
但是隻查詢id、name是可以的。
在這裏插入圖片描述
在這裏插入圖片描述

三、mysql角色

mysql5.7及以後提出了Role Like的概念,類似於Oracle、PostgreSQL、 SqlServer中的角色。下面介紹下怎麼使用。

  show variables like "%proxy%"

在這裏插入圖片描述
你得先把 check_proxy_users,mysql_native_password_proxy_users 這兩個變量設置成 true 才 行

set GLOBAL check_proxy_users =1;
set GLOBAL mysql_native_password_proxy_users = 1;
  • 創建一個角色
create user 'dev_role'
  • 創建二個開發人員賬號
create user 'RD_1'
create user 'RD_2'
  • 將用戶加入到角色組中
grant proxy on 'RD_1' to 'deer' 
grant proxy on 'RD_2' to 'enjoy'
  • 給角色dev_role加上權限
grant select(id,name) on mall.account to 'dev_role'
  • 使用開發者賬號查看數據時,發現開發者持有角色的權限

角色信息存儲在proxies_priv表中
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章