[MySQL]賬戶及權限管理 MySQL初始賬戶管理 MySQL的初始賬戶如下:
[sql] [root@lx16 ~]# mysql -u root mysql> select host,user,password from mysql.user; +-----------+------+----------+ | host | user | password | +-----------+------+----------+ | lx16 | root | | | 127.0.0.1 | root | | | ::1 | root | | | localhost | | | | lx16 | | | | localhost | root | | +-----------+------+----------+
MySQL有兩類初始用戶: root超級賬戶:擁有全部的權限,可以做任何事。 匿名賬戶:如何人都可以通過它連接服務器,但它權限很小。 在默認情況下,這些賬戶都沒有口令,因此為了安全起見,我們首先必須得為所有的root賬戶設置密碼。 設置密碼的第一種方法是用SET PASSWORD語句,假如我們現在要給'root'@'localhost'設置口令,只要執行:
[sql] mysql> set password for 'root'@'localhost'=password('*****');
設置密碼的第二種方法是直接update user權限表,這種方法的好處是可以同時給多個賬戶設置密碼,如下面的語句可以一次修改所有root賬戶的密碼:
[sql] mysql> update mysql.user set password=password('***') where user='root'; mysql> flush privileges;
如果用update方式修改,必須明確告訴服務器重新加載權限表(flush privileges) 對於匿名賬戶,強烈建議將他們刪除,刪除語句如下:
[sql] mysql> drop user ''@'localhost'; mysql> drop user ''@'lx16';執行完以上操作之後,user權限表裡的數據如下:
[sql] mysql> select host,user,password from mysql.user; +-----------+------+-------------------------------------------+ | host | user | password | +-----------+------+-------------------------------------------+ | lx16 | root | *578EC7851088AC1F2A67B100540344B03BD2BA99 | | 127.0.0.1 | root | *578EC7851088AC1F2A67B100540344B03BD2BA99 | | ::1 | root | *578EC7851088AC1F2A67B100540344B03BD2BA99 | | localhost | root | *578EC7851088AC1F2A67B100540344B03BD2BA99 | +-----------+------+-------------------------------------------+
創建新賬戶 MySQL不僅要求你必須值得誰(user_name)能連接,還必須指定從什麼地方連接(host_name),也就是說即便兩個賬戶擁有相同的名字,如果他們將從不同客戶端連接,你也要為它們各自創建一個賬戶。 可以利用以下兩個通配符靈活配置主機名的限制: ‘%’ - 匹配任何多個字符 ‘-’ - 配置一個字符
[sql] test賬戶可以從任意IP連接 create user 'test'@'%' identified by '***'; test賬戶只能從本地連接 create user 'test'@'localhost' identified by '***'; test賬戶只能從'192.168.2.%'網段連接 create user 'test'@'192.168.2.%' identified by '***'; 還可以使用IP掩碼 create user 'test'@'192.168.2.2
權限管理 對賬戶授權需要使用Grant語句,如果賬戶已存在,Grant語句給它授權,如果賬戶不存在,Grant語句先創建它,再給它授權。 可以通過show grants語句獲得自己的權限:
[sql] mysql> show grants; +----------------------------------------------------------------------------------------------------------------------------------------+ | Grants for root@localhost | +----------------------------------------------------------------------------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*578EC7851088AC1F2A67B100540344B03BD2BA99' WITH GRANT OPTION | +----------------------------------------------------------------------------------------------------------------------------------------+
也可以通過show grants for 獲得其它用戶的權限:
[sql] mysql>show grants for ''@'localhost'; +--------------------------------------+ | Grants for @localhost | +--------------------------------------+ | GRANT USAGE ON *.* TO ''@'localhost' | +--------------------------------------+
上面顯示的是兩種特殊權限,一種是ALL(後面的PRIVILEGES關鍵字可省略),表示所有操作的權限(但不包括Grant權限,Grant權限由with grant option賦予);另一種是USAGE,一種特殊的“無權限”的權限。 在某些少數情況下,我們可能需要更細致的權限控制,MySQL可以做到在列上進行授權,下面這條語句表示把全表的select權限給test,但只把(street,city)這兩列的update權限給它:
[sql] grant select, update (street,city) on sampdb.member to 'test'@'localhost';