數(shù)據庫基礎(chǔ):MySQL 添加用(yòng)戶的兩(liǎng)種方(fāng)法
有(yǒu)2個不同(tóng)的方法增加用戶:通(tōng)過使用(yòng)GRANT語句或通過直接(jiē)操作MySQL授權表。比較(jiào)好(hǎo)的(de)方法是使(shǐ)用GRANT語句,因為(wéi)他們是更簡明並且好像錯誤少些。
下麵的例子顯示(shì)出如何使用MySQL客戶安裝新用戶。這些例子假(jiǎ)定權限已(yǐ)缺(quē)省被安裝。這意味(wèi)著為了改變,你必(bì)須在MySQL正在運行同一台機器上(shàng),你必須作為MySQL root用戶連接,並且root用戶必須對MySQL數據庫有insert權限和reload管理(lǐ)權限。另外,如(rú)果你(nǐ)改變了root用戶口令,你必須如下的MySQL命令指定(dìng)它。
你(nǐ)可(kě)以通過發出(chū)GRANT語句(jù)增加新用(yòng)戶:
shell> mysql --user=root mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost
IDENTIFIED BY 'something' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%"
IDENTIFIED BY 'something' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
mysql> GRANT USAGE ON *.* TO dummy@localhost;
這些GRANT語句安裝3個(gè)新用戶:
monty:可以從(cóng)任何地方(fāng)連(lián)接服務器的一個完全的超級(jí)用戶,但是(shì)必須使用(yòng)一個口令('something'做這個。注意,我們必須對(duì)monty@localhost和(hé)monty@"%"發出GRANT語句。如果(guǒ)我們(men)增加localhost條目(mù),對localhost的匿名用戶條目在我們從本(běn)地主機連接接(jiē)時由mysql_install_db創建的條(tiáo)目將優先考慮,因為(wéi)它有更特定的Host字段值,所(suǒ)以(yǐ)以(yǐ)user表排列順(shùn)序看更早到來。
admin:可以從localhost沒有一個(gè)口令進行(háng)連接並(bìng)且被(bèi)授予reload和(hé)process管理權限(xiàn)的用戶。這允許用戶執行(háng)mysqladmin reload、mysqladmin refresh和mysqladmin flush-*命令,還有(yǒu)mysqladmin processlist。沒有授予數據庫有關的權限(xiàn)。他們(men)能在以(yǐ)後通過發(fā)出另一個GRANT語句授權。
dummy:可以(yǐ)不用一個口令連接的一個用戶,但是隻能(néng)從(cóng)本(běn)地主(zhǔ)機(jī)。全局(jú)權限被設置為'N'--USAGE權(quán)限類型允許你無需權限就可設(shè)置一個(gè)用戶(hù)。它假定你將在以(yǐ)後授予(yǔ)數據庫相關的權限。
你也可(kě)以直(zhí)接(jiē)通過發出INSERT語句增加(jiā)同樣的用戶(hù)存取(qǔ)信息,然後(hòu)告(gào)訴服務器再次裝入授權(quán)表:
shell> mysql --user=root mysql
mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('something'),
'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')
mysql> INSERT INTO user VALUES('%','monty',PASSWORD('something'),
'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')
mysql> INSERT INTO user SET Host='localhost',User='admin',
Reload_priv='Y', Process_priv='Y';
mysql> INSERT INTO user (Host,User,Password)
VALUES('localhost','dummy','');
mysql> FLUSH PRIVILEGES;
取決(jué)於你的MySQL版本(běn),對上述,你(nǐ)可能必須使用一個不(bú)同數目(mù)'Y'值(在3.22.11以前的版本有更少的權限(xiàn)列)。對admin用(yòng)戶,隻用在3.22.11開始的(de)版本具有的更(gèng)加可讀(dú)的INSERT擴充的語法。
注意,為了設置(zhì)一個超級用戶,你隻(zhī)需創造一個user表條目,其權限(xiàn)字段設為(wéi)'Y'。不需要db或host表的條目。
在user表中的權限(xiàn)列不(bú)是由(yóu)最後一個(gè)INSERT語句(jù)明確設置的(對dummy用戶),因此那些列(liè)被賦予缺(quē)省值'N'。這是GRANT USAGE做的同樣(yàng)的事情。
下列例子增加一個用戶custom,他能從主機 localhost、server.domain和whitehouse.gov連接。他隻想(xiǎng)要從localhost存取bankaccount數據庫(kù),從(cóng)whitehouse.gov存取expenses數據庫和從所有3台(tái)主機存取(qǔ)customer數據庫。他(tā)想要從所有3台(tái)主機上使用口令stupid。
為了(le)使(shǐ)用(yòng)GRANT語(yǔ)句(jù)設置個用戶的(de)權限,運(yùn)行這些命(mìng)令:
shell> mysql --user=root
mysql mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON bankaccount.*
TO custom@localhost
IDENTIFIED BY 'stupid';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON expenses.*
TO custom@whitehouse.gov
IDENTIFIED BY 'stupid';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON customer.*
TO custom@'%'
IDENTIFIED BY 'stupid';
通過直接修改授(shòu)權表設置用戶權限,運行這(zhè)些命令(注意,在結束時FLUSH PRIVILEGES):
shell> mysql --user=root
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
('whitehouse.gov','expenses','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('%','customer','custom','Y','Y','Y','Y','Y','Y');
mysql> FLUSH PRIVILEGES;
頭3個INSERT語句(jù)增加user表條目,允許用戶 custom用給定口令從不同(tóng)的主機進(jìn)行連(lián)接,但(dàn)是沒(méi)有授予任何許可(kě)(所有權限被(bèi)設置(zhì)為缺省值'N')。後3個INSERT語句增加db表條目,授予 custom以(yǐ)bankaccount、expenses和customer數據庫權限,但是隻能在從(cóng)正確的主機存取時。通常(cháng),在授權表直接被修改時,服(fú)務(wù)器必須(xū)被告知再次裝入他(tā)們(用FLUSH PRIVILEGES)以便使權限修(xiū)改(gǎi)生效。 如果(guǒ)你想要給(gěi)特定的用戶從一個(gè)給定的域上的任何機器上存取權限,你(nǐ)可以發(fā)出(chū)一個(gè)如下(xià)的GRANT語(yǔ)句:
mysql> GRANT ...
ON *.*
TO myusername@"%.mydomainname.com"
IDENTIFIED BY 'mypassword';
為了通(tōng)過直接修改(gǎi)授權表做同樣的事情,這樣(yàng)做:
mysql> INSERT INTO user VALUES ('%.mydomainname.com', 'myusername',
PASSWORD('mypassword'),...);
mysql> FLUSH PRIVILEGES;
你也可以使用xmysqladmin、mysql_webadmin甚至(zhì)xmysql在(zài)授權表中插入(rù)、改變和更新值。你可以在MySQL的Contrib目錄找到這些(xiē)實用程序。
關鍵詞:數據庫,MySQL
閱讀本文後您有什(shí)麽感想? 已有 人給出評價!
- 0
- 0
- 0
- 0
- 2
- 0