mysql 全局select授权_MySQL的用户设置与授权
你可以有2個不同的方法增加用戶:通過使用GRANT語句或通過直接操作MySQL授權表??。比較好的方法是使用GRANT語句,因為他們是更簡明并且好像錯誤少些??。
使用SHOW GRANTS語句顯示用戶的授權
你可以直接查看授權表,也可以使用SHOW GRANTS語句查看某個用戶的授權,這種情況下使用SHOW GRANTS語句顯然要方便一些??。
語法:SHOW GRANTS FOR user_name
為了容納對任意主機的用戶授予的權利,MySQL支持以user@host格式指定user_name值??。
例如,下面的語句顯示一個用戶admin的權限:
mysql>SHOW GRANTS FOR admin@localhost;
其結果為創(chuàng)建該用戶的GRNAT授權語句:
GRANT RELOAD, SHUTDOWN, PROCESS ON *.* TO admin@localhost IDENTIFIED BY PASSWORD 28e89ebc62d6e19a
使用GRANT語句創(chuàng)建用戶并授權
GRANT語句的語法
GRANT priv_type (columns)
ON what
TO user IDENTIFIED BY “password”
WITH GRANT OPTION
要使用該語句,需要填寫以下部分:
·priv_type 分配給用戶的權限??。
priv_type可以指定下列的任何一個:
ALL PRIVILEGES????? FILE??????????????? RELOAD
ALTER???????????????INDEX?????????????? SELECT
CREATE????????????? INSERT????????????? SHUTDOWN
DELETE????????????? PROCESS???????????? UPDATE
DROP??????????????? REFERENCES????????? USAGE
ALL是ALL PRIVILEGES的一個同義詞,REFERENCES還沒被實現(xiàn),USAGE當前是“沒有權限”的一個同義詞??。它能用在你想要創(chuàng)建一個沒有權限用戶的時候??。
對于表,你能指定的唯一priv_type值是SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、GRANT、INDEX和ALTER??。
對于列,你能指定的唯一priv_type值是(即,當你使用一個column_list子句時)是SELECT、INSERT和UPDATE??。
·columns 權限適用的列??。
這是可選的,只來設置列專有的權限??。如果命名多于一個列,則用逗號分開??。
·what 權限應用的級別
GRANT允許系統(tǒng)主管在4個權限級別上授權MySQL用戶的權利:
·全局級別
全局權限作用于一個給定服務器上的所有數(shù)據(jù)庫??。這些權限存儲在mysql.user表中??。 你能通過使用ON *.*語法設置全局權限
·數(shù)據(jù)庫級別
數(shù)據(jù)庫權限作用于一個給定數(shù)據(jù)庫的所有表??。這些權限存儲在mysql.db和mysql.host表中??。 你能通過使用ON db_name.*語法設置數(shù)據(jù)庫權限??。如果你指定ON *并且你有一個當前數(shù)據(jù)庫,你將為該數(shù)據(jù)庫設置權限??。(警告:如果你指定ON *而你沒有一個當前數(shù)據(jù)庫,你將影響全局權限!)
·表級別
表權限作用于一個給定表的所有列??。這些權限存儲在mysql.tables_priv表中??。你能透過 ON tbl_name,為具體的表名設置權限??。
·列級別
列權限作用于在一個給定表的單個列??。這些權限存儲在mysql.columns_priv表中??。你可以通過指定一個columns子句將權限授予特定的列,同時要在ON子句中指定具體的表??。
對與一個表或列的權限是由4個權限級別的邏輯或形成的??。例如,如果mysql.user表指定一個用戶有一個全局select權限,它不能被數(shù)據(jù)庫、表或列的一個條目否認??。
對于一個列的權限能如下計算:
global privileges
OR (database privileges AND host privileges)
OR table privileges
OR column privileges
在大多數(shù)情況下,你只授予用戶一個權限級別上的權限,因此現(xiàn)實通常不象上面所說的那樣復雜??。
user 使用權限的用戶??。
為了容納對任意主機的用戶授予的權利,MySQL支持以user@host格式指定user_name值??。如果你想要指定一個特殊字符的一個user字符串(例如“-”),或一個包含特殊字符或通配符的host字符串(例如“%”),你可以用括號括起能用戶或主機名字 (例如,test-user@test-hostname)??。
你能在主機名中指定通配符??。例如,user@"%.loc.gov"適用于在loc.gov域中任何主機的user,并且user@"144.155.166.%"適用于在144.155.166類 C 子網(wǎng)中任何主機的user??。
簡單形式的user是user@"%"的一個同義詞??。注意:如果你允許匿名用戶連接MySQL服務器(它是缺省的),你也應該增加所有本地用戶如user@localhost,因為否則,當用戶試圖從本地機器上登錄到MySQL服務器時,對于mysql.user表中的本地主機的匿名用戶條目將被使用!匿名用戶通過插入有User=的條目到mysql.user表中來定義??。通過執(zhí)行這個查詢,你可以檢驗它是否作用于你:
mysql> SELECT Host,User FROM mysql.user WHERE User=;
·password 分配給該用戶的口令??。這也是可選的??。
在MySQL 3.22.12或以后,如果創(chuàng)建一個新用戶或如果你有全局授予權限,用戶的口令將被設置為由IDENTIFIED BY子句指定的口令,如果給出一個??。如果用戶已經(jīng)有了一個口令,它被一個新的代替??。
警告:如果你創(chuàng)造一個新用戶但是不指定一個IDENTIFIED BY子句,用戶沒有口令??。這是不安全的??。
·WITH GRANT OPTION子句是可選的??。
WITH GRANT OPTION子句給與用戶有授予其他用戶在指定的權限水平上的任何權限的能力??。你應該謹慎對待你授予他grant權限的用戶,因為具有不同權限的兩個用戶也許能合并權限!
創(chuàng)建用戶并授權的實例
創(chuàng)建一個具有超級用戶權利的用戶:
mysql>GRANT ALL ON *.* TO anyname@localhost IDENTIFIED BY "passwd"->WITH GRANT OPTION
該語句將在user表中為anyname@localhost創(chuàng)建一個記錄,打開所有權限??。
數(shù)據(jù)庫級權限用一個ON db_name.*子句而不是ON *.*進行授權:
mysql>GRANT ALL ON sample.* TO boris@localhost IDENTIFIED BY "ruby"
這些權限不是全局的,所以它們不存儲在user表中,我們?nèi)匀恍枰趗ser表中創(chuàng)建一條記錄(使得用戶能連接),但我們也需要創(chuàng)建一個db表記錄記錄數(shù)據(jù)庫集的權限??。
直接修改授權表創(chuàng)建用戶并授權
如果你還記得前面的介紹,你應該能即使不用GRANT語句也能做GRANT做的事情??。記住在你直接修改授權表時,你將通知服務器重載授權表,否則他不知道你的改變??。你可以執(zhí)行一個mysqladmin flush-privileges或mysqladmin reload命令和FLUSH PRIVILEGES語句強迫一個重載??。如果你忘記做這個,你會疑惑為什么服務器不做你想做的事情??。
下列GRANT語句創(chuàng)建一個擁有所有權的超級用戶??。包括授權給別人的能力:
GRANT ALL ON *.* TO anyname@localhost IDENTIFIED BY "passwd" WITH GRANT OPTION
該語句將在user表中為anyname@localhost創(chuàng)建一個記錄,打開所有權限,因為這里是超級用戶(全局)權限存儲的地方,要用INSERT語句做同樣的事情,語句是:
INSERT INTO user? VALUES("localhost","anyname",PASSWORD("passwd"),
"Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y")
你可能發(fā)現(xiàn)它不工作,這要看你的MySQL版本??。授權表的結構已經(jīng)改變而且你在你的user表可能沒有14個權限列??。用SHOW COLUMNS找出你的授權表包含的每個權限列,相應地調(diào)整你的INSERT語句??。 下列GRANT語句也創(chuàng)建一個擁有超級用戶身份的用戶,但是只有一個單個的權限:
GRANT RELOAD ON *.* TO flush@localhost IDENTIFIED BY "flushpass"
本例的INSERT語句比前一個簡單,它很容易列出列名并只指定一個權限列??。所有其它列將設置為缺省的"N":
INSERT INTO user (Host,Password,Reload) VALUES("localhost","flush",PASSWORD("flushpass"),"Y")
數(shù)據(jù)庫級權限用一個ON db_name.*子句而不是ON *.*進行授權:
GRANT ALL ON sample.* TO boris@localhost IDENTIFIED BY "ruby"
這些權限不是全局的,所以它們不存儲在user表中,我們?nèi)匀恍枰趗ser表中創(chuàng)建一條記錄(使得用戶能連接),但我們也需要創(chuàng)建一個db表記錄記錄數(shù)據(jù)庫集權限:
mysql> INSERT INTO user (Host,User,Password)
-> VALUES("localhost","boris",PASSWORD("ruby")) ;
mysql> INSERT INTO db VALUES
-> ("localhost","sample_db","boris","Y","Y","Y","Y","Y","Y","N","Y","Y","Y");
"N"列是為GRANT權限;對末尾的一個數(shù)據(jù)庫級具有WITH GRANT OPTION的GRANT語句,你要設置該列為"Y"??。
要設置表級或列級權限,你對tables_priv或columns_priv使用INSERT語句??。當然,如果你沒有GRANT語句,你將沒有這些表,因為它們在MySQL中同時出現(xiàn)??。如果你確實有這些表并且為了某些原因想要手工操作它們,要知道你不能用單獨的列啟用權限??。
你設置tables_priv.Table_priv或columns_priv.Column_priv列來設置包含你想啟用的權限值??。例如,要對一個表啟用SELECT和INSERT權限,你要在相關的tables_priv的記錄中設置Table_priv為"Select,Insert"??。
總結
以上是生活随笔為你收集整理的mysql 全局select授权_MySQL的用户设置与授权的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java定义json数组_Java面试题
- 下一篇: mysql delete in死锁_my