2016年3月28日 星期一

MySQL 新增使用者及建立資料庫權限


首先在指令模式用 MySQL 的 root 帳號連接到 MySQL:
輪入 MySQL root 的密碼後便可以進入 MySQL 的指令模式。
然後為新帳號建立資料庫, 以下會以 “database” 為例子:
下一步是建立 MySQL 新帳號, 以下例子會建立 “123” 帳號, 密碼是 “password”, 主機是 “localhost”:
然後給予新帳號 “123” 權限讀寫新資料庫 “database”:
現在已經完成設定, 可以測試一下新帳號 “123” 是否可以使用新資料庫 “newdatabase”:
輸入在上面設定的密碼, 以上例子是用 “password”, 如果沒有問題, 就可以用新使用者的身份連接 MySQL.

MySQL資料庫權限設定

MySQL資料庫授權或刪除使用者權限有分成本機及遠端,因為MySQL資料庫權限設定會將帳號的權限設定給那些主機,設定localhost的話,那該帳號只能在MySQL資料庫本機使用,不過要開放給遠端主機連線MySQL資料庫主機的話,那就必須將帳號設定給遠端主機使用,下方介紹方式都是授權或刪除所有權限,MySQL權限有很多可以參考下表

資料庫(DateBase)十五種權限
ALL PRIVILEGES、ALTER、CREATE、DELETE、DROP、FILE、INDEX、INSERT、PROCESS、REFERENCES、RELOAD、SELECT、SHUTDOWN、UPDATE、USAGE

資料表(Table)八種權限
SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、INDEX、ALTER

資料欄(column)三種權限
SELECT INSERT UPDATE

授權使用者權限
授權使用者帳號jerry有本機及遠端管理的權限,MySQL資料庫遠端管理是要針對IP位址設定,就是假如設定jerry給遠端192.168.1.2的IP位址使用,那192.168.1.3的IP位址就不可以遠端管理,就必需再開啟給該IP位址的遠端管理權限。以下示範如何開啟本機及遠端。

