好紧好涨好大,国产亚洲精品999,在线激情视品,草av在线观看,制服av五区,香蕉伊人小说网,国产99热久久99,久久涩涩久久,日韩入B视频

首頁(yè)資訊商務(wù)會(huì)員鋼材特鋼不銹爐料鐵礦煤焦鐵合金有色化工水泥財(cái)經(jīng)指數(shù)人才會(huì)展鋼廠海外研究統(tǒng)計(jì)數(shù)據(jù)手機(jī)期貨論壇百科搜索導(dǎo)航短信English
鋼鐵博客  游客歸來(lái)
鋼之家社區(qū)
鋼之家 | 鋼鐵博客 | 鋼鐵論壇 | 鋼鐵百科
歡迎登陸博客    游客的辯論

 【收藏】MySQL 存取權(quán)限系統(tǒng)

字體: 評(píng)論:2 點(diǎn)擊:3031


1. MySQL 用戶名和口令

* MySQL使用于認(rèn)證目的的用戶名,與Unix用戶名(登錄名字)或Windows用戶名無(wú)關(guān)。缺省地,大多數(shù)MySQL客戶嘗試使用當(dāng)前Unix用戶名作為MySQL用戶名登錄,但是這僅僅為了方便,客戶程序允許用-u或--user選項(xiàng)指定一個(gè)不同的名字。及與安全的考慮,所有的MySQL用戶名都應(yīng)該有口令。

* MySQL用戶名最長(zhǎng)可以是16各字符;典型地,Unix用戶名限制為8個(gè)字符。

* MySQL口令與Unix口令沒(méi)關(guān)系。

* MySQL加密口令使用了一個(gè)Unix登錄期間所用的不同算法,PASSWORD()和ENCRYPT()

函數(shù)PASSWORD(str)

從純文本口令str計(jì)算一個(gè)口令字符串。該函數(shù)被用于為了在user授權(quán)表的Password列中存儲(chǔ)口令而加密MySQL口令。

mysql> select PASSWORD('badpwd');

-> '7f84554057dd964b'

PASSWORD()加密是非可逆的。PASSWORD()不以與Unix口令加密的相同的方法執(zhí)行口令加密。你不應(yīng)該假定如果你的Unix 口令和你的MySQL口令是一樣的,PASSWORD()將導(dǎo)致與在Unix口令文件存儲(chǔ)的相同的加密值。見(jiàn)ENCRYPT()。

ENCRYPT(str[,salt])

使用Unix crypt()系統(tǒng)調(diào)用加密str。salt參數(shù)應(yīng)該是一個(gè)有2個(gè)字符的字符串。(MySQL 3.22.16中,salt可以長(zhǎng)于2個(gè)字符。)

mysql> select ENCRYPT("hello");

-> 'VxuFAJXVARROc'

如果crypt()在你的系統(tǒng)上不可用,ENCRYPT()總是返回NULL。ENCRYPT()只保留str起始8個(gè)字符而忽略所有其他,至少在某些系統(tǒng)上是這樣。這將由底層的crypt()系統(tǒng)調(diào)用的行為決定。

1. 與MySQL服務(wù)器連接

語(yǔ)法格式:

shell> mysql [-h host_name][-u user_name][-pyour_pass ]

-h, -u和-p選項(xiàng)的另一種形式是--host=host_name、--user=user_name和--password=your_pass。

注意:在-p或--password=與跟隨它后面的口令之間沒(méi)有空格。(在命令行上指定一個(gè)口令是不安全的。

對(duì)于命令行沒(méi)有的聯(lián)接參數(shù),mysql使用缺省值:

* 缺省主機(jī)名是localhost。

* 缺省用戶名是你的Unix登錄名。

* 如果沒(méi)有-p,則沒(méi)有提供口令。

缺省值參數(shù)的指定:

在你的主目錄下“.my.cnf”的配置文件的[client]小節(jié)里指定連接參數(shù):

[client]

host=host_name

user=user_name

password=your_pass

注:命令行上被指定的值優(yōu)先于在配置文件和環(huán)境變量中指定的值

最安全的方法是讓客戶程序提示口令或在一個(gè)適當(dāng)保護(hù)的“.my.cnf”文件中指定口令。

1. MySQL提供的權(quán)限

權(quán)限   列   上下文

select Select_priv 表

insert Insert_priv 表

update Update_priv 表

delete Delete_priv 表

index Index_priv 表

alter Alter_priv 表

create Create_priv 數(shù)據(jù)庫(kù)、表或索引

drop Drop_priv 數(shù)據(jù)庫(kù)或表

grant Grant_priv 數(shù)據(jù)庫(kù)或表

references References_priv 數(shù)據(jù)庫(kù)或表

reload Reload_priv 服務(wù)器管理

shutdown Shutdown_priv 服務(wù)器管理

process Process_priv 服務(wù)器管理

file File_priv 在服務(wù)器上的文件存取

注:grant權(quán)限允許你把你自己擁有的那些權(quán)限授給其他的用戶。

file權(quán)限給予你用LOAD DATA INFILE和SELECT ... INTO OUTFILE語(yǔ)句讀和寫(xiě)服務(wù)器上的文件,任何被授予這個(gè)權(quán)限的用戶都能讀或?qū)慚ySQL服務(wù)器能讀或?qū)懙娜魏挝募?br />
2. 存取控制:連接證實(shí)

