border="0" marginwidth="0" marginheight="0" src="/ads/ad_txt_tom300.htm" frameborder="no" width="302" scrolling="no" height="160">
mysql有一套先進的但非標準的安全/授權系統,掌握其授權機制是開始操作mysql資料庫必須要走的第一步,對於乙個熟悉sql基本操作的人來說,也是mysql所有的知識中比較難以理解的乙個部分。本文通過揭開其授權系統的運作機制,希望大家能夠可以更好地操作和使用這個優秀的資料庫系統。
1、授權機制的主要作用是什麼?
授權機制的基本作用是給某個主機上的使用者對某個資料庫以select,insert,update和detete的許可權。而其額外的功能還包括是否允許匿名使用資料庫,使用mysql的一些特定函式,如:load data infile之類。在這裡請注意,mysql中的使用者名稱和unix系統中的使用者名稱並沒有什麼關係。雖然許多客戶端程式允許你可以用當前的使用者名稱進行登入,但是最標準的做法還是通過--user的選項。
2、授權機制是如何進行運作的?
在mysql中主機和使用者的聯合視為唯一標誌。比如說,在主機1和主機2上的使用者lee實際上是不同的,他們對mysql的使用許可權也可以是有差別的。而整個授權機制的核心問題就是要解決授予從某個主機上登入的某個使用者對某個資料庫的使用許可權。你可以通過指令碼mysqlaccess測試乙個主機上使用者的對資料庫操作的許可權。而所有的授權資訊都被儲存在資料庫mysql的user、host和db表中。我們可以通過mysql mysql的指令連線到這個資料庫中,並且通過select * from user(或者db,host)顯示每個資料表中的內容。user表中所授予的許可權是整個授權機制的基本授權,也就是說,user中的定義對於任何乙個使用者+主機來說都是適用的,除非在db表中另外有所定義,因此,對於使用者來說最好是就某個資料庫為基礎進行授權。而host表的主要目的是維護乙個「安全」伺服器的列表。而在具體考慮某個使用者/主機對某個資料庫的許可權的的時候,我們還需要研究一下授權機制的的匹配搜尋機制:
其次,在授權機制中可以對乙個使用者的口令進行加密,而且是必須加密,加密的方法是password('口令'),如果直接填寫口令的話,會導致資料庫無法訪問。user表中所授予的許可權是整個授權機制的基本授權,也就是說,user中的定義對於任何乙個使用者+主機來說都是適用的,除非在db表中另外有所定義,因此,對於使用者來說最好是就某個資料庫為基礎進行授權。而host表的主要目的是維護乙個「安全」伺服器的列表。而在具體考慮某個使用者/主機對某個資料庫的許可權的的時候,我們還需要研究一下授權機制的的匹配搜尋機制:
shell> mysql mysql.
mysql> insert into user (host,user,password)
values('localhost','custom',password('stupid'));
mysql> insert into user (host,user,password)
values('server.domain','custom',password('stupid'));
mysql> insert into user (host,user,password)
values('whitehouse.gov','custom',password('stupid'));
mysql> insert into db
(host,db,user,select_priv,insert_priv,update_priv,delete_priv,
create_priv,drop_priv)
values
('localhost','bankaccount','custom','y','y','y','y','y','y');
mysql> insert into db
(host,db,user,select_priv,insert_priv,update_priv,delete_priv,
create_priv,drop_priv)
values
('%','customers','custom','y','y','y','y','y','y');
3、授權資料表
授權資料表對錶的行操作包括select,insert,update和delete,對錶和資料庫的操作包括create和drop。其它的授權還包括如load data infile和select into outfile和管理命令:shutdown, reload, refresh 和process.三個授權資料表的結構如下所示:
user表
字段 型別 健 預設值
host char(60) pri ""
user char(16) pri ""
password char(16) - ""
select_priv enum('n','y') - n
insert_priv enum('n','y') - n
update_priv enum('n','y') - n
delete_priv enum('n','y') - n
create_priv enum('n','y') - n
drop_priv enum('n','y') - n
reload_priv enum('n','y') - n
shutdown_priv enum('n','y') - n
process_priv enum('n','y') - n
file_priv enum('n','y') - n
db表
字段 型別 健 預設值
host char(60) pri ""
db char(64) pri ""
user char(16) pri ""
select_priv enum('n','y') - n
insert_priv enum('n','y') - n
update_priv enum('n','y') - n
delete_priv enum('n','y') - n
create_priv enum('n','y') - n
drop_priv enum('n','y') - n
host 表只有在db的資料項**現host為空的情況下使用。
字段 型別 健 預設值
host char(60) pri ""
db char(64) pri ""
select_priv enum('n','y') - n
insert_priv enum('n','y') - n
update_priv enum('n','y') - n
delete_priv enum('n','y') - n
create_priv enum('n','y') - n
drop_priv enum('n','y') - n
在資料表中可以使用統配符號。
4、最常見的access denied出現錯誤的原因
5、如何使得mysql更加安全?
(1)為每個mysql使用者使用口令。記住,如果你不加設口令的話,其他人可以通過mysql --user other_user database的方式訪問你的資料庫,在使用mysql進行檢測的時候系統也會給你相應的警告資訊。
(2)不要用root方式啟動mysql服務。mysql可以以任何使用者啟動。你可以通過新增乙個新使用者的方式來啟動資料庫服務。這也不會對系統造成任何影響,因為mysql的使用者和unix的使用者根本來說就使不同的。
(3)不要把'process_priv','file_priv'等許可權授予任何人。
(4)如果你不信任你的dns,你應當使用ip來取代主機名。在任何情況下都要小心帶匹佩符的主機名。以下的一些選項可以影響到你的系統的安全:
--secure
顧名思義,可以使系統根加安全,因為它可以檢查ip位址的一致性。(實際連線ip位址和通過解析的ip位址),不過這使得mysql在防火牆工作的時候很難被防火牆外的人所訪問。
--skip-grant-tables
一般情況下不要使用這個選項,這可以試的任何人不受限制地訪問你的系統。
--skip-name-resolve
不進行主機名的解析。在授權資料表中的所有主機名必須為ip位址或者'localhost'.
--skip-networking
不允許通過網路進行連線。所有的連線必須通過unix socket。
mysql 使用者管理 MySQL使用者管理
一 mysql使用者管理的必要性 如果我們只能使用root使用者,這樣安全隱患,這時,我們需要使用mysql的使用者管理技術.一次獲得 分配許可權user db tables priv columns priv 許可權範圍一次遞減,全域性許可權覆蓋區域性許可權。換句話說user表中的每個許可權都代表...
mysql授權 使用者管理 MySQL使用者管理 授權
建立使用者 命令 create user username host identified by password 說明 username 建立的使用者名稱 host 使用者可以在哪個主機上登入,任意主機選擇 password 使用者的密碼 例 create user arvin identifie...
mysql中的使用者與許可權管理
我就直接po 了 mysql中的使用者與許可權管理 使用者要連線mysql資料庫伺服器 分為2個階段 1.你有沒有權連線上來 2.你有沒有權執行此操作 如select,update等等 對於1,伺服器如何判斷使用者有沒有權連線上來?依據3個引數 host 你從哪兒來?user 你是誰?passwor...