MySQL基礎管理

用戶管理

用戶的作用

用戶的作用爲登錄MySQL數據庫和管理MySQL對象,不同的用戶也有着不同的用戶權限。

用戶的定義

MySQL用戶的特定格式爲:用戶名@‘白名單’。
白名單:允許登錄MySQL的地址列表,MySQL允許白名單的IP地址登錄MySQL,管理MySQL。
例如:
user@‘localhost’:用戶能夠通過本地登錄到MySQL(socket);
user@‘192.168.0.10’或user@‘xxx.com’:用戶通過192.168.0.10或xxx.com遠程登錄到MySQL服務器;
user@‘192.168.0.%’:通過192.168.0.xx/24遠程登錄到MySQL服務器;
user@‘192.168.0.5%’:通過192.168.0.50~192.168.0.59的IP遠程登錄到MySQL服務器;
user@’%’:用戶可以通過任何的IP登錄到MySQL服務器上;
注意:user@‘localhost’與user@’%'等不是同一個用戶。

用戶管理

1.查詢所有用戶:
select user(用戶名稱),host(白名單),authentication-string(經過加密後的密碼) from mysql.user;
2.添加用戶:
create user user@‘localhost’ identified by ‘123’;
3.修改用戶:
alter user user@‘localhost’ identified by ‘456’;
4.刪除用戶:
drop user user@‘localhost’;
注意:8.0版本之前,可以通過grant命令建立用戶+授權,8.0及以後的版本,只能先創建用戶後再授權。

權限管理

權限的表現方式

展示權限的命令:show privileges;

mysql> show privileges;
+-------------------------+---------------------------------------+-------------------------------------------------------+
| Privilege               | Context                               | Comment                                               |
+-------------------------+---------------------------------------+-------------------------------------------------------+
| Alter                   | Tables                                | To alter the table                                    |
| Alter routine           | Functions,Procedures                  | To alter or drop stored functions/procedures          |
| Create                  | Databases,Tables,Indexes              | To create new databases and tables                    |
| Create routine          | Databases                             | To use CREATE FUNCTION/PROCEDURE                      |
| Create temporary tables | Databases                             | To use CREATE TEMPORARY TABLE                         |
| Create view             | Tables                                | To create new views                                   |
| Create user             | Server Admin                          | To create new users                                   |
| Delete                  | Tables                                | To delete existing rows                               |
| Drop                    | Databases,Tables                      | To drop databases, tables, and views                  |
| Event                   | Server Admin                          | To create, alter, drop and execute events             |
| Execute                 | Functions,Procedures                  | To execute stored routines                            |
| File                    | File access on server                 | To read and write files on the server                 |
| Grant option            | Databases,Tables,Functions,Procedures | To give to other users those privileges you possess   |
| Index                   | Tables                                | To create or drop indexes                             |
| Insert                  | Tables                                | To insert data into tables                            |
| Lock tables             | Databases                             | To use LOCK TABLES (together with SELECT privilege)   |
| Process                 | Server Admin                          | To view the plain text of currently executing queries |
| Proxy                   | Server Admin                          | To make proxy user possible                           |
| References              | Databases,Tables                      | To have references on tables                          |
| Reload                  | Server Admin                          | To reload or refresh tables, logs and privileges      |
| Replication client      | Server Admin                          | To ask where the slave or master servers are          |
| Replication slave       | Server Admin                          | To read binary log events from the master             |
| Select                  | Tables                                | To retrieve rows from table                           |
| Show databases          | Server Admin                          | To see all databases with SHOW DATABASES              |
| Show view               | Tables                                | To see views with SHOW CREATE VIEW                    |
| Shutdown                | Server Admin                          | To shut down the server                               |
| Super                   | Server Admin                          | To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.   |
| Trigger                 | Tables                                | To use triggers                                       |
| Create tablespace       | Server Admin                          | To create/alter/drop tablespaces                      |
| Update                  | Tables                                | To update existing rows                               |
| Usage                   | Server Admin                          | No privileges - allow connect only                    |
+-------------------------+---------------------------------------+-------------------------------------------------------+

ALL:以下所有權限,一般是普通管理員擁有的:SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE;

with grant option:超級管理員才具備的,給別的用戶授權的功能;

授權、回收操作

語法

8.0以前(創建對象並授權):
grant 權限 on 對象 to 用戶 identified by '密碼';
8.0+:
create user 用戶 identified by '密碼';
grant 權限 on 對象 to 用戶;

爲超級用戶授權:
GRANT 權限1,權限2,... on 對象 to 用戶 with grant option;

說明:
對象:庫以及表,格式爲庫.表
*.*:所有的數據庫以及下面的所有表
庫.*:指定的庫下的所有的表
庫.表:指定庫下的指定的表

例子

1、創建並授權一個超級管理員用戶,使其可以在本地登錄並管理數據庫(使用8.0以後版本的語法):

# 創建linkai@'localhost'用戶
create user linkai@'localhost' identified by '密碼';
#爲linkai@'localhost'用戶授權
grant all on *.* to linkai@'localhost' with grant option;
#查詢所有用戶
select user,host from mysql.user;
#查詢用戶權限
show grants for linkai@'localhost';

在這裏插入圖片描述
2、創建並授權一個linkai@’%‘的普通管理用戶,對象是處理所有的表(這個有的不規範啊,不過本人在日常的學習上確實需要這麼一個用戶,就順便創建了,順便給你們看看linkai@’%'和linkai@'localhost’是不是同一個用戶。當然,在公司有規範最好要按照規範來,安全第一)(這次使用8.0以前的版本操作)

#創建並授權linkai@'%'用戶
grant all on *.* to linkai@'%' identified by '密碼';
#查詢所有用戶
select user,host from mysql.user;
#查詢用戶權限
show grants for linkai@'%';

在這裏插入圖片描述
3、創建並授權一個app@’%'的業務用戶,可以完成對所有表的增刪改查,對象是處理所有的表(這個也有的不規範啊,不過本人在日常的學習上確實需要這麼一個用戶,就順便創建了,在公司有規範最好要按照規範來,安全第一)(這次使用8.0以前的版本操作)

#創建並授權app@'%'用戶
grant select,insert,delete,update on *.* to app@'%' identified by '密碼';
#查詢所有用戶
select user,host from mysql.user;
#查詢用戶權限
show grants for app@'%';

在這裏插入圖片描述
查詢所有用戶的權限:
select * from mysql.user\G;
擴展:
user:存放創建的用戶和密碼包括全局實例級別管理權限設置;
db:存放設置的數據庫級別的權限設置;
tables_priv:存放表級別的權限設置;
columns_priv:存放字段級別的權限設置;
procs_priv:存放存儲過程中的權限設置。
注意:
1.多次grant是疊加權限;
2.create user後,該用戶只有userage權限。

回收權限

MySQL中不能通過重複授權來修改權限(重複授權只是對權限的疊加),只能回收權限。

#回收app@'%'原有的create權限
revoke create on *.* from app@'%';
#顯示app@'%'的權限
show grants for app@'%';
#刪除app@'%'用戶
drop user app@'%';

在這裏插入圖片描述
注意:
MySQL刪除用戶,權限也就跟着被刪除了,而對於Oracle來說,用戶被刪除會影響到它所管理的表,MySQL不會。

忘記root密碼的處理方式

先把操作步驟寫出來然後再說明一下:

  1. 先關閉數據庫:service mysqld stop或者systemctl stop mysqld
  2. 使用安全模式啓動(本地無密碼驗證登錄):`mysqld_safe --skip-grant-tables --skip-networking &
  3. 或者service mysqld start --skip-grant-tables --skip-networking`
  4. 修改登錄數據庫並修改密碼:
    先登錄MySQL,這個過程不會對你的用戶名和密碼進行校驗;
    手工加載授權表:flush privileges;
    修改用戶密碼:alter user root@'localhost' identified by'密碼';
  5. 重啓數據庫到正常模式:service mysqld restart或者systemctl restart mysqld

說明:

兩個重要的參數:
--skip-grant-tables:跳過授權表
--skip-networking:跳過TCP/IP連接

MySQL數據庫中擁有安全模式,當忘記密碼時可以關閉MySQL的密碼驗證功能(MySQL的密碼驗證功能在server層的連接層),使用–skip-grant-tables參數後,此時MySQL無需賬號密碼即可登錄,但是對於遠程的用戶來說此時也可以無賬號密碼登錄爲超級管理員,非常不安全,所以需要使用–skip-networking語句跳過TCP/IP連接限制用戶從TCP/IP遠程連接,只能允許socket連接。

連接管理

MySQL自帶的客戶端

mysql、mysqldump備份工具、mysqladmin管理工具。
mysql:

  1. 本地socket連接:
    前提:數據庫中必須實現授權用戶名@'IP’的用戶。
  2. 參數列表:
-u 用戶名
-p 密碼
-S 本地socket文件位置
-h 數據庫IP地址
-P 數據庫端口號
-e 免交互執行數據庫命令
< 錄入SQL腳本

登錄語句:mysql -uroot -p -S /tmp/mysql.sock(不加-u默認爲root用戶)

  • -e的應用:
    在這裏插入圖片描述

MySQL遠程客戶端程序(開發工具)

TCP/IP:前提:必須創建好可以遠程連接的用戶
mysql -u用戶名 -p -hIP地址 -P3306
各語言也有其對應的API:如php-mysql、pymysql

初始化配置

方式

源碼安裝:編譯過程中設置初始化參數
配置文件:數據庫啓動之前,設定的配置文件參數。/etc/my.cnf
啓動腳本命令行:mysqld_safe --skip-grant-tables --skip-networking &
說明:若my.cnf配置文件上配置的端口號爲3306,而mysqld_safe命令設置的端口號爲3307,則最終MySQL的端口號爲3307,命令的優先級要大於配置文件。

配置文件的應用

配置文件的讀取順序

命令:mysqld --help --verbose |grep my.cnf查看:
在這裏插入圖片描述
說明:若/etc/my.cnf上的端口號爲3306,而~/.my.cnf上的端口號爲3307,則最終的MySQL端口號爲3307,以最後讀取的數據爲準。
特殊情況:
手工定製配置文件位置點:例如:/opt/my.cnf

mysqld --defaults-file=/opt/my.cnf&
或者
mysqld -safe --defaults-file=/opt/my.cnf&

配置文件書寫格式

[標籤]
配置參數=xxx
標籤是什麼:
區分不同程序的運行參數。

  • [服務器端]:負責數據庫服務器端的運行參數設定
    • [server]
      [mysqld]
      [mysqld_safe]
  • [客戶端]:影響本地客戶端的連接,不影響遠程客戶端
    • [client]
      [mysql]
      [mysqldump]
      現在我們一起來看/etc/my.cnf配置文件:
#服務器端標籤
[mysqld]
#負責數據庫管理用戶
user=mysql
#軟件的安裝位置
basedir=/app/database/mysql
#數據的存放位置
datadir=/data/3306
#標誌節點的唯一編號,主從有用
server_id=6
#端口號
port=3306
#套接字文件
socket=/tmp/mysql.sock

#客戶端標籤
[mysql]
#讀取socket的文件位置點
socket=/tmp/mysql.sock

注意:mysqld命令行以及-S等的命令行優先級高於配置文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章