首先,先創建一個用戶,這步應該很簡單。
用root帳戶(或者其他有權限的帳戶)登錄,
mysql -u root -p 回車
輸入密碼 回車
切換到mysql表
在user表裡插入一個用戶就OK
mysql> use mysql
Database changed
mysql> insert into user(host,user,password) values('localhost','test',password('123456'));
這樣就創建了一個名為test的用戶
然後給該用戶授權
授權還是得謹慎操作,尤其是你建這個用戶不是給自己用,而是公共用的時候,如果賦予了很大的權限,有可能一個不熟悉操作的人就把資料庫給毀了。授予該用戶必須的權限即可。尤其是權限表的改寫權限,最好不要給除root用戶外的其他任何用戶。
這裡建一個資料庫,為了方便這裡把該庫所有的權限給test,即得賦權完需要刷新下權限,使之生效。
mysql> create database testDB;
Query OK, 1 row affected (0.04 sec)
mysql> grant all privileges on testDB.* to test@localhost identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
以上是教科書式的方法,事實上也確實創建了一個用戶,我們也可以試著登錄下。
接下來我們遠程連接一下看看。
以Navicat for mysql作為工具為例。
卻發現報1045的錯誤
1045 -Access denied for user 'root'@'182.110.4.196'(using password:YED)
難道上面介紹的操作有錯嗎?教科書式的操作,能錯到哪去呢。
嗯,是的,操作並沒有問題,問題出在上面我們是創建了一個本地用戶,所以我們用命令窗口該用戶是可以登錄的。那怎麼把本地用戶允許遠程登錄呢?
兩種方法。
方法一:把允許遠程訪問的用戶host改為%,比如上面說到的test用戶,update一下就可以了,就不截圖了。
註:為什麼是%,其實開始博主也納悶了一下。再一想就明白了,%在mysql中是通配符的,host改為%即表示任意主機都可以通過test及其密碼來訪問資料庫。
方法二:還是授權
mysql> GRANT ALL PRIVILEGES ON testDB.* TO 'test'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
這回再試試,連接一下,輕鬆連上。
再回到剛那個%,通配符通配符,即可以匹配某一類。那我不想給所有IP都訪問資料庫的權限是不是可以多點限制?比如我只想給192.168.1.*的用戶授權,那麼就可以把host改為192.168.1.%或者授權語句改為
GRANT ALL PRIVILEGES ON testDB.* TO 'test'@'192.168.1.%' IDENTIFIED BY '123456' WITH GRANT OPTION;
嗯,就是這麼用。一點點操作,一個可遠程連接的用戶就建好了。