查看用戶權限php
show grants for你的用戶;html
show grants forroot@'localhost';mysql
show grants forwebgametest@10.3.18.158;web
showcreatedatabase dbname; 這個能夠看到建立數據庫時用到的一些參數。 sql
showcreatetable tickets; 能夠看到建立表時用到的一些參數數據庫
使用用戶權限緩存
GRANTUSAGE ON*.* TO'discuz'@'localhost'IDENTIFIED BYPASSWORD '*C242DDD213BE9C6F8DA28D49245BF69FC79A86EB';安全
GRANTALL PRIVILEGES ON `discuz`.* TO'discuz'@'localhost';服務器
我先按個人理解解釋一下上面兩句的意思ide
創建一個只能夠在本地登錄的 不能操做的用用戶名 discuz 密碼爲 ***** 已經加密了的
而後第二句的意思是 ,給這個discuz用戶操做discuz數據庫的全部權限
使用GRANT
GRANT命令用來創建新用戶,指定用戶口令並增長用戶權限。其格式以下:
mysql>GRANT<privileges>ON<what>
->TO<user> [IDENTIFIED BY"<password>"]
-> [WITHGRANT OPTION];
正如你看到的,在這個命令中有許多待填的內容。讓咱們逐一地對它們進行介紹,並最終給出一些例子以讓你對它們的協同工做有一個瞭解。
<privileges>是一個用逗號分隔的你想要賦予的權限的列表。你能夠指定的權限能夠分爲三種類型:
數據庫/數據表/數據列權限:Alter: 修改已存在的數據表(例如增長/刪除列)和索引。
Create: 創建新的數據庫或數據表。
Delete: 刪除表的記錄。
Drop: 刪除數據表或數據庫。
INDEX: 創建或刪除索引。
Insert: 增長表的記錄。
Select: 顯示/搜索表的記錄。
Update: 修改表中已存在的記錄。
全局管理權限:
file: 在MySQL服務器上讀寫文件。
PROCESS: 顯示或殺死屬於其它用戶的服務線程。
RELOAD: 重載訪問控制表,刷新日誌等。
SHUTDOWN: 關閉MySQL服務。
特別的權限:
ALL: 容許作任何事(和root同樣)。
USAGE: 只容許登陸--其它什麼也不容許作。
這些權限所涉及到的MySQL的特徵,其中的一些咱們至今還沒看到,而其中的絕大部分是你所熟悉的。
<what> 定義了這些權限所做用的區域。*.*意味着權限對全部數據庫和數據表有效。dbName.*意味着對名爲dbName的數據庫中的全部數據表有效。 dbName.tblName意味着僅對名爲dbName中的名爲tblName的數據表有效。你甚至還能夠經過在賦予的權限後面使用圓括號中的數據列的列表以指定權限僅對這些列有效(在後面咱們將看到這樣的例子)。
<user>指定能夠應用這些權限的用戶。在MySQL中,一個用戶經過它登陸的用戶名和用戶使用的計算機的主機名/IP地址來指定。這兩個值均可以使用%通配符(例如kevin@%將容許使用用戶名kevin從任何機器上登陸以享有你指定的權限)。
<password>指定了用戶鏈接MySQL服務所用的口令。它被用方括號括起,說明IDENTIFIEDBY"<password>"在GRANT命令中是可選項。這裏指定的口令會取代用戶原來的密碼。若是沒有爲一個新用戶指定口令,當他進行鏈接時就不須要口令。
這個命令中可選的WITHGRANT OPTION部分指定了用戶可使用GRANT/REVOKE命令將他擁有的權限賦予其餘用戶。請當心使用這項功能--雖然這個問題可能不是那麼明顯!例如,兩個都擁有這個功能的用戶可能會相互共享他們的權限,這也許不是你當初想看到的。
讓咱們來看兩個例子。創建一個名爲dbmanager的用戶,他可使用口令managedb從server.host.net鏈接 MySQL,並僅僅能夠訪問名爲db的數據庫的所有內容(並能夠將此權限賦予其餘用戶),這可使用下面的GRANT命令:
mysql>GRANTALL ON db.*
->TOdbmanager@server.host.net
-> IDENTIFIED BY"managedb"
->WITHGRANT OPTION;
如今改變這個用戶的口令爲funkychicken,命令格式以下:
mysql> GRANTUSAGE ON*.*
-> TOdbmanager@server.host.net
-> IDENTIFIED BY"funkychicken";
請注意咱們沒有賦予任何另外的權限(the USAGE權限只能容許用戶登陸),可是用戶已經存在的權限不會被改變。
如今讓咱們創建一個新的名爲jessica的用戶,他能夠從host.net域的任意機器鏈接到MySQL。他能夠更新數據庫中用戶的姓名和 email地址,可是不須要查閱其它數據庫的信息。也就是說他對db數據庫具備只讀的權限(例如,Select),可是他能夠對Users表的name列和email列執行Update操做。命令以下:
mysql>GRANTSelect ON db.*
->TOjessica@%.host.net
-> IDENTIFIED BY"jessrules";
mysql>GRANTUpdate (name,email)ONdb.Users
->TOjessica@%.host.net;
請注意在第一個命令中咱們在指定Jessica能夠用來鏈接的主機名時使用了%(通配符)符號。此外,咱們也沒有給他向其餘用戶傳遞他的權限的能力,由於咱們在命令的最後沒有帶上WITHGRANT OPTION。第二個命令示範瞭如何經過在賦予的權限後面的圓括號中用逗號分隔的列的列表對特定的數據列賦予權限。
-----------------------------------------------------
mysql>grantselect,insert,update,deleteon 111.* tohongdadbuser@"%"identified by"111";
測試環境:WIN32 mysql5.0.45
首先要聲明一下:通常狀況下,修改MySQL密碼,受權,是須要有mysql裏的root權限的。
注:本操做是在WIN命令提示符下,phpMyAdmin一樣適用。
用戶:phplamp 用戶數據庫:phplampDB
1.新建用戶。
//登陸MYSQL
@>mysql -u root -p
@>密碼
//建立用戶
mysql>insertinto mysql.user(Host,User,Password)values("localhost","phplamp",password("1234"));
//刷新系統權限表
mysql>flushprivileges;
這樣就建立了一個名爲:phplamp 密碼爲:1234 的用戶。
而後登陸一下。
mysql>exit;
@>mysql -u phplamp -p
@>輸入密碼
mysql>登陸成功
2.爲用戶受權。
//登陸MYSQL(有ROOT權限)。我裏我以ROOT身份登陸.
@>mysql -u root -p
@>密碼
//首先爲用戶建立一個數據庫(phplampDB)
mysql>createdatabase phplampDB;
//受權phplamp用戶擁有phplamp數據庫的全部權限。
>grantall privileges on phplampDB.* tophplamp@localhost identified by'1234';
//刷新系統權限表
mysql>flushprivileges;
mysql>其它操做
/*
若是想指定部分權限給一用戶,能夠這樣來寫:
mysql>grant select,update on phplampDB.* to phplamp@localhost identified by '1234';
//刷新系統權限表。
mysql>flush privileges;
*/
3.刪除用戶。
@>mysql -u root -p
@>密碼
mysql>DELETEFROM user WHERE User="phplamp"and Host="localhost";
mysql>flushprivileges;
//刪除用戶的數據庫
mysql>dropdatabase phplampDB;
4.修改指定用戶密碼。
@>mysql -u root -p
@>密碼
mysql>updatemysql.userset password=password('新密碼')whereUser="phplamp"and Host="localhost";
mysql>flushprivileges;
-------------------------------------------------
mysql>grantall privileges on webgame_test.* towebgametest@10.3.18.158 identified by'gametestdb';
Query OK, 0 rowsaffected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rowsaffected (0.01 sec)
mysql> exit;
show grants forwebgametest@10.3.18.158;
- mysql> grant 權限1,權限2,…權限n on 數據庫名稱.表名稱 to 用戶名@用戶地址 identified by "鏈接口令";
看上去像這樣:
- GRANT privileges (columns) ON what TO user IDENTIFIED BY "password" WITH GRANT OPTION
當權限1,權限2,…權限n被all privileges或者all代替,表示賦予用戶所有權限。
當數據庫名稱.表名稱被*.*代替,表示賦予用戶操做服務器上全部數據庫全部表的權限。
用戶地址能夠是localhost,也能夠是ip地址、機器名字、域名。也能夠用’%'表示從任何地址鏈接。
‘鏈接口令’不能爲空,不然建立失敗。
要使用該語句,你須要填寫下列部分:
privileges
授予用戶的權限,下表列出可用於GRANT語句的權限指定符:
權限指定符
權限容許的操做
ALTER 修改表和索引
CREATE 建立數據庫和表
DELETE 刪除表中已有的記錄
DROP 拋棄(刪除)數據庫和表
INDEX 建立或拋棄索引
INSERT 向表中插入新行
REFERENCE 未用
SELECT 檢索表中的記錄
UPDATE 修改現存表記錄
FILE 讀或寫服務器上的文件
PROCESS 查看服務器中執行的線程信息或殺死線程
RELOAD 重載受權表或清空日誌、主機緩存或表緩存。
SHUTDOWN 關閉服務器
ALL 全部;ALL PRIVILEGES同義詞
USAGE 特殊的「無權限」權限
上表顯示在第一組的權限指定符適用於數據庫、表和列,第二組數管理權限。通常,這些被相對嚴格地受權,由於它們容許用戶影響服務器的操做。第三組權限特殊,ALL意味着「全部權限」,UASGE意味着無權限,即建立用戶,但不授予權限。
columns
權限運用的列,它是可選的,而且你只能設置列特定的權限。若是命令有多於一個列,應該用逗號分開它們。
what
權限運用的級別。權限能夠是全局的(適用於全部數據庫和全部表)、特定數據庫(適用於一個數據庫中的全部表)或特定表的。能夠經過指定一個columns字句是權限是列特定的。
user
權限授予的用戶,它由一個用戶名和主機名組成。在MySQL中,你不只指定誰能鏈接,還有從哪裏鏈接。這容許你讓兩個同名用戶從不一樣地方鏈接。MySQL讓你區分他們,並彼此獨立地賦予權限。
MySQL中的一個用戶名就是你鏈接服務器時指定的用戶名,該名字沒必要與你的Unix登陸名或Windows名聯繫起來。缺省地,若是你不明確指定一個名字,客戶程序將使用你的登陸名做爲MySQL用戶名。這只是一個約定。你能夠在受權表中將該名字改成nobody,而後以nobody鏈接執行須要超級用戶權限的操做。
password
賦予用戶的口令,它是可選的。若是你對新用戶沒有指定IDENTIFIED BY子句,該用戶不賦給口令(不安全)。對現有用戶,任何你指定的口令將代替老口令。若是你不指定口令,老口令保持不變,當你用IDENTIFIED BY時,口令字符串用改用口令的字面含義,GRANT將爲你編碼口令,不要象你用SET PASSWORD 那樣使用password()函數。
WITH GRANT OPTION子句是可選的。若是你包含它,用戶能夠授予權限經過GRANT語句受權給其它用戶。你能夠用該子句給與其它用戶受權的能力。
用戶名、口令、數據庫和表名在受權表記錄中是大小寫敏感的,主機名和列名不是。
- mysql>grant select,insert,update,delete,create,drop on vtdc.employee to joe@10.163.225.87 identified by ‘123′;
給來自10.163.225.87的用戶joe分配可對數據庫vtdc的employee表進行select,insert,update,delete,create,drop等操做的權限,並設定口令爲123。
- mysql>grant all privileges on vtdc.* to joe@10.163.225.87 identified by ‘123′;
給來自10.163.225.87的用戶joe分配可對數據庫vtdc全部表進行全部操做的權限,並設定口令爲123。
- mysql>grant all privileges on *.* to joe@10.163.225.87 identified by ‘123′;
給來自10.163.225.87的用戶joe分配可對全部數據庫的全部表進行全部操做的權限,並設定口令爲123。
- mysql>grant all privileges on *.* to joe@localhost identified by ‘123′;
給本機用戶joe分配可對全部數據庫的全部表進行全部操做的權限,並設定口令爲123。
- flush privileges;