1. 程式人生 > 實用技巧 >linux系統mysql資料庫許可權和連線管理

linux系統mysql資料庫許可權和連線管理

一、MySQL5.6與MySQL5.7的區別

1.編譯安裝區別

#5.7在編譯安裝的時候多了一個boostorg庫
[root@db02 mysql-5.7.20]# yum install -y gcc gcc-c++ automake autoconf
[root@db02 mysql-5.7.20]# yum install make cmake bison-devel ncurses-devel libaio-devel
[root@db02 mysql-5.7.20]#
wget httpss://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_59_0.tar.gz
#登入boost.org下載也可以
[root@db02 mysql-5.7.20]# tar xf boost_1_59_0.tar.gz -C /usr/local/
[root@db02 mysql-5.7.20]#
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.7.20 \
-DMYSQL_DATADIR=/application/mysql-5.7.20/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.7.20/tmp/mysql.sock \
#開啟BOOST庫
-DDOWNLOAD_BOOST=1 \
#指定boost庫位置
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0 

2.初識化時的區別

#5.6版本初識化
[root@db02 ~]# cd /usr/local/mysql/scripts/
[root@db02 scripts]# ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

#5.7版本初識化
[root@db02 scripts]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

--initialize  		   生成一個隨機密碼寫到一個檔案
--initialize-insecure   不生成隨機密碼

3.mysql5.7跟mysql5.6區別

1.mysql5.7 提供json格式資料
2.mysql5.7 支援多主一從
3.做高可用方式不同

二、mysql使用者許可權管理

Linux系統 mysql資料庫
使用者的作用 1.登入系統 2.啟動程序 3.檔案許可權 1.登入資料庫 2.管理資料庫
建立使用者 1.useradd 2.adduser 1.grant 2.create user root@'localhost' 3.insert
刪除使用者 1.userdel -r 1.drop user root@'localhost' 2.delete
修改使用者 1.usermod 1.update
檢視使用者 1.id 2.passwd 1.select user from mysql.user;

1.在MySQL中,使用者是怎麼定義的

#mysql中,定義一個使用者是:
	使用者名稱@'主機域'
	
#使用者名稱寫法:
	使用者名稱如果是字元:
		mysql> create user root@'10.0.0.1';
	使用者名稱是數字需要加引號:
		mysql> create user '123'@'10.0.0.1';

#主機域的寫法:
	localhost
	127.0.0.1
	172.16.1.51
	db01
	172.16.1.%
	172.16.1.5%      #172.16.1.50-59
	172.16.%.%
	172.%.%.%
	%
	10.0.0.0/255.255.255.0
	10.0.0.0/24					#可以設定,但是不生效

2.使用者的管理

1)建立使用者

mysql> create user root@'localhost';
mysql> grant all on *.* to root@'localhost' identified by '123';
mysql> insert ...

2)檢視使用者

mysql> select user,host from mysql.user;

3)修改使用者密碼

1.命令列使用mysqladmin修改密碼
[root@db02 ~]# mysqladmin -uroot -p123 password 123456

2.update修改使用者密碼
mysql> update mysql.user set password=PASSWORD('123') where user='root' and host='localhost';

3.修改當前使用者密碼
mysql> set password=password('123456');

4.grant修改密碼
mysql> grant all on *.* to root@'localhost' identified by '123';
mysql> flush privileges;

4)刪除使用者

mysql> drop user qiudao@'10.0.0.0/24';

5)忘記root使用者密碼怎麼辦

1.停止資料庫
systemctl stop mysqld

2.跳過授權表和網路啟動
mysqld_safe --skip-grant-tables --skip-networking &

3.登入資料庫
mysql

4.修改密碼
mysql> flush privileges;
mysql> grant all on *.* to root@'localhost' identified by '123';
mysql> flush privileges;

5.退出重啟資料庫
mysqladmin -p123 shutdown
systemctl start mysql

3.許可權的管理

1)授權命令

grant all on *.* to root@'localhost' identified by '123';
grant all privileges on *.* to root@'localhost' identified by '123';

grant 				#授權命令
all privileges 		#許可權(所有許可權)
on 					#在...上
*.* 				#所有庫.所有表
to 					#給
root@'localhost' 	 #使用者名稱@'主機域'
identified 			#設定密碼
by 					#是
'123';				#'密碼'

2)所有許可權

#檢視使用者許可權
mysql> show grants for lhd@'10.0.0.0/255.255.255.0';

#回收許可權
mysql> revoke drop on *.* from lhd@'10.0.0.0/255.255.255.0';

#所有許可權
SELECT, INSERT, UPDATE, DELETE, CREATE, 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, DROP, GRANT

3)作用物件

#授權root@'localhost'對所有庫所有表擁有所有許可權,密碼是123
grant all on *.* to root@'localhost' identified by '123';		#所有庫所有表授權

#授權root@'localhost'對wordpress庫下所有表擁有所有許可權,密碼是123
grant all on wordpress.* to root@'localhost' identified by '123';		#單庫授權

#授權root@'localhost'對wordpress庫下所有表擁有檢視,插入,修改的許可權,密碼是123(最常用)
grant select,insert,update on wordpress.* to root@'localhost' identified by '123';	#指定許可權單庫授權

#授權root@'localhost'使用者對mysql庫下的user表擁有檢視,插入,修改的許可權,密碼是123
grant select,insert,update on mysql.user to root@'localhost' identified by '123';	#單表授權

