国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL用戶管理

2024-07-24 12:59:44
字體:
來源:轉載
供稿:網友
MySQL用戶管理

MySQL分為普通用戶與root用戶。這兩種用戶的權限不一樣。

一、權限表

  安裝MySQL時會自動安裝一個名為mysql的數據庫。mysql數據庫里面存儲的都是權限表。

  1、User表

  user表有39個字段。這些字段可以分為4類:

用戶列;權限列;安全列;資源控制列;

  1、用戶列

  用戶列包括Host、User、PassWord,分別表示主機名、用戶名和密碼。登錄用的就是這個用戶名與密碼;

  2、權限列

  user表的權限列包括Select_PRiv、Insert_priv等以priv結尾的字段。

  這些字段的值只有Y和N。Y表示該權限可以用到所有數據庫上;N表示該權限不能用到所有數據庫上;

  通常,可以使用GRANT語句Wie用戶賦予一些權限,也可以通過Update語句更新user表的方式來設置權限;

  不過,修改user表之后,一定要執行一下FLUSH PRIVILEGES,否則可能會出現如下錯誤:

  Error (1133): Can’t find any matching row in the user table

說明
Select_priv確定用戶是否可以通過SELECT命令選擇數據
Insert_priv確定用戶是否可以通過INSERT命令插入數據
Update_priv確定用戶是否可以通過UPDATE命令修改現有數據
Delete_priv確定用戶是否可以通過DELETE命令刪除現有數據
Create_priv確定用戶是否可以創建新的數據庫和表
Drop_priv確定用戶是否可以刪除現有數據庫和表
Reload_priv確定用戶是否可以執行刷新和重新加載MySQL所用各種內部緩存的特定命令,包括日志、權限、主機、查詢和表
Shutdown_priv確定用戶是否可以關閉MySQL服務器。在將此權限提供給root賬戶之外的任何用戶時,都應當非常謹慎
Process_priv確定用戶是否可以通過SHOW PROCESSLIST命令查看其他用戶的進程
File_priv確定用戶是否可以執行SELECT INTO OUTFILE和LOAD DATA INFILE命令
Grant_priv確定用戶是否可以將已經授予給該用戶自己的權限再授予其他用戶
References_priv目前只是某些未來功能的占位符;現在沒有作用
Index_priv確定用戶是否可以創建和刪除表索引
Alter_priv確定用戶是否可以重命名和修改表結構
Show_db_priv確定用戶是否可以查看服務器上所有數據庫的名字,包括用戶擁有足夠訪問權限的數據庫
Super_priv

確定用戶是否可以執行某些強大的管理功能,例如通過KILL命令刪除用戶進程,使用SET GLOBAL修改全局MySQL變量,執行關于復制和日志的各種命令

Create_tmp_table_priv確定用戶是否可以創建臨時表
Lock_tables_priv確定用戶是否可以使用LOCK TABLES命令阻止對表的訪問/修改
Execute_priv確定用戶是否可以執行存儲過程
Repl_slave_priv確定用戶是否可以讀取用于維護復制數據庫環境的二進制日志文件。此用戶位于主系統中,有利于主機和客戶機之間的通信
Repl_client_priv確定用戶是否可以確定復制從服務器和主服務器的位置
Create_view_priv確定用戶是否可以創建視圖
Show_view_priv確定用戶是否可以查看視圖或了解視圖如何執行
Create_routine_priv確定用戶是否可以更改或放棄存儲過程和函數
Alter_routine_priv確定用戶是否可以修改或刪除存儲函數及函數
Create_user_priv確定用戶是否可以執行CREATE USER命令,這個命令用于創建新的MySQL賬戶
Event_priv確定用戶能否創建、修改和刪除事件
Trigger_priv確定用戶能否創建和刪除觸發器

  Update修改權限:

UPDATE user SET Select_priv = 'N'WHERE Host = '%'

  GRANT賦予權限

  3、安全列

  user表的安全列有4個字段:

