數據庫 之 MySQL用戶和權限管理

1  概述

MySQL用戶和權限管理 遵循最小權限授權法則,保證系統的安全性

本文主要講解關於用戶MySQL用戶和權限管理的相關概念和操作

3  MySQL權限類別

庫級別:對某些庫擁有對應的權限

表級別:對某些表擁有相關權限

字段級別:

管理類:如super

程序類:如調用一個函數,或者執行一個函數

管理類:

CREATE USER:創建用戶賬號

RELOAD:重新載入

LOCK TABLES:鎖定表

REPLICATION CLIENT, REPLICATION SLAVE:複製功能

SHUTDOWN:關閉數據庫服務器

FILE:從文件中加載內容裝入

SHOW DATABASES:查看數據庫

PROCESS :和進程相關

SUPER:不便歸類的其他權限,僅次於root的擁有其他管理功能的用戶

程序類:組合爲12中權限(3*4)

FUNCTION:函數

PROCEDURE:存儲過程

TRIGGER:觸發器

操作:對以上的三個程序類都擁有四個操作CREATE,ALTER,DROP,EXECUTE

庫和表級別:

CREATE,ALTER,DROP:對庫和表創建,修改和刪除

INDEX:索引

CREATE VIEW:創建視圖的語句的權限

SHOW VIEW:查看視圖的權限

GRANT:能夠把自己獲得的權限生成一個副本轉贈給其它用戶;轉贈的權限不能回收,一般不建議授予這個權限

OPTION:其他權限相關的選項

數據操作:

表:

INSERT/DELETE/UPDATE/SELECT 

字段:

SELECT(col1,col2,...)

UPDATE(col1,col2,...)

INSERT(col1,col2,...)

注意,delete是整行刪除,因此不能用於刪除字段

所有權限:ALL, ALL PRIVILEGES

元數據數據庫(數據字典):mysql庫,保存了當前系統的相關數據,如當前數據庫上對象的定義

MySQL用戶管理

用戶賬號組成:user@host

user:賬戶名稱;

host:此賬戶可通過哪些客戶端主機請求創建連接線程; 

%:任意長度的任意字符;

_:任意單個字符;

mysql默認會將登錄的ip解析成主機名,比如有主機ip爲192.168.1.71的主機名是CentOS7A.sunny.com,那麼在mysql服務器上授權的是[email protected].%的賬號訪問,沒有授權CentOS7A.sunny.com,當mysql服務器沒有關閉名稱解析時,192.168.1.71要遠程連接mysql服務器,會被識別爲賬號[email protected],由於沒有授權[email protected]登錄mysql服務器,因此不能登錄mysql服務器

授權主機名和ip是不等同的,

skip_name_resolve=ON    #關閉名稱解析功能

創建用戶:

CREATE USER  'user'@'host' [IDENTIFIED BY [PASSWORD] 'password'] [,'user'@'host' [IDENTIFIED BY [PASSWORD] 'password']...]

重命名:RENAME USER

RENAME USER old_user TO new_user[, old_user TO new_user] ...

刪除用戶:沒有回收站,除非有備份,否則刪掉就不能恢復

DROP USER 'user'@'host' [, 'user'@'host'] ...

讓MySQL重新加載授權表:用update更改數據要手動執行flush

FLUSH PRIVILEGES

授權

db, host, user三個級別的上進行授權

mysql庫中權限相關的表:tables_priv, column_priv, procs_priv, proxies_priv

語法如下

GRANT  priv_type [(column_list)] [, priv_type [(column_list)]] ...ON [object_type] priv_level TO user_specification [, user_specification] ... [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}] [WITH with_option ...]

相關解釋如下

[REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]:基於ssl連接

object_type:

TABLE:表

| FUNCTION:函數

| PROCEDURE:過程

priv_level:權限級別

*表示所有庫所有表

| *.*表示所有者的所有表

| db_name.*表示指定庫的所有表

| db_name.tbl_name表示指定庫的指定表

| tbl_name表示所有庫的特定表

| db_name.routine_name:存儲歷程之一

ssl_option:

SSL

| X509 格式的證書

| CIPHER 'cipher':指明加密算法

| ISSUER 'issuer':要求證書頒發者爲指定的頒發者

| SUBJECT 'subject':證書裏的其他信息

with_option:以下數值爲0表示不限制

GRANT OPTION:表示得到的權限可以轉贈

| MAX_QUERIES_PER_HOUR count:一個賬號每小時最多發起多少次的操作

| MAX_UPDATES_PER_HOUR count:一小時內發起更新的次數

| MAX_CONNECTIONS_PER_HOUR count:一小時發起多少次短連接請求

| MAX_USER_CONNECTIONS count:一個賬號可以同時發起多少次的連接。

查看授權:SHOW GRANTS;查看自己的權限

SHOW GRANTS [FOR 'user'@'host']

取消授權:REVOKE

REVOKE  priv_type [(column_list)][, priv_type [(column_list)]] ...

ON [object_type] priv_level

FROM  'user'@'host' [,  'user'@'host'] ...

REVOKE ALL PRIVILEGES, GRANT OPTION

FROM user [, user] ...

例子

授權賬號'test'@'192.168.1.%'

MariaDB [sunny]> grant select on sunny.students to 'test'@'192.168.1.%' identified by "Pass1234";

額外授權是追加,直接授權即可,如再增加delete權限

MariaDB [sunny]> grant delete on sunny.students to 'test'@'192.168.1.%' identified by "Pass1234";

授權對應字段擁有相關權限

如授權test賬號對錶sunny.students的字段major擁有update的權限,則針對其他字段就沒有update權限

MariaDB [sunny]> grant update(major) on sunny.students to 'test'@'192.168.1.%' identified by "Pass1234";

回收權限

MariaDB [(none)]> revoke update(major) on sunny.students from 'test'@'192.168.1.%';


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