目錄
1,用戶信息
2,創建/刪除/修改用戶
3,數據庫的權限
? ? ? ? MySQL數據庫安裝完之后,我們最開始時使用的都是 root 用戶,其它用戶通常無法進行操作。因此,MySQL數據庫需要對用戶進行管理。
1,用戶信息
????????MySQL中的用戶信息,都存儲在系統數據庫 mysql 的 user 表中。這里只研究 user 表中的?host, user, authentication_string。
- host:指定了允許用戶連接的主機。如果是localhost,表示只能從本機登陸。
- user:用戶名字段,代表用戶的登錄名稱。
- authentication_string:該字段存儲了用戶的密碼(或更準確地說,密碼的哈希值)。它是用來驗證嘗試連接到MySQL服務器用戶的身份。
查看MySQL用戶信息:select host,user,authentication_string from user;
? ? ? ? 下面進行有關用戶的操作之前要說明的是,若數據庫服務器的配置文件中(my.cnf里的[mysqld])使用了 skip-grant-tables,那么這里就無法進行用戶相關的操作,因為該選項繞過服務器權限驗證的操作,用戶相關的操作一般都會設計到權限的分配操作,繞過權限驗證操作,就意味著無法給相關用戶分配權限,比如創建用戶,需要給此用戶分配登錄權限。
2,創建/刪除/修改用戶
1,創建用戶
語法:
????????create user '用戶名'@'登陸主機/ip' identified by '密碼';
樣例:
? ? ? ? 在本主機下創建zhu用戶:create user 'zhu'@'localhost' identified by 'zhu';
? ? ? ? 創建test用戶,允許在任意主機下登錄:create user 'test'@'%' identified by '123';
? ? ? ? 查看user表可觀看到:select user,host,authentication_string from user;
2,刪除用戶
語法:
????????drop user '用戶名'@'主機名';
樣例:
? ? ? ? 在本主機下刪除用戶zhu:drop user 'zhu'@'localhost';
3,修改用戶密碼
語法:
? ? ? ??自己改自己密碼:set password=password('新的密碼');
????????root用戶修改指定用戶的密碼:set password for '用戶名'@'主機名'=password('新的密碼');
3,數據庫的權限
1,給用戶授權
????????剛創建的用戶沒有任何權限,這也就意味著?MySQL 服務器不會相應該用戶的一切指令(如創建數據庫,建立表,查看數據庫等),因此,對于新建的用戶而言,我們需要給用戶授權。在MySQL中,給用戶授權通常使用 grant 語句來完成。這個命令允許你指定特定的權限給一個或多個數據庫對象。
語法:
????????grant 權限列表?on 庫.對象名?to '用戶名'@'登陸位置'?[identified by '密碼'];
說明:
????????權限列表:可以是 all [可選privileges],表示所有權限,也可以是具體權限如select、insert、update、delete、create、drop等。
????????數據庫名.表名:指明權限應用到哪個數據庫和表上。可以使用通配符*,例如:*.*:表示所有數據庫的所有表;庫.*:表示某個數據庫中的所有數據對象。
????????用戶名@主機名:指定用戶以及允許從哪里連接(例如localhost)。
????????IDENTIFIED BY '密碼':可選字段,如果用戶存在,賦予權限的同時修改密碼;如果該用戶不存在,就是創建用戶。
注意:
????????權限列表,多個權限用逗號分開,表示賦予多個權限,例如:
????????grant select on ...
????????grant select, delete, create on ....
????????grant all [privileges] on ...? ? ? ? ?(表示賦予該用戶在指定對象上的所有權限)
? ? ? ? 還有就是,如果發現賦權限后,沒有生效,執行指令:flush privileges; 并退出后重新登錄。
樣例:
? ? ? ? 給zhu用戶賦予所有數據庫下所有表的select和create權限:
????????????????grant select, create?on *.* to 'zhu'@'%';
2,回收權限
語法:
????????revoke 權限列表 on 庫.對象名 from '用戶名'@'登陸位置';
樣例:
????????回收zhu對test數據庫的所有權限:revoke all on test.* from 'zhu'@'%';
? ? ? ? 注意:上面給用戶權限賦予和收回操作全都是在root賬戶下進行的。在權限賦予和收回后,為了確保更改立即生效,我們需要運行指令:flush privileges;?刷新權限。