ssl_type;ssl_cipher;x509_issuer;x509_subject;

  ssl用于加密;x509標準可以用來標識用戶。普通的發行版都沒有加密功能。可以使用SHOW VARIABLES LIKE ‘have_openssl’語句來查看是否具有ssl功能。如果取值為DISABLED,那么則沒有ssl加密功能。

  4、資源控制列

  user表的4個資源控制列是:

max_questions:每小時可以允許執行多少次查詢;max_updates:每小時可以允許執行多少次更新;max_connections:每小時可以建立多少連接;max_user_connections:單個用戶可以同時具有的連接數。

  默認值為0,表示無限制。

  2、db表和host表

  db表存儲了某個用戶對一個數據庫的權限。

  host表中存儲了某個主機對數據庫的操作權限,配合db表對給定主機上數據庫級操作權限做更細致的控制;但是很少用,新版本已經取消了host表;

  1、用戶列

  db表的用戶列有3個字段:

Host:主機名;Db:數據庫名;User:用戶名;

  2、權限列

  db表:

Create_routine_priv:是否具有創建存儲過程權限;Alter_routine_priv:是否具有修改存儲過程權限;

  user表中的權限是針對所有數據庫的,如果user表中的Select_priv字段取值為Y,那么該用戶可以查詢所有數據庫中的表;

  如果為某個用戶值設置了查詢test表的權限,那么user表的Select_priv字段的取值為N。而這個SELECT權限則記錄在db表中。db表中的Select_priv字段的取值將會是Y。

  用戶先根據user表的內容獲取權限,然后再根據db表的內容獲取權限。

  3、tables_priv表和columns_priv表

   tables_priv:可以對單個表進行權限設置:

tables_priv表包含8個字段:Host:主機名;DB:數據庫名;User:用戶名;Table_name:表名Table_priv:對表進行操作的權限(Select,Insert,Update,Delete,Create,Drop,Grant,References,Index,Alter)Column_priv:對表中的數據列進行操作的權限(Select,Insert,Update,Rederences);Timestamp:修改權限的事件Grantor:權限的設置者

  columns_priv:可以對單個數據列進行權限設置,有7個列,作用同上:

   Host、Db、User、Table_name、Column_name、Column_priv、Timestamp。

  MySQL權限分配是按照user表-> db表 -> table_priv表 -> columns_priv表的順序進行分配的。

  在數據庫系統中,先判斷user表中的值是否為’Y’,如果user表中的值是’Y’,就不需要檢查后面的表。如果user表為N,則一次檢查后面的表。

  4、procs_priv表

procs_priv表可以對存儲過程和存儲函數進行權限設置。procs_priv表包含8個字段,分別是:Host:主機名;Db:數據庫名;User:用戶名;Routine_name:存儲過程或函數名稱;Routine_type:類型(取值有:FUNCTION或PROCEDURE);Proc_priv:擁有的權限(Execute:執行;Alter Routine:修改;Grant:權限賦予);Timestamp:字段存儲更新的時間;Grantor:字段設置者;

二、賬戶管理

  賬戶管理是MySQL用戶管理最基本的內容。包括登錄,退出MySQL服務器、創建用戶、刪除用戶、密碼管理和權限管理等內容。

  其中登錄方式非常簡單,在這個地址有:http://www.cnblogs.com/kissdodog/p/4154068.html

  1、新建普通用戶

  在MySQL數據庫中,建立用戶有3種方式:

使用CREATE USER語句來創建新的用戶;直接在mysql.user表中INSERT用戶;使用GRANT語句來新建用戶;

  1、CREATE USER

  使用CREATE USER語句創建用戶,必須要擁有CREATE USER權限。其格式如下:

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

  其中,user參數表示新建用戶的賬戶,user由用戶名(User)和主機名(Host)構成;IDENTIFIED BY關鍵字用來設置用戶的密碼;password參數表示用戶的密碼;如果密碼是一個普通的字符串,就不需要使用PASSWORD關鍵字。可以沒有初始密碼。

  示例:

CREATE USER 'admin'@'%' IDENTIFIED BY 'admin'

  執行之后user表會增加一行記錄,但權限暫時全部為‘N’。

  2、用INSERT語句新建普通用戶

  可以使用INSERT語句直接將用戶的信息添加到mysql.user表。但必須擁有mysql.user表的INSERT權限。

  另外,ssl_cipher、x509_issuer、x509_subject沒有值,必須要設置值,否則INSERT語句無法執行。

  示例:

INSERT INTO mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) VALUES('%','newuser1',PASSWORD('123456'),'','','')

  執行INSERT之后,要使用命令:

FLUSH PRIVILEGES

  命令來使用戶生效。

  3、用GRANT語句來新建普通用戶

  用GRANT來創建新的用戶時,能夠在創建用戶時為用戶授權。但需要擁有GRANT權限。

  語法如下:

GRANT priv_type ON database.tableTO user[IDENTIFIED BY [PASSWORD] 'password'][,user [IDENTIFIED BY [PASSWORD] 'password']...]priv_type:參數表示新yoghurt的權限;databse.table:參數表示新用戶的權限范圍;user:參數新用戶的賬戶,由用戶名和主機構成;IDENTIFIED BY關鍵字用來設置密碼;password:新用戶密碼;

  GRANT語句可以同時創建多個用戶。

GRANT SELECT ON *.* TO netUser@'%'

  *.*與db.*的區別在于。*.*對所有數據庫生效,所以user表的SELECT會變為Y。而db.*user表為’N’,更改的是Db表。

  2、刪除普通用戶

  1、DROP USER語句刪除普通用戶

  需要擁有DROP USER權限。語法如下:

DROP USER user[,user]...

  user是需要刪除的用戶,由用戶名(User)和主機名(Host)構成。

DROP USER 'newuser1'@'%'

  2、DELETE語句刪除普通用戶

  可以使用DELETE語句直接將用戶的信息從mysql.user表中刪除。但必須擁有對mysql.user表的DELETE權限。

DELETE FROM mysql.user WHERE Host = '%' AND User = 'admin'

  刪除完成后,一樣要FLUSH PRIVILEGES才生效。

  3、修改密碼

  1、使用mysqladmin命令來修改root用戶的密碼

  語法:

mysqladmin -u -username -p password "new_password"

  新密碼(new_password)必須用括號括起來,單引號會報錯。

  示例:

  (注:這個待驗證,我怎么執行都不成功!)

  2、修改user表

  UPDATE user表的passwor字段的值,也可以達到修改密碼的目的;

UPDATE user SET Password = PASSWORD('123') WHERE USER = 'myuser'

  FLUSH PRIVILEGES后生效。

  3、使用SET語句來修改密碼

  使用root用戶登錄到MySQL服務器后,可以使用SET語句來修改密碼:

  修改自己的密碼,不需要用戶名

SET PASSWORD = PASSWORD("123");

  修改其他用戶密碼:

SET PASSWORD FOR 'myuser'@'%'=PASSWORD("123456")

  FOR 用戶名@主機名

  4、GRANT語句來修改普通用戶的密碼

  使用GRANT語句修改普通用戶的密碼,必須擁有GRANT權限。

GRANT priv_type ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password']

  示例:

GRANT SELECT ON *.* TO 'test3'@'%' IDENTIFIED BY '123'

  4、忘記密碼的解決方案

  如果root用戶密碼丟失了,會給用戶造成很大的麻煩。但是,可以通過某種特殊方法登錄到root用戶下,然后修改密碼。

  1、使用–skip-grant-tables選項啟動MySQL服務

  該選項將使MySQL服務器停止權限判斷,任何用戶都能夠訪問數據庫。

  在Windows操作系統下,使用mysqlid或mysqlid-nt來啟動MySQL服務。

  mysqld命令:

  mysqld –skip-grant-tables

  mysqld-nt命令:

  mysqld-nt –skip-grant-tables

  net start mysql命令:

  net start mysql –skip-grant-tables

  2、登錄root用戶,并且設置新密碼

  mysql -u root

  必須使用UPDATE語句更新mysql數據庫下的user表,而不能使用SET語句,因為–skip-grant-tables不能使用SET語句。

  修改完密碼以后,FLUSH PRIVILEGES語句加載權限表,新密碼即生效。

