mysql在使用用戶時比較獨特,用戶的帳號由兩部分組成(用戶帳號:username@hostname)用戶名加上主機名,它的意義是指定哪個用戶賬號允許通過哪個主機連入mysql服務器。所以@後面的主機名,可以是一個IP,也可以是一個網段,也可以用通配符指定一些主機名等,連放時使用什麼樣的密碼,得使用password指定,
用戶帳號管理:
CREATE USER
DROP UESER
RENAME USER
SET PASSWORD
權限管理:
GRANT ALL ON [FUNCTION] *.*
GRANT priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [TABLE|FUNCTION|PROCEDURE] priv_level #指定FUNCTION後的是【表|函數|過程】
TO username@hostname [IDENTIFIED BY 'password'], [username@hostname [],...]
[REQUIRE SSL]
[WITH with_option ...]
priv_level:權限級別
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
with_option:
GRANT OPTION #把自己的權限轉贈給其它用戶
| MAX_QUERIES_PER_HOUR count #每小時允許執行查詢的最多請求次數
| MAX_UPDATES_PER_HOUR count #每小時執行最大的更新次數
| MAX_CONNECTIONS_PER_HOUR count #每小時執行的最大的連接次數
| MAX_USER_CONNECTIONS count #指定使用同一個賬號最多能同時連接幾次
收回授權:
REVOKE
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [, user] ...
REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user [, user] ...
幾個跟用戶授權相關的表:
db: 庫級別權限;
host: 主機級別權限,已廢棄
tables_priv: 表級別權限
colomns_priv: 列級別的權限
procs_priv: 存儲過程和存儲函數相關的權限
proxies_priv: 代理用戶權限
1、創建用戶 CREATE USER username@hostname [IDENTIFIED BY [PASSWORD] 'password' ]
例:我們限定用戶名是testuser的用戶,只能通過172.16.100.100-172.16.100.199的網段進行訪問,密碼爲testpass
create user testuser@'172.16.100.1__'identified by 'testpass'
2、給戶改名:rename user
例:MariaDB [(none)]> rename user 'testuser'@'172.16.%.%' to 'tuser'@'172.16.%.%';
Query OK, 0 rows affected (0.00 sec)
3、修改密碼:set password
例:MariaDB [(none)]> set password for 'tuser'@'172.16.%.%' = password('tpass');
Query OK, 0 rows affected (0.00 sec)
4、授權用戶只能創建某一個表:
例:MariaDB [(none)]> grant create on testdb.tb1 to 'tuser'@'172.16.%.%';
想獲得創建庫的權限則:
MariaDB [(none)]> grant create on testdb.* to 'tuser'@'172.16.%.%';
Query OK, 0 rows affected (0.00 sec)
5、授權用戶有刪除數據的權限:
MariaDB [(none)]> grant drop on testdb.* to 'tuser'@'172.16.%.%';
6、授權用戶有查看、插入、刪除權限:
MariaDB [(none)]> grant insert,select,update,delete on testdb.* to 'tuser'@'172.16.%.%';
7、查看用戶具有哪些權限的命令:SHOW GRANTS FOR username@'hostname'
MariaDB [(none)]> show grants for 'tuser'@'172.16.%.%';
+---------------------------------------------------------------------------------------------------------------+
| Grants for [email protected].%.% |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'tuser'@'172.16.%.%' IDENTIFIED BY PASSWORD '*B11C65003C4F734D29ACF16FBE8E5764934807EC' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON `testdb`.* TO 'tuser'@'172.16.%.%' |
| GRANT CREATE ON `testdb`.`tb1` TO 'tuser'@'172.16.%.%' |
+---------------------------------------------------------------------------------------------------------------+
8、權限收回(收回剛纔用戶的創建表的權限)
MariaDB [(none)]>revoke create on testdb.tb1 from 'tuser'@'172.16.%.%';
9、收回所有的權限:
MariaDB [(none)]>revoke all on testdb.* from 'tuser'@'172.16.%.%';
二、mysql的數據類弄
複合類型
MySQL 還支持兩種複合數據類型 ENUM 和 SET,它們擴展了 SQL 規範。雖然這些類型在技術上是字符串類型,但是可以被視爲不同的數據類型。一個 ENUM 類型只允許從一個集合中取得一個值;而 SET 類型允許從一個集合中取得任意多個值。
ENUM 類型
ENUM 類型因爲只允許在集合中取得一個值,有點類似於單選項。在處理相互排拆的數據時容易讓人理解,比如人類的性別。ENUM 類型字段可以從集合中取得一個值或使用 null 值,除此之外的輸入將會使 MySQL 在這個字段中插入一個空字符串。另外如果插入值的大小寫與集合中值的大小寫不匹配,MySQL 會自動使用插入值的大小寫轉換成與集合中大小寫一致的值。
ENUM 類型在系統內部可以存儲爲數字,並且從 1 開始用數字做索引。一個 ENUM 類型最多可以包含 65536 個元素,其中一個元素被 MySQL 保留,用來存儲錯誤信息,這個錯誤值用索引 0 或者一個空字符串表示。
MySQL 認爲 ENUM 類型集合中出現的值是合法輸入,除此之外其它任何輸入都將失敗。這說明通過搜索包含空字符串或對應數字索引爲 0 的行就可以很容易地找到錯誤記錄的位置。
SET 類型
SET 類型與 ENUM 類型相似但不相同。SET 類型可以從預定義的集合中取得任意數量的值。並且與 ENUM 類型相同的是任何試圖在 SET 類型字段中插入非預定義的值都會使 MySQL 插入一個空字符串。如果插入一個即有合法的元素又有非法的元素的記錄,MySQL 將會保留合法的元素,除去非法的元素。
三、字符屬性修飾符
1)CHAR、VARCHAR和TEXT幾種字符型常用的屬性修飾符:
NOT NULL: 非空約束
NULL: 允許爲空
DEFAULT 'string': 默認值,不適用於TEXT類型
CHARACTER SET '字符集'
2)BINARY、VARBINARY和BLOB幾種字符型常用的屬性修飾符:
NOT NULL
NULL
DEFAULT: 不適用於BLOB
3)整型的常用屬性修飾符:
AUTO_INCREMENT: 自動增長
前提:非空,且惟一;支持索引,非負值;
UNSIGNED: 無符號
NULL 允許爲空
NOT NULL 非空約束
DEFAULT
三、系統變量