你可以有2個不同的方法增加用戶:通過使用grant語句或通過直接操作mysql授權表。比較好的方法是使用grant語句,因為他們是更簡明并且好像錯誤少些。
下面的例子顯示出如何使用mysql客戶安裝新用戶。這些例子假定權限根據以前的章節描述的缺省被安裝。這意味著為了改變,你必須在mysqld正在運行同一臺機器上,你必須作為mysql root用戶連接,并且root用戶必須對mysql數據庫有insert權限和reload管理權限。另外,如果你改變了root用戶口令,你必須如下的mysql命令指定它。
你可以通過發出grant語句增加新用戶:
shell> mysql --user=root mysql
mysql> grant all privileges on *.* to [email protected]t
identified by 'something' with grant option;
mysql> grant all privileges on *.* to [email protected]"%"
identified by 'something' with grant option;
mysql> grant reload,process on *.* to [email protected];
mysql> grant usage on *.* to [email protected];
這些grant語句安裝3個新用戶:
monty
可以從任何地方連接服務器的一個完全的超級用戶,但是必須使用一個口令('something'做這個。注意,我們必須對[email protected]和[email protected]"%"發出grant語句。如果我們增加localhost條目,對localhost的匿名用戶條目在我們從本地主機連接接時由mysql_install_db創建的條目將優先考慮,因為它有更特定的host字段值,所以以user表排列順序看更早到來。
admin
可以從localhost沒有一個口令進行連接并且被授予reload和process管理權限的用戶。這允許用戶執行mysqladmin reload、mysqladmin refresh和mysqladmin flush-*命令,還有mysqladmin processlist。沒有授予數據庫有關的權限。他們能在以后通過發出另一個grant語句授權。
dummy
可以不用一個口令連接的一個用戶,但是只能從本地主機。全局權限被設置為'n'--usage權限類型允許你無需權限就可設置一個用戶。它假定你將在以后授予數據庫相關的權限。
你也可以直接通過發出insert語句增加同樣的用戶存取信息,然后告訴服務器再次裝入授權表:
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;
取決于你的mysql版本,對上述,你可能必須使用一個不同數目'y'值(在3.22.11以前的版本有更少的權限列)。對admin用戶,只用在3.22.11開始的版本具有的更加可讀的insert擴充的語法。
注意,為了設置一個超級用戶,你只需創造一個user表條目,其權限字段設為'y'。不需要db或host表的條目。
在user表中的權限列不是由最后一個insert語句明確設置的(對dummy用戶),因此那些列被賦予缺省值'n'。這是grant usage做的同樣的事情。
下列例子增加一個用戶custom,他能從主機localhost、server.domain和whitehouse.gov連接。他只想要從localhost存取bankaccount數據庫,從whitehouse.gov存取expenses數據庫和從所有3臺主機存取customer數據庫。他想要從所有3臺主機上使用口令stupid。
為了使用grant語句設置個用戶的權限,運行這些命令:
shell> mysql --user=root mysql
mysql> grant select,insert,update,delete,create,drop
on bankaccount.*
to [email protected]
identified by 'stupid';
mysql> grant select,insert,update,delete,create,drop
on expenses.*
to [email protected]
identified by 'stupid';
mysql> grant select,insert,update,delete,create,drop
on customer.*
to [email protected]'%'
identified by 'stupid';
通過直接修改授權表設置用戶權限,運行這些命令(注意,在結束時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語句增加user表條目,允許用戶custom用給定口令從不同的主機進行連接,但是沒有授予任何許可(所有權限被設置為缺省值'n')。后3個insert語句增加db表條目,授予custom以bankaccount、expenses和customer數據庫權限,但是只能在從正確的主機存取時。通常,在授權表直接被修改時,服務器必須被告知再次裝入他們(用flush privileges)以便使權限修改生效。
如果你想要給特定的用戶從一個給定的域上的任何機器上存取權限,你可以發出一個如下的grant語句:
mysql> grant ...
on *.*
to [email protected]"%.mydomainname.com"
identified by 'mypassword';
為了通過直接修改授權表做同樣的事情,這樣做:
mysql> insert into user values ('%.mydomainname.com', 'myusername',
password('mypassword'),...);
mysql> flush privileges;
你也可以使用xmysqladmin、mysql_webadmin甚至xmysql在授權表中插入、改變和更新值。你可以在mysql的contrib目錄找到這些實用程序。
,歡迎訪問網頁設計愛好者web開發。