程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> Mysql權限系統工作原理

Mysql權限系統工作原理

編輯:關於MYSQL數據庫

MySQL權限系統保證所有的用戶可以嚴格地做他們假定被允許做的事情。當你連接一個MySQL服務器時, 你的身份由你從那連接的主機和你指定的用戶名來決定,系統根據你的身份和你想做什麼來授予權限。

MySQL在認定身份中考慮你的主機名和用戶名字,是因為有很小的原因假定一個給定的用戶在因特網上屬於同一個人。例如,用戶從whitehouse.gov連接的bill不必和從mosoft.com連接bill是同一個人。 MySQL通過允許你區分在不同的主機上碰巧有同樣名字用戶來處理它:你可以對從whitehouse.gov連接授與bill一個權限集,而為從microsoft.com的連接授予一個不同的權限集。

MySQL存取控制包含2個階段:

階段1:服務器檢查你是否允許連接。
階段2:假定你能連接,服務器檢查你發出的每個請求。看你是否有足夠的權限實施它。例如,如果你從數據庫中一個表精選(select)行或從數據庫拋棄一個表,服務器確定你對表有select權限或對數據庫有drop權限。
服務器在存取控制的兩個階段使用在MySQL的數據庫中的user、db和host表,在這些授權表中字段如下:

表名稱 user db host
范圍字段 Host Host Host
User Db Db
PassWord User
權限字段 Select_priv Select_priv Select_priv
Insert_priv Insert_priv Insert_priv
Update_priv Update_priv Update_priv
Delete_priv Delete_priv Delete_priv
Index_priv Index_priv Index_priv
Alter_priv Alter_priv Alter_priv
Create_priv Create_priv Create_priv
Drop_priv Drop_priv Drop_priv
Grant_priv Grant_priv Grant_priv
Reload_priv
Shutdown_priv
Process_priv
File_priv

對存取控制的第二階段(請求證實),如果請求涉及表,服務器可以另外參考tables_priv和columns_priv表。這些表的字段如下:

表名稱 tables_priv columns_priv
范圍字段 Host Host
Db Db
User User
Table_name Table_name
Column_name
權限字段 Table_priv Column_priv
Column_priv
其他字段 Timestamp Timestamp
Grantor

每個授權表包含范圍字段和權限字段。

范圍字段決定表中每個條目的范圍,即,條目適用的上下文。例如, 一個user表條目的Host和User值為'thomas.loc.gov'和'bob'將被用於證實來自主機thomas.loc.gov的bob對服務器的連接。同樣,一個db表條目的Host、User和Db字段的值是'thomas.loc.gov'、'bob'和'reports'將用在bob從主機聯接thomas.loc.gov存取reports數據庫的時候。 tables_priv和columns_priv表包含范圍字段,指出每個條目適用的表或表/列的組合。

對於檢查存取的用途,比較Host值是忽略大小寫的。User、PassWord、Db和Table_name值是區分大小寫的。Column_name值在MySQL3.22.12或以後版本是忽略大小寫的。

權限字段指出由一個表條目授予的權限,即,可實施什麼操作。服務器組合各種的授權表的信息形成一個用戶權限的完整描述。為此使用的規則在6.8 存取控制, 階段2:請求證實描述。

范圍字段是字符串,如下所述;每個字段的缺省值是空字符串:

字段名 類型
Host CHAR(60)
User CHAR(16)
PassWord CHAR(16)
Db CHAR(64) (tables_priv和columns_priv表為CHAR(60))

在user、db和host表中,所有權限字段被聲明為ENUM('N','Y')--每一個都可有值'N'或'Y',並且缺省值是'N'.

在tables_priv和columns_priv表中,權限字段被聲明為SET字段:

表名 字段名 可能的集合成員
tables_priv Table_priv 'Select', 'Insert', 'Update', 'Delete', 'Create',

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved