程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 深入MySQL的權限系統(1)

深入MySQL的權限系統(1)

編輯:MySQL綜合教程

MySQL有一套先進的但非標准的安全/授權系統,掌握其授權機制是開始操作MySQL數據庫必須要走的第一步,對於一個熟悉SQL基本操作的人來說,也是MySQL所有的知識中比較難以理解的一個部分。本節通過揭開其授權系統的運作機制,希望大家能夠可以更好地操作和使用這個優秀的數據庫系統。

MySQL的安全系統是很靈活的,它允許你以多種不同方式設置用戶權限。一般地,你可使用標准的SQL語句GRANT和REVOKE語句做,他們為你修改控制客戶訪問的授權表,然而,你可能由一個不支持這些語句的老版本的MySQL在3.22.11之前這些語句不起作用),或者你發覺用戶權限看起來不是以你想要的方式工作。對於這種情況,了解MySQL授權表的結構和服務器如何利用它們決定訪問權限是有幫助的,這樣的了解允許你通過直接修改授權表增加、刪除或修改用戶權限,它也允許你在檢查這些表時診斷權限問題。

MySQL授權表的結構

通過網絡連接服務器的客戶對MySQL數據庫的訪問由授權表內容來控制。這些表位於mysql數據庫中,並在第一次安裝MySQL的過程中初始化運行mysql_install_db腳本)。授權表共有5個表:user、db、host、tables_priv和columns_priv。

授權表user、db和host的結構和作用

表1  授權表user、db和host的結構

 

授權表的內容有如下用途:

·user表

user表列出可以連接服務器的用戶及其口令,並且它指定他們有哪種全局超級用戶)權限。在user表啟用的任何權限均是全局權限,並適用於所有數據庫。例如,如果你啟用了DELETE權限,在這裡列出的用戶可以從任何表中刪除記錄,所以在你這樣做之前要認真考慮。

·db表

db表列出數據庫,而用戶有權限訪問它們。在這裡指定的權限適用於一個數據庫中的所有表。

·host表

host表與db表結合使用在一個較好層次上控制特定主機對數據庫的訪問權限,這可能比單獨使用db好些。這個表不受GRANT和REVOKE語句的影響,所以,你可能發覺你根本不是用它。

授權表tables_priv和columns_priv的結構和作用

表2  授權表tables_priv和columns_priv的結構

授權表tables_priv

授權表columns_priv

作用域列

Host

Host

Db

Db

User

User

Table_name

Table_name

 

Column_name

權限列

Table_priv

Column_priv

其他列

Timestamp

Timestamp

Grantor

 

MySQL沒有rows_priv表,因為它不提供記錄級權限,例如,你不能限制用戶於表中包含特定列值的行。如果你確實需要這種能力,你必須用應用編程來提供。如果你想執行建議的記錄級鎖定,你可用GET_LOCK()函數做到。
授權表的內容有如下用途:

·tables_priv表

tables_priv表指定表級權限,在這裡指定的一個權限適用於一個表的所有列。

·columns_priv表

columns_priv表指定列級權限。這裡指定的權限適用於一個表的特定列。

tables_priv和columns_priv表在MySQL 3.22.11版引進與GRANT語句同時)。如果你有較早版本的MySQL,你的mysql數據庫將只有user、db和host表。如果你從老版本升級到3.22.11或更新,而沒有tables_priv和columns_priv表,運行mysql_fix_privileges_tables腳本創建它們。

用戶的權限

權限信息用user、db、host、tables_priv和columns_priv表被存儲在mysql數據庫中(即在名為mysql的數據庫中)。在MySQL啟動時和在7.5權限修改何時生效所說的情況時,服務器讀入這些數據庫表內容。

數據庫和表的權限

下列權限運用於數據庫和表上的操作。

·SELECT

允許你使用SELECT語句從表中檢索數據。SELECT語句只有在他們真正從一個表中檢索行是才需要select權限,你可以執行某個SELECT語句,甚至沒有任何到服務器上的數據庫裡的存取任何東西的許可。例如,你可使用mysql客戶作為一個簡單的計算器:

mysql> SELECT 1+1;

mysql> SELECT PI()*2;

·UPDATE

允許你修改表中的已有的記錄。

·INSERT

允許在表中插入記錄

·DELETE

允許你從表中刪除現有記錄。

·ALTER

允許你使用ALTER TABLE語句,這其實是一個簡單的第一級權限,你必須由其他權限,這看你想對數據庫實施什麼操作。

·CREATE

允許你創建數據庫和表,但不允許創建索引。

·DROP

允許你刪除拋棄)數據庫和表,但不允許刪除索引。

注意:如果你將mysql數據庫的drop權限授予一個用戶,該用戶能拋棄存儲了MySQL存取權限的數據庫!

·INDEX

允許你創建並刪除索引。

·REFERENCES

目前不用。


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