身份檢查使用user表3個(gè)(Host, User和Password)范圍字段。服務(wù)器只有在一個(gè)user表?xiàng)l目匹配你的主機(jī)名和用戶名并且你提供了正確的口令時(shí)才接受連接。

注:一個(gè)Host值可以是主機(jī)名或一個(gè)IP數(shù)字,或'localhost'指出本地主機(jī)。 可以在Host字段里使用通配符字符“%”和“_”。 Host值'%'匹配任何主機(jī)名。當(dāng)一個(gè)連接被嘗試時(shí),服務(wù)器瀏覽排序的條目并使用找到的第一個(gè)匹配。

普遍的誤解是認(rèn)為,對(duì)一個(gè)給定的用戶名,當(dāng)服務(wù)器試圖對(duì)連接尋找匹配時(shí),明確命名那個(gè)用戶的所有條目將首先被使用。這明顯不是事實(shí)。

3. 存取控制:請(qǐng)求證實(shí)

一旦你建立了一個(gè)連接,服務(wù)器進(jìn)入階段2。對(duì)在此連接上進(jìn)來(lái)的每個(gè)請(qǐng)求,服務(wù)器檢查你是否有足夠的權(quán)限來(lái)執(zhí)行它,授權(quán)表用GRANT和REVOKE命令操作。

GRANT priv_type [(column_list)]
[, priv_type [(column_list)] ...]

ON {tbl_name | * | *.* | db_name.*}

TO user_name [IDENTIFIED BY 'password']
[, user_name [IDENTIFIED BY 'password'] ...]
[WITH GRANT OPTION]

REVOKE priv_type [(column_list)]
[, priv_type [(column_list)] ...]

ON {tbl_name | * | *.* | db_name.*}

FROM user_name [, user_name ...]

GRANT在MySQL 3.22.11或以后版本中實(shí)現(xiàn)。對(duì)于更早MySQL版本,GRANT語(yǔ)句不做任何事情。

GRANT和REVOKE命令允許系統(tǒng)主管在4個(gè)權(quán)限級(jí)別上授權(quán)和撤回賦予MySQL用戶的權(quán)利:

全局級(jí)別

全局權(quán)限作用于一個(gè)給定服務(wù)器上的所有數(shù)據(jù)庫(kù)。這些權(quán)限存儲(chǔ)在mysql.user表中。

數(shù)據(jù)庫(kù)級(jí)別

數(shù)據(jù)庫(kù)權(quán)限作用于一個(gè)給定數(shù)據(jù)庫(kù)的所有表。這些權(quán)限存儲(chǔ)在mysql.db和mysql.host表中。

表級(jí)別

表權(quán)限作用于一個(gè)給定表的所有列。這些權(quán)限存儲(chǔ)在mysql.tables_priv表中。

列級(jí)別

列權(quán)限作用于在一個(gè)給定表的單個(gè)列。這些權(quán)限存儲(chǔ)在mysql.columns_priv表中。

user表權(quán)限是超級(jí)用戶權(quán)限。只把user表的權(quán)限授予超級(jí)用戶如服務(wù)器或數(shù)據(jù)庫(kù)主管是明智的。對(duì)其他用戶,你應(yīng)該把在user表中的權(quán)限設(shè)成'N'并且僅在一個(gè)特定數(shù)據(jù)庫(kù)的基礎(chǔ)上授權(quán), 使用db和host表。

4. 權(quán)限更改何時(shí)生效

當(dāng)mysqld啟動(dòng)時(shí),所有的授權(quán)表內(nèi)容被讀進(jìn)存儲(chǔ)器并且從那點(diǎn)生效。

用GRANT、REVOKE或SET PASSWORD對(duì)授權(quán)表施行的修改會(huì)立即被服務(wù)器注意到。

如果你手工地修改授權(quán)表(使用INSERT、UPDATE等等),你應(yīng)該執(zhí)行一個(gè)FLUSH PRIVILEGES語(yǔ)句或運(yùn)行mysqladmin flush-privileges告訴服務(wù)器再裝載授權(quán)表,否則你的改變將不生效,除非你重啟服務(wù)器。

5. 建立初始的MySQL權(quán)限

在安裝MySQL后,你通過(guò)運(yùn)行scripts/mysql_install_db安裝初始的存取權(quán)限。包含下列權(quán)限集合:

* MySQL root用戶作為可做任何事情的一個(gè)超級(jí)用戶。連接必須由本地主機(jī)發(fā)出。注意:出世的root口令是空的,因此任何人能以root而沒(méi)有一個(gè)口令進(jìn)行連接并且被授予所有權(quán)限。

* 一個(gè)匿名用戶,他可對(duì)有一個(gè)'test'或以'test_'開(kāi)始的名字的數(shù)據(jù)庫(kù)做任何時(shí)期事情,連接必須由本地主機(jī)發(fā)出。這意味著任何本地用戶能連接并且視為匿名用戶。

* 其他權(quán)限被拒絕。例如,一般用戶不能使用mysqladmin shutdown或mysqladmin processlist。

為MySQL root用戶指定一個(gè)口令(注意,你使用PASSWORD()函數(shù)指定口令):

shell> mysql -u root mysql

mysql> UPDATE user SET Password=PASSWORD('new_password')

WHERE user='root';

mysql> FLUSH PRIVILEGES;

在MySQL 3.22和以上版本中,你可以使用SET PASSWORD語(yǔ)句:

shell> mysql -u root mysql

mysql> SET PASSWORD FOR root=PASSWORD('new_password');

設(shè)置口令的另一種方法是使用mysqladmin命令:

shell> mysqladmin -u root password new_password

看看scripts/mysql_install_db腳本,看它如何安裝缺省的權(quán)限。你可用它作為一個(gè)研究如何增加其他用戶的基礎(chǔ)

為了完全重建權(quán)限表,刪除在包含mysql數(shù)據(jù)庫(kù)的目錄下所有“*.frm”,“*.MYI”和“*.MYD”文件。(這是在數(shù)據(jù)庫(kù)目錄下面命名為 “mysql”的目錄,當(dāng)你運(yùn)行mysqld --help時(shí),它被列出。)然后運(yùn)行mysql_install_db腳本,可能在首先編輯它擁有你想要的權(quán)限之后。

1. 向MySQL增加新用戶權(quán)限

增加用戶2個(gè)不同的方法:

通過(guò)使用GRANT語(yǔ)句或通過(guò)直接操作MySQL授權(quán)表。

比較好的方法是使用GRANT語(yǔ)句,因?yàn)樗麄兪歉?jiǎn)明并且好像錯(cuò)誤少些。

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;

monty

可以從任何地方連接服務(wù)器的一個(gè)完全的超級(jí)用戶,但是必須使用一個(gè)口令('something'做這個(gè)。注意,我們必須對(duì)monty@localhost 和monty@"%"發(fā)出GRANT語(yǔ)句。如果我們?cè)黾觢ocalhost條目,對(duì)localhost的匿名用戶條目在我們從本地主機(jī)連接接時(shí)由 mysql_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)限的用戶。這允許用戶執(zhí)行mysqladmin reload、mysqladmin refresh和mysqladmin flush-*命令,還有mysqladmin processlist。沒(méi)有授予數(shù)據(jù)庫(kù)有關(guān)的權(quán)限。他們能在以后通過(guò)發(fā)出另一個(gè)GRANT語(yǔ)句授權(quán)。

dummy

可以不用一個(gè)口令連接的一個(gè)用戶,但是只能從本地主機(jī)。全局權(quán)限被設(shè)置為'N'--USAGE權(quán)限類型允許你無(wú)需權(quán)限就可設(shè)置一個(gè)用戶。它假定你將在以后授予數(shù)據(jù)庫(kù)相關(guān)的權(quán)限。

也可以直接通過(guò)發(fā)出INSERT語(yǔ)句增加同樣的用戶存取信息,然后告訴服務(wù)器再次裝入授權(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;

下列例子增加一個(gè)用戶custom,他能從主機(jī)localhost、server.domain和whitehouse.gov連接。他只想要從 localhost存取bankaccount數(shù)據(jù)庫(kù),從whitehouse.gov存取expenses數(shù)據(jù)庫(kù)和從所有3臺(tái)主機(jī)存取customer 數(shù)據(jù)庫(kù)。他想要從所有3臺(tái)主機(jī)上使用口令stupid。

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';

※ ※ ※ 本文純屬【游客】個(gè)人意見(jiàn),與【鋼之家鋼鐵博客】立場(chǎng)無(wú)關(guān).※ ※ ※

回復(fù):【收藏】MySQL 存取權(quán)限系統(tǒng)
評(píng)論人: 青鳥(niǎo)的天空 發(fā)表時(shí)間: 2007-05-29 17:50
這些貌似以前都學(xué)過(guò),但現(xiàn)如今,都已經(jīng)統(tǒng)統(tǒng)還給老師了。(老師對(duì)不起)

回復(fù):【收藏】MySQL 存取權(quán)限系統(tǒng)
評(píng)論人: 海水正藍(lán) 發(fā)表時(shí)間: 2007-05-14 11:31
看迷糊了


您希望聯(lián)系哪位客服?(單擊選擇)

临汾市| 玉龙| 太白县| 博野县| 浦东新区| 库伦旗| 盐津县| 浮梁县| 阜康市| 泰来县| 通江县| 即墨市| 临泽县| 西吉县| 蛟河市| 天峨县| 曲沃县| 云南省| 诸城市| 鄂托克旗| 雷波县| 巫溪县| 定远县| 阿城市| 格尔木市| 黔西| 丽江市| 龙井市| 墨江| 夏邑县| 神木县| 从江县| 怀化市| 登封市| 冷水江市| 平原县| 旬阳县| 武强县| 扶绥县| 贵南县| 涡阳县|