源碼庫對MySQL存取權限的一些理解
2024-07-24 12:40:43
供稿:網友
MySQL使用于認證目的的用戶名,與Unix用戶名(登錄名字)或Windows用戶名無關。缺省地,大多數MySQL客戶嘗試使用當前Unix用戶名作為MySQL用戶名登錄,但是這僅僅為了方便,客戶程序允許用-u或--user選項指定一個不同的名字。及與安全的考慮,所有的MySQL用戶名都應該有口令。 1. MySQL 用戶名和口令 * MySQL使用于認證目的的用戶名,與Unix用戶名(登錄名字)或Windows用戶名無關。缺省地,大多數MySQL客戶嘗試使用當前Unix用戶名作為MySQL用戶名登錄,但是這僅僅為了方便,客戶程序允許用-u或--user選項指定一個不同的名字。及與安全的考慮,所有的MySQL用戶名都應該有口令。 * MySQL用戶名最長可以是16各字符;典型地,Unix用戶名限制為8個字符。 * MySQL口令與Unix口令沒關系。 * MySQL加密口令使用了一個Unix登錄期間所用的不同算法,PASSWORD()和ENCRYPT() 函數PASSWORD(str) 從純文本口令str計算一個口令字符串。該函數被用于為了在user授權表的Password列中存儲口令而加密MySQL口令。 mysql> select PASSWORD('badpwd'); -> '7f84554057dd964b' PASSWORD()加密是非可逆的。PASSWORD()不以與Unix口令加密的相同的方法執行口令加密。你不應該假定如果你的Unix 口令和你的MySQL口令是一樣的,PASSWORD()將導致與在Unix口令文件存儲的相同的加密值。見ENCRYPT()。 ENCRYPT(str[,salt]) 使用Unix crypt()系統調用加密str。salt參數應該是一個有2個字符的字符串。(MySQL 3.22.16中,salt可以長于2個字符。) mysql> select ENCRYPT("hello"); -> 'VxuFAJXVARROc' 如果crypt()在你的系統上不可用,ENCRYPT()總是返回NULL。ENCRYPT()只保留str起始8個字符而忽略所有其他,至少在某些系統上是這樣。這將由底層的crypt()系統調用的行為決定。 1. 與MySQL服務器連接 語法格式: shell> mysql [-h host_name][-u user_name][-pyour_pass ] -h, -u和-p選項的另一種形式是--host=host_name、--user=user_name和--password=your_pass。 注意:在-p或--password=與跟隨它后面的口令之間沒有空格。(在命令行上指定一個口令是不安全的!) 對于命令行沒有的聯接參數,mysql使用缺省值: * 缺省主機名是localhost。 * 缺省用戶名是你的Unix登錄名。 * 如果沒有-p,則沒有提供口令。 缺省值參數的指定: 在你的主目錄下“.my.cnf”的配置文件的[client]小節里指定連接參數: [client] host=host_name user=user_name password=your_pass 注:命令行上被指定的值優先于在配置文件和環境變量中指定的值 最安全的方法是讓客戶程序提示口令或在一個適當保護的“.my.cnf”文件中指定口令。 1. MySQL提供的權限 權限 列 上下文 select Select_priv 表 insert Insert_priv 表 update Update_priv 表 delete Delete_priv 表 index Index_priv 表 alter Alter_priv 表 create Create_priv 數據庫、表或索引 drop Drop_priv 數據庫或表 grant Grant_priv 數據庫或表 references References_priv 數據庫或表 reload Reload_priv 服務器管理 shutdown Shutdown_priv 服務器管理 process Process_priv 服務器管理 file File_priv 在服務器上的文件存取 注:grant權限允許你把你自己擁有的那些權限授給其他的用戶。 file權限給予你用LOAD DATA INFILE和SELECT ... INTO OUTFILE語句讀和寫服務器上的文件,任何被授予這個權限的用戶都能讀或寫MySQL服務器能讀或寫的任何文件。 2. 存取控制:連接證實 身份檢查使用user表3個(Host, User和Password)范圍字段。服務器只有在一個user表條目匹配你的主機名和用戶名并且你提供了正確的口令時才接受連接。 注:一個Host值可以是主機名或一個IP數字,或'localhost'指出本地主機。 可以在Host字段里使用通配符字符“%”和“_”。 Host值'%'匹配任何主機名。當一個連接被嘗試時,服務器瀏覽排序的條目并使用找到的第一個匹配。 普遍的誤解是認為,對一個給定的用戶名,當服務器試圖對連接尋找匹配時,明確命名那個用戶的所有條目將首先被使用。這明顯不是事實。