MySQL數(shù)據(jù)庫(kù)中如何正確增加新用戶(hù)權(quán)限?
此文章主要向大家講述的是在MySQL數(shù)據(jù)庫(kù)中增加新用戶(hù)權(quán)限的實(shí)際操作流程,我在一個(gè)信譽(yù)度很好的網(wǎng)站找到一個(gè)關(guān)于MySQL數(shù)據(jù)庫(kù)中增加新用戶(hù)權(quán)限的實(shí)際操作流程的資料,拿出來(lái)供大家分享。
有2個(gè)不同的方法增加用戶(hù):通過(guò)使用GRANT語(yǔ)句或通過(guò)直接操作MySQL(和PHP搭配之最佳組合)授權(quán)表。比較好的方法是使用GRANT語(yǔ)句,因?yàn)樗麄兪歉?jiǎn)明并且好像錯(cuò)誤少些。
下面的例子顯示出如何使用MySQL(和PHP搭配之最佳組合)客戶(hù)安裝新用戶(hù)。這些例子假定權(quán)限根據(jù)以前的章節(jié)描述的缺省被安裝。這意味著為了改變,你必須在MySQL(和PHP搭配之最佳組合)d正在運(yùn)行同一臺(tái)機(jī)器上,你必須作為MySQL(和PHP搭配之最佳組合) root用戶(hù)連接,并且root用戶(hù)必須對(duì)MySQL數(shù)據(jù)庫(kù)有insert權(quán)限和reload管理權(quán)限。另外,如果你改變了root用戶(hù)口令,你必須如下的MySQL(和PHP搭配之最佳組合)命令指定它。
你可以通過(guò)發(fā)出GRANT語(yǔ)句增加新用戶(hù):
shell> MySQL(和PHP搭配之最佳組合) --user=root MySQL(和PHP搭配之最佳組合)
MySQL(和PHP搭配之最佳組合)> GRANT ALL PRIVILEGES ON *.* TO monty@localhost
IDENTIFIED BY 'something' WITH GRANT OPTION;
MySQL(和PHP搭配之最佳組合)> GRANT ALL PRIVILEGES ON *.* TO monty@"%"
IDENTIFIED BY 'something' WITH GRANT OPTION;
MySQL(和PHP搭配之最佳組合)> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
MySQL(和PHP搭配之最佳組合)> GRANT USAGE ON *.* TO dummy@localhost;
這些GRANT語(yǔ)句安裝3個(gè)新用戶(hù):
monty
可以從任何地方連接服務(wù)器的一個(gè)完全的超級(jí)用戶(hù),但是必須使用一個(gè)口令('something'做這個(gè)。注意,我們必須對(duì)monty@localhost和monty@"%"發(fā)出GRANT語(yǔ)句。如果我們?cè)黾觢ocalhost條目,對(duì)localhost的匿名用戶(hù)條目在我們從本地主機(jī)連接接時(shí)由MySQL(和PHP搭配之最佳組合)_install_db創(chuàng)建的條目將優(yōu)先考慮,因?yàn)樗懈囟ǖ腍ost字段值,所以以u(píng)ser表排列順序看更早到來(lái)。
admin
可以從localhost沒(méi)有一個(gè)口令進(jìn)行連接并且被授予reload和process管理權(quán)限的用戶(hù)。這允許用戶(hù)執(zhí)行MySQL(和PHP搭配之最佳組合)admin reload、MySQL(和PHP搭配之最佳組合)admin refresh和MySQL(和PHP搭配之最佳組合)admin flush-*命令,還有MySQL(和PHP搭配之最佳組合)admin processlist。沒(méi)有授予MySQL數(shù)據(jù)庫(kù)有關(guān)的權(quán)限。他們能在以后通過(guò)發(fā)出另一個(gè)GRANT語(yǔ)句授權(quán)。
dummy
可以不用一個(gè)口令連接的一個(gè)用戶(hù),但是只能從本地主機(jī)。全局權(quán)限被設(shè)置為'N'--USAGE權(quán)限類(lèi)型允許你無(wú)需權(quán)限就可設(shè)置一個(gè)用戶(hù)。它假定你將在以后授予MySQL數(shù)據(jù)庫(kù)相關(guān)的權(quán)限。
你也可以直接通過(guò)發(fā)出INSERT語(yǔ)句增加同樣的用戶(hù)存取信息,然后告訴服務(wù)器再次裝入授權(quán)表:
shell> MySQL(和PHP搭配之最佳組合) --user=root MySQL(和PHP搭配之最佳組合)
MySQL(和PHP搭配之最佳組合)> INSERT INTO user VALUES('localhost','monty',PASSWORD('something'),
'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')
MySQL(和PHP搭配之最佳組合)> INSERT INTO user VALUES('%','monty',PASSWORD('something'),
'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')
MySQL(和PHP搭配之最佳組合)> INSERT INTO user SET Host='localhost',User='admin',
Reload_priv='Y', Process_priv='Y';
MySQL(和PHP搭配之最佳組合)> INSERT INTO user (Host,User,Password)
VALUES('localhost','dummy','');
MySQL(和PHP搭配之最佳組合)> FLUSH PRIVILEGES;
取決于你的MySQL(和PHP搭配之最佳組合)版本,對(duì)上述,你可能必須使用一個(gè)不同數(shù)目'Y'值(在3.22.11以前的版本有更少的權(quán)限列)。對(duì)admin用戶(hù),只用在3.22.11開(kāi)始的版本具有的更加可讀的INSERT擴(kuò)充的語(yǔ)法。
注意,為了設(shè)置一個(gè)超級(jí)用戶(hù),你只需創(chuàng)造一個(gè)user表?xiàng)l目,其權(quán)限字段設(shè)為'Y'。不需要db或host表的條目。
在user表中的權(quán)限列不是由最后一個(gè)INSERT語(yǔ)句明確設(shè)置的(對(duì)dummy用戶(hù)),因此那些列被賦予缺省值'N'。這是GRANT USAGE做的同樣的事情。
下列例子增加一個(gè)用戶(hù)custom,他能從主機(jī)localhost、server.domain和whitehouse.gov連接。他只想要從localhost存取MySQL數(shù)據(jù)庫(kù),從whitehouse.gov存取expenses數(shù)據(jù)庫(kù)和從所有3臺(tái)主機(jī)存取customer數(shù)據(jù)庫(kù)。他想要從所有3臺(tái)主機(jī)上使用口令stupid。
為了使用GRANT語(yǔ)句設(shè)置個(gè)用戶(hù)的權(quán)限,運(yùn)行這些命令:
shell> MySQL(和PHP搭配之最佳組合) --user=root MySQL(和PHP搭配之最佳組合)
MySQL(和PHP搭配之最佳組合)> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON bankaccount.*
TO custom@localhost
IDENTIFIED BY 'stupid';
MySQL(和PHP搭配之最佳組合)> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON expenses.*
TO custom@whitehouse.gov
IDENTIFIED BY 'stupid';
MySQL(和PHP搭配之最佳組合)> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON customer.*
TO custom@'%'
IDENTIFIED BY 'stupid';
通過(guò)直接修改授權(quán)表設(shè)置用戶(hù)權(quán)限,運(yùn)行這些命令(注意,在結(jié)束時(shí)FLUSH PRIVILEGES):
shell> MySQL(和PHP搭配之最佳組合) --user=root MySQL(和PHP搭配之最佳組合)
MySQL(和PHP搭配之最佳組合)> INSERT INTO user (Host,User,Password)
VALUES('localhost','custom',PASSWORD('stupid'));
MySQL(和PHP搭配之最佳組合)> INSERT INTO user (Host,User,Password)
VALUES('server.domain','custom',PASSWORD('stupid'));
MySQL(和PHP搭配之最佳組合)> INSERT INTO user (Host,User,Password)
VALUES('whitehouse.gov','custom',PASSWORD('stupid'));
MySQL(和PHP搭配之最佳組合)> 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(和PHP搭配之最佳組合)> INSERT INTO db
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
VALUES
('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y');
MySQL(和PHP搭配之最佳組合)> INSERT INTO db
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
VALUES('%','customer','custom','Y','Y','Y','Y','Y','Y');
MySQL(和PHP搭配之最佳組合)> FLUSH PRIVILEGES;
頭3個(gè)INSERT語(yǔ)句增加user表?xiàng)l目,允許用戶(hù)custom用給定口令從不同的主機(jī)進(jìn)行連接,但是沒(méi)有授予任何許可(所有權(quán)限被設(shè)置為缺省值'N')。后3個(gè)INSERT語(yǔ)句增加db表?xiàng)l目,授予custom以bankaccount、expenses和MySQL數(shù)據(jù)庫(kù)權(quán)限,但是只能在從正確的主機(jī)存取時(shí)。通常,在授權(quán)表直接被修改時(shí),服務(wù)器必須被告知再次裝入他們(用FLUSH PRIVILEGES)以便使權(quán)限修改生效。
如果你想要給特定的用戶(hù)從一個(gè)給定的域上的任何機(jī)器上存取權(quán)限,你可以發(fā)出一個(gè)如下的GRANT語(yǔ)句:
MySQL(和PHP搭配之最佳組合)> GRANT ...
ON *.*
TO myusername@"%.mydomainname.com"
IDENTIFIED BY 'mypassword';
為了通過(guò)直接修改授權(quán)表做同樣的事情,這樣做:
MySQL(和PHP搭配之最佳組合)> INSERT INTO user VALUES ('%.mydomainname.com', 'myusername',
PASSWORD('mypassword'),...);
MySQL(和PHP搭配之最佳組合)> FLUSH PRIVILEGES;
你也可以使用xMySQL(和PHP搭配之最佳組合)admin、MySQL(和PHP搭配之最佳組合)_webadmin甚至xMySQL(和PHP搭配之最佳組合)在授權(quán)表中插入、改變和更新值。你可以在MySQL(和PHP搭配之最佳組合)的Contrib目錄找到這些實(shí)用程序。
【編輯推薦】
- MySQL數(shù)據(jù)表?yè)p壞的巧妙修復(fù)
- MySQL數(shù)據(jù)庫(kù)文件壞掉,不用急!
- MySQL 5 中易忘的使用性較強(qiáng)的命令
- 實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)同步大演練
- 巧用c# 連接MySQL中文亂碼問(wèn)題