MySQL資料庫授權使用者權限指令說明
grant
授權
all privileges
所有管理權限
*.*
所有資料庫
localhost
本機位址
192.168.1.2
遠端連線IP位址
jerry
授權帳號
Aa1234567
授權密碼
管理權限範例為所有權限,至於實際情況,請依需求設定。
[root@localhost ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.52 Source distribution

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> grant all privileges on *.* to 123@localhost identified by '密碼';
Query OK, 0 rows affected (0.00 sec)     //建立jerry本機管理權限

mysql> grant all privileges on *.* to 123@localhost identified by '密碼';
Query OK, 0 rows affected (0.01 sec)   //建立 'xxx' 帳號遠端管理


mysql> select host,user from mysql.user;   //列出MySQL所有授權帳號
+-----------------------+-------+
| host                  | user  |
+-----------------------+-------+
| 127.0.0.1             | root  |
192.168.1.2           | 123 |       //帳號jerry遠端管理授權
| localhost             |       |
localhost             | 123 |       //帳號jerry本機管理授權
| localhost             | root  |
| localhost.localdomain |       |
| localhost.localdomain | root  |
+-----------------------+-------+
7 rows in set (0.00 sec)

mysql> quit   //離開MySQL
Bye
[root@localhost ~]#

2016年3月25日 星期五

Linux 檔案權限, 變更權限的方法

因為 Linux 是多人多工的 OS, 所以, 檔案系統必須要有一套嚴密的保護措施, 以免, 因為有意或無意的人為破壞, 造成混亂及損失.
. Linux 將檔案分成三種身份、四種權限:
三種身份是:
  • u: 自己(user)
  • g: 和自己同一組的人(group)
  • o: 其它人 (other)
而 a 則是代表所有的人.
每種身份皆有四種可能的權限:
  • r : 讀取權 (read)
  • w : 寫入權 (write)
  • x :執行權 (execute)
及: (上面這三種權限用得最多, 以下則較少用, 也請儘量不使用, 除非你確實知道你在做啥麼?!)
  • s : set user id / set group id 及 t : sticky bit (簡稱為 sst 模式)
    4000 : set user id, 2000 set group id, 1000 set sticky bit
Linux 用 9 個 bits 來代表檔案的權限, 如下所示:
-- - -- - -- -
-rwxrwxrwx
 擁有人同組人其它人
每三個形成一組, 由左至右, 分別代表擁有人、同組人、其它人的權限.
每一組的三個位置, 由左至右為: 讀取,寫入,執行的權限, 若該位置只有一條線, 則表示不具有該權限.
另外, 我們也用數字來代表不同的權限:
  • 讀取: 4
  • 寫入: 2
  • 執行: 1
如果某檔, 其擁有的權限為 rwx 的話, 那麼, 我們便把它們所代表的數字大小加起來, 即 4+2+1 =7
以下是可能的組合:
---0
--x1
-w-2
r--4
-wx2+1=3
r-x4+1=5
rw-4+2=6
rwx7

2. 改變權限的方法.
有兩種改變檔案權限的方法:
  • 八進位數字模式
  • 符號模式
使用的指令是: chmod (change mode : change the access permissions of files)
方法如下:
chmod  權限  檔案/目錄
例:
  • chmod 666 myfile
  • chmod 777 myfile
  • chmod 755 myfile
  • chmod 111 myfile
以上是採八進位數字模式
  • chmod u+x myfile
  • chmod u-x myfile
  • chmod ug+x myfile
  • chmod g-x myfile
  • chmod o+x myfile
  • chmod o-x myfile
  • chmod a+x myfile
  • chmod a-x myfile
  • chmod a=x myfile
  • chmod u=wr myfile
  • chmod go=rx myfile
以上是採符號模式.
+ 表增加該種權限
- 表去掉該種權限
= 表設定作該種權限
3. 目錄的權限.
目錄的權限, 觀念及設法, 同於檔案的權限, 但其包含的意義則大不相同.
以 "可執行的" 這個權限而言, 對檔案來說, 若該檔設為可執行的話, 其意義很容易了解, 但如果將目錄設為可執行, 那麼難道目錄真的是可以執行的嗎? :-Q
當然不是.
Linux 對於目錄的權限, 另有一套看法:
r可列出目錄中的檔案名稱, 即 ls 有作用
w在該目錄中, 可刪檔,改檔名,建新檔
x可以進入該目錄之中(重要觀念, 用處大)
如果某一個目錄下, 尚有許多檔案和子目錄, 有無方法可以一次改變所有的檔案權限呢?
當然有.
chmod -R 權限 目錄名稱
其中 -R 表示 Recursively change permissions of directories and their contents, 意即遞迴地將其下的所有檔案、目錄全數改變.
4. 改變檔案的擁有者(owner) 或 組別 (group)
通常這只有 root 等級的使用者, 才有此項權力. (否則就天下大亂了! 不過, 某些 Uuix clone 開放有限制的作法)
方法如下:
chown [-R] owner:group 檔案/目錄
例:
chown -R 3slo:hacker /home/ols3

在 Linux 或其他 Unix 作業系統, 每個檔案及目錄都會有一個權限, 這個權限會定義誰可以存取, 寫入及執行該檔案。
一般上權限的數值分為 3 組, 分別是 owner, 群組用戶, 其他用戶, 這 3 組權限可以用數字或者英文字代號設定, 以下是各數字及字母伐號的意思:
r: 可讀權限, 數字是 4
w: 寫入權限, 數字是 2
x: 執行權限, 數字是 1
-: 刪除權限, 數字是 0
s: setuid 權限
例如我要設定檔案 file.txt 的權限, owner 可以讀/寫/執行; 群組用戶可以讀/執行; 其他用戶只可以讀, 指令是這樣:
$ chmod u=rwx,g=rx,o=r file.txt
如果覺得上面的語法很麻煩, 可以用數字代替字母代號:
$ chmod 754 file.txt
上面看到有 3 組數字, 分別是代表 owner (7); 群組用戶 (5); 其他用戶 (4)。而這個 754 是這樣算出的:
7 = 4 (讀) + 2 (寫) + 1 (執行)
5 = 4 (讀) + 1 (執行)
4 = 4 (讀)
以下是 chmod 其他一些使用例子:
設定 file.txt 的權限為: owner 可讀/寫/執行; 群組用戶可讀; 其他用戶可讀:
$ chmod 644 file.txt
設定 file.txt 的權限為: owner 可讀/寫, 群組用戶及其他用戶的權限不變:
$ chmod u=rw file.txt
一般 CGI 程式要用 755, 表示設定 test.cgi 的權限為: owner 可讀/寫/執行, 群組用戶及其他用戶可讀/執行:
$ chmod 755 test.cgi
一般 PHP 及 CGI 程式要上傳檔案或寫入檔案, 要將目錄設定 777, owner, 群組用戶及其他用戶可讀/寫/執行:
$ chmod 777 uploads
使用 s 是 setuid 權限, 所有人存取樣案 file.txt 會用 owner 的身份, 如果這個用在可執行的 root 用戶檔案很危險:
$ chmod u+s file.txt
將檔案 file.txt 的 setuid 權限刪除:
$ chmod u-s file.txt