MySQL資料庫許可權體系入門(2)---建立使用者
二、許可權授予與回收
MySQL中對於使用者許可權的授予和解除比較靈活,即可以通過專用命令,也可以通過直接操作字典表來實現,正所謂條條道路通目標。不過話說回來,修的馬路多不叫奇蹟,何況在這片神奇的土地,奇蹟這個詞本身就是奇蹟,因此三思真是不好意思用奇蹟這樣的詞來形容:這樣想像不到的不平凡的事(注,該段描述為現代漢語詞典中關於奇蹟一詞的解釋),因此,我決定用一種加強的語氣來描述我的感受:
- 比奇蹟更神奇的是,這條條大路居然都修成了高速路;
- 比神奇的奇蹟更神奇的是,這些高速居然都是免費的;
- 比神奇的神奇奇蹟更神奇,那就是神蹟啊,額地神哪,免費的高速居然也不堵車,這肯定不是二環三環和四環,當然跟急吧(G8)線應該也沒啥關係,至少也是十八環外了,弟兄們,走吧,跟著三思去溜達溜達~~~
提示:
基於合適的使用者做符合其許可權的事的目地,執行與許可權相關操作的使用者當然也得有許可權,預設就是root了,該使用者為安裝MySQL資料庫時自動建立,需要注意MySQL資料庫的使用者跟作業系統使用者沒有任何關係,也就是說此root非彼root,本例中所做的使用者管理操作,均是使用mysql中的root使用者執行。2.1 建立使用者
MySQL中專用的建立使用者命令是CREATE USER,該命令語法如下:
CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] ...例如,先按照最簡單的方式建立一個名為jss的使用者:
mysql> create user jss;
Query OK, 0 rows affected (0.01 sec)
mysql> select user,host,password from user where user='jss';
+------+------+----------+
| user | host | password |
+------+------+----------+
| jss | % | |
+------+------+----------+
1 row in set (0.00 sec)這樣建立的使用者,可以從任意安裝了mysql客戶端,並能夠訪問目標伺服器的機器上建立連線,無須密碼。
例如,從ip:10.0.0.99的客戶端執行連線:
E:\MySQL\MySQL Server 5.1\bin>mysql -ujss -h 172.16.1.110
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 126
Server version: 5.1.49-community MySQL Community Server (GPL)
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> select user();
+---------------+
| user() |
+---------------+
| jss@10.0.0.99 |
+---------------+
1 row in set (0.00 sec)因為前面建立使用者時指定的密碼為空,因此連線時不必指定密碼即可成功建立連線。
如果希望使用者連線時,必須指定密碼,那就可以在建立使用者時,通過指定identified by子句來設定密碼,例如:
mysql> create user jss_ps identified by 'jss';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,password from user where user='jss_ps';
+--------+------+-------------------------------------------+
| user | host | password |
+--------+------+-------------------------------------------+
| jss_ps | % | *284578888014774CC4EF4C5C292F694CEDBB5457 |
+--------+------+-------------------------------------------+
1 row in set (0.00 sec)提示:
Mysql中使用者的密碼是通過md5加密過的,如果希望在指定密碼時,直接指定加密後的形式,可以通過identified by password ''子句,自行嘗試吧。這樣,當使用jss_ps使用者登陸時,就必須指定密碼,否則連線就會報錯,例如:
E:\MySQL\MySQL Server 5.1\bin>mysql -ujss_ps -h 172.16.1.110
ERROR 1045 (28000): Access denied for user 'jss_ps'@'10.0.0.99' (using password: NO)指定密碼後再次連線:
E:\MySQL\MySQL Server 5.1\bin>mysql -ujss_ps -p -h 172.16.1.110
Enter password: ***
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 131
Server version: 5.1.49-community MySQL Community Server (GPL)
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>如果希望指定的使用者只能從某臺指定的域(domain)或主機訪問,可以在建立使用者時指定host,例如,指定使用者只能從10.0.0.99訪問,執行命令如下:
mysql> create user jss_ip@10.0.0.99 identified by password '*284578888014774CC4EF4C5C292F694CEDBB5457';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,password from user where user like 'jss%';
+--------+-----------+-------------------------------------------+
| user | host | password |
+--------+-----------+-------------------------------------------+
| jss | % | |
| jss_ps | % | *284578888014774CC4EF4C5C292F694CEDBB5457 |
| jss_ip | 10.0.0.99 | *284578888014774CC4EF4C5C292F694CEDBB5457 |
+--------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)從任意非10.0.0.99的主機上執行連線會告知沒有許可權,例如:
[root@rhel5u3 ~]# mysql -ujss_ip -p -h 172.16.1.110
Enter password:
ERROR 1045 (28000): Access denied for user 'jss_ip'@'172.16.1.131' (using password: YES)綜述:
上面建立的三個使用者:
- jss:可以無須密碼從任何主機使用jss使用者訪問資料庫;
- jss_ps:從任何主機連線使用jss_ps的使用者都可以訪問資料庫;
- jss_ip:只有從10.0.0.99連線過來的使用者才能訪問資料庫。
CREATE USER只是建立使用者的高速路之一,如果你覺著這條道路實在太過平坦,路邊風景太過平淡,行程太過平常,不妨在抵達目的地之前,拐彎嘗試一下grant 大道,飽覽不一樣的風景。
Grant命令並非本小節重點,這裡僅簡要描述一下其語句中與使用者相關的部分:
GRANT priv_clause TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] ...看起來使用者部分,跟create user是差不多的,事實上當然不是差不多,根本就是一模一樣嘛,下面舉個例子,操作如下:
mysql> grant select on mysql.user to jss_grant@10.0.0.99 identified by 'jss';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,password from user where user ='jss_grant';
+-----------+-----------+-------------------------------------------+
| user | host | password |
+-----------+-----------+-------------------------------------------+
| jss_grant | 10.0.0.99 | *284578888014774CC4EF4C5C292F694CEDBB5457 |
+-----------+-----------+-------------------------------------------+
1 row in set (0.00 sec)上述語句在實現了前面第3個例子(建立使用者jss_ip)的功能外,還額外授予了jss_grant使用者查詢mysql.user表的許可權。MySQL的開發團隊靠著永不屈服、永不放棄、永不退縮、永不言敗的奮爭精神,用智慧和巧妙的構思完美複製了ORACLE GRANT語句的功能,這是全世界默默無聞的MySQL開發人員長期以來內生品格的自然流露,是全世界默默無聞的MySQL開發人員開拓前進的不竭動力,寫到這兒三思忍不住不感嘆,老美真是不會吹啊,這點兒破事兒要擱中國怕是早就吹成全宇宙軟體史上的奇蹟大書特吹了。
如果說上述方式覺著都不順手,或者,大腦短路導致短暫忘記了命令的語法,那也沒關係,mysql.user表還記得吧,直接向該字典表中插入記錄(一般insert語法想忘不容易),也是靠譜的,例如:
mysql> insert into user (host,user,password) values ('%','jss_insert',password('jss'));
Query OK, 1 row affected, 3 warnings (0.00 sec)
mysql> select user,host,password from user where user = 'jss_insert';
+------------+-----------+-------------------------------------------+
| user | host | password |
+------------+-----------+-------------------------------------------+
| jss_insert | % | *284578888014774CC4EF4C5C292F694CEDBB5457 |
+------------+-----------+-------------------------------------------+
1 rows in set (0.00 sec)看看,效果相同,不僅是看起來相同,實際表現也是一模一樣,這點跟ORACLE資料庫就截然不同了,ORACLE這類資料庫是絕對不建議使用者修改字典表的,而且一般情況下也不知道都應該改哪些地方(沒錯,完全可能不止一處需要修改),因此對於ORACLE資料庫,最安全最穩妥也最快捷的方式還是老老實實按照ORACLE提供的命令進行操作,而MySQL則完全不同,官方不僅完全不介意使用者通過操作字典表的方式進行功能修改(想想也是,連軟體都是開源的,在這種地方設什麼障礙也沒有意義),甚至鼓勵通過這種方式,話說回來,截止到MySQL5.1版本,都沒有提供alter user的語法,因此如果想對使用者做修改,update mysql.user表就算是比較便捷的方式了。
- 注意MySQL中使用者名稱密碼的大小寫都是敏感的,也就是使用者JSS和jss是兩個不同的使用者喲;
- 使用者名稱長度不超過16個字元;
- MySQL資料庫的使用者跟作業系統使用者沒有任何關係,就算你在其中發現一個叫root甚至mysql的,那也說明不了什麼;
- password()是MySQL資料庫提供的函式,專門用來做密碼加密;
- []的意思是可選,[,]的意思是可指定多個該引數。
提示:
=======================================
檢視之前的連載:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-674167/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 入門MySQL——使用者與許可權MySql
- MySQL入門--使用者與許可權MySql
- 授權|取消授權MYSQL資料庫使用者許可權MySql資料庫
- Mysql資料庫許可權問題MySql資料庫
- mysql 床架新資料庫並分配使用者許可權MySql資料庫
- Oracle資料庫scott使用者建立view檢視許可權Oracle資料庫View
- MySQL新增新使用者、為使用者建立資料庫、為新使用者分配許可權MySql資料庫
- [MySQL光速入門]031 許可權管理MySql
- PostgreSQL資料庫使用者許可權管理SQL資料庫
- MySQL資料庫Root許可權MOF方法提權研究MySql資料庫
- MySQL建立使用者,配置許可權、密碼策略MySql密碼
- [資料庫]MYSQL之授予/查驗binlog許可權資料庫MySql
- 許可權系統:一文搞懂功能許可權、資料許可權
- Mysql 建立資料庫\新增使用者\使用者授權MySql資料庫
- 複製建立已有資料庫使用者、表空間、許可權的指令碼資料庫指令碼
- 資料庫的許可權管理資料庫
- mysql使用者許可權管理MySql
- Linux 許可權入門指南Linux
- 登入失敗,提示“資料庫目錄許可權寫入不足”,可以操作設定資料庫目錄許可權為 777。資料庫
- mysql建立使用者並且對資料庫授權MySql資料庫
- 資料庫學習:許可權管理資料庫
- MySQL使用者及許可權管理MySql
- MySql查詢使用者許可權MySql
- MySQL 使用者及許可權管理?MySql
- mysql8下建立使用者遠端登陸許可權MySql
- 通用許可權系統之資料庫表設計資料庫
- 《MySQL 入門教程》第 05 篇 賬戶和許可權MySql
- mysql許可權MySql
- MYSQL學習筆記13: DCL許可權控制(使用者許可權操作)MySql筆記
- mysql 8.0.21使用者及許可權操作MySql
- SpringSecurity許可權管理系統實戰—九、資料許可權的配置SpringGse
- DBA 日常:規模使用者資料庫訪問許可權管理資料庫訪問許可權
- Mysql許可權管理以及sql資料備份MySql
- MongoDB入門系列(四):許可權管理MongoDB
- Oracle資料泵建立使用者避坑(表空間配額、許可權)Oracle
- mysql 給了使用者所有許可權ALL PRIVILEGES,但是該使用者沒有grant許可權MySql
- MySQL許可權管理MySql
- 七、許可權管理和資料庫備份資料庫
- Oracle 資料庫安全許可權配置標準Oracle資料庫