三、權限管理

  1、MySQL的各種權限

權限名稱對應user表中的列權限的范圍
CREATECreate_priv數據庫、表或索引
DROPDrop_priv數據庫或表
GRANT OPTIONGrant_priv數據庫、表、存儲過程或函數
REFERENCESReferences_priv數據庫或表
ALTERAlter_priv修改表
DELETEDelete_priv刪除表
INDEXIndex_priv用索引查詢表
INSERTInsert_priv插入表
SELECTSelect_priv查詢表
UPDATEUpdate_priv更新表
CREATE VIEWCreate_view_priv創建視圖
SHOW VIEWShow_view_priv查看視圖
ALTER ROUTINEAlter_routine修改存儲過程或存儲函數
CREATE ROUTINECreate_routine_priv創建存儲過程或存儲函數
EXECUTEExecute_priv執行存儲過程或存儲函數
FILEFile_priv加載服務器主機上的文件
CREATE TEMPORARY TABLESCreate_temp_table_priv創建臨時表
LOCK TABLESLock_tables_priv鎖定表
CREATE USERCreate_user_priv創建用戶
PROCESSProcess_priv服務器管理
RELOADReload_priv重新加載權限表
REPLICATION CLIENTRepl_client_priv服務器管理
REPLICATION SLAVERepl_slave_priv服務器管理
SHOW DATABASESShow_db_priv查看數據庫
SHUTDOWNShutdown_priv關閉服務器
SUPERSuper_priv超級權限

 

  2、授權

  GRANT語法如下:

GRANT priv_type [(column_list)] ON database.tableTO user [IDENTIFIED BY [PASSWORD] 'password'][,user [IDENTIFIED BY [PASSWORD] 'password']]...WITH with_option[with_option]priv_type參數表示權限類型;column_list:參數表示權限作用于哪些列上,沒設置則位于整個表上;user參數由用戶名和主機名構成;形式是“‘username’@’hostname’”;IDENTIFIED BY參數用于為用戶設置密碼;password:用戶新密碼;

  WITH關鍵字后面帶有一個或多個with_option參數。有5個選項:

GRANT OPTION:被授權的用戶可以將這些權限賦予給別的用戶;MAX_QUERIES_PER_HOUR count:設置沒消失可以允許執行count次查詢;MAX_UPDATES_PER_HOUR count:設置每個消失可以允許執行count次更新;MAX_CONNECTIONS_PER_HOUR count:設置每小時可以建立count個連接;MAX_USER_CONNECTIONS count:設置單個用戶可以同時具有的count個連接數;

  示例:

GRANT SELECT,UPDATE ON *.*    TO 'myuser'@'%'WITH GRANT OPTION;

  3、收回權限

  收回權限,就是取消某個用戶的某些權限。MySQL中使用REVOKE關鍵字來為用戶設置權限。

  語法如下:

REVOKE priv_type[(column_list)]ON database.tableFROM user[,user]

  收回全部權限的REVOKE語句的基本語法如下:

REVOKE ALL PRIVILEGES,GRANT OPTION FROM user[,user]...

  示例:回收用戶myuser的SELECT權限

REVOKE SELECT ON *.*FROM 'myuser'@'%'

  收回myuser的所有權限:

REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'myuser'@'%'

  4、查看權限

  SHOW GRANTS語句用于查看權限。同時mysql數據庫下的user表中存儲著用戶的基本權限。

SELECT * FROM mysql.userSHOW GRANTS

  

 

原文地址
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宝兴县| 木兰县| 皋兰县| 嘉定区| 云林县| 大厂| 永顺县| 彭泽县| 宜川县| 渑池县| 鸡泽县| 博白县| 安宁市| 彭阳县| 肥乡县| 三都| 济阳县| 海宁市| 宁明县| 荆州市| 兴安盟| 永兴县| 绵阳市| 姜堰市| 河间市| 农安县| 札达县| 南昌县| 治多县| 云和县| 乌拉特后旗| 日土县| 政和县| 高雄县| 富宁县| 太和县| 扶余县| 沂水县| 黄石市| 突泉县| 大石桥市|