#在企業中,單列授權被稱為脫敏
grant select(user) on mysql.user.host to root@'localhost' identified by '123';		#單列授權

4)在企業裡許可權設定

#開發跟你要一個數據庫使用者
0.你需要什麼許可權?
1.你要操作什麼庫,有沒有指定表?
2.你要什麼使用者?
3.你從哪臺主機連過來?
4.密碼你有沒有要求?
5.這個使用者你要用多久?
6.走流程,發郵件?

#一般情況給開發的許可權
grant select,update,insert on dev.* to dev@'172.16.1.50' identified by 'QiuDao@123';

#開發:你把root使用者給我唄?

4.許可權設定實踐

1)準備資料庫

#建立wordpress資料庫
create database wordpress;
#使用wordpress庫
use wordpress;
#建立t1、t2表
create table t1 (id int);
create table t2 (id int);

#建立blog庫
create database blog;
#使用blog庫
use blog;
#建立t1表
create table tb1 (id int);

2)授權

#授權wordpress@'10.0.0.5%'對於所有庫所有表有檢視許可權,密碼是123
1.grant select on *.* to wordpress@'10.0.0.5%' identified by '123';

#授權wordpress@'10.0.0.5%'對於wordpress下所有表有插入,刪除,修改許可權,密碼是123
2.grant insert,delete,update on wordpress.* to wordpress@'10.0.0.5%' identified by '123';

#授權wordpress@'10.0.0.5%'對於wordpress下t1表所有許可權,密碼123
3.grant all on wordpress.t1 to wordpress@'10.0.0.5%' identified by '123';

3)提問

#有一個人,使用wordpress使用者通過10.0.0.51登入資料庫,請問
1.對於t1表,有哪些操作許可權?
	所有許可權
2.對於t2表,有哪些操作許可權?
	增、刪、改、查
3.對於tb1表,有哪些操作許可權?
	查

4)總結

1.如果不在同一級別授權,許可權是相加關係
2.但是我們不推薦在多級別定義重複許可權。
3.最常用的許可權設定方式是單庫級別授權
	即:grant select,update,insert on dev.* to dev@'172.16.1.50' identified by 'QiuDao@123';
4.如果涉及到敏感資訊,我們使用脫敏,即單列授權
	grant select(user) on mysql.user.host to root@'localhost' identified by '123';
5.檢視使用者許可權
	show grants for 使用者名稱@'主機域';

三、mysql連線管理

1.連線工具

1)mysql自帶的連線工具 mysql

#mysql 常用的引數
-u:		#指定使用者   		mysql -uroot
-p:		#指定使用者的密碼	  mysql -uroot -p123
-h:		#指定連線的主機	  mysql -uroot -p123 -h172.16.1.51
-S:		#指定socket檔案		mysql -uroot -p123 -S /tmp/mysql.sock
-P:		#指定埠			mysql -uroot -p123 -P3307
-e:		#庫外執行sql語句	   mysql -uroot -p123 -e 'show databases'

2)第三方連線工具

1.navicat
2.sqlyog
3.phpmyadmin

2.連線方式

1)socket連線

mysql -uroot -p123
mysql -uroot -p123 -S /tmp/mysql.sock

2)TCP/IP連線

mysql -uroot -p123 -h 172.16.1.51

四、mysql啟動關閉流程

1.啟動資料庫

1.systemctl start mysql
2./etc/init.d/mysqld start
3.mysqld_safe --defaults-file=/etc/my.cnf
4.mysqld --defaults-file=/etc/my.cnf

#最終都是mysqld_safe啟動,mysqld守護程序在後臺

2.關閉資料庫

#正經關閉資料
1.systemctl stop mysql
2./etc/init.d/mysqld stop
3.mysqldadmin -uroot -p123 shutdown

#不正經關閉資料庫
1.kill -9 mysqlpid
2.killall mysqld
3.pkill mysqld
#後果:
1.如果業務量很大,資料庫不會立刻關閉,只是停止服務,pid檔案和socket檔案還存在
2.如果業務量很大,會丟失資料

五、mysql配置管理

1.配置檔案作用

1)我不知道我的程式在哪?
	--basedir=
2)我也不知道我將來啟動後去哪找資料庫資料?
	--datadir
3)將來我啟動的時候啟動資訊和錯誤資訊放在哪?
	$datadir/db01.err
4)我啟動的時候sock檔案pid檔案放在哪?
	$datadir/mysql.pid
5)我啟動,你們給了我多少記憶體?

2.預編譯階段

cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.20 \
-DMYSQL_DATADIR=/application/mysql-5.6.20/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.20/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0 

3.配置檔案

vim /etc/my.cnf
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock

1)配置檔案位置

/etc/my.cnf
/etc/mysql/my.cnf
$MYSQL_HOME/my.cnf(前提是在環境變數中定義了MYSQL_HOME變數)
defaults-extra-file (類似include)
~/my.cnf

3.命令列

mysqld_safe
--skip-grant-tables 
--skip-networking
--datadir=/application/mysql/data
--basedir=/application/mysql
--defaults-file=/etc/my,cnf
--pid-file=/application/mysql/data/db01.pid
--socket=/application/mysql/data/mysql.sock
--user=mysql
--port=3306
--log-error=/application/mysql/data/db01.err