第三章 mysql用戶管理

MySQL的用戶管理	 

 
Linux上用戶操做建立用戶:useradd 刪除用戶:userdel 修改用戶:usermod
 
MySQL上用戶操做
建立用戶:create user 、 grant
建立用戶:create user 、 grant
#建立用戶
create user zls@'%';
#建立用戶同時給密碼(5.7)若是用戶不存在無法使用grant
create user qls@'%' identified by '123';
grant all on *.* to qls@'%';


刪除用戶:drop user
mysql> drop user root@'db02';
Query OK, 0 rows affected (0.00 sec)
mysql> drop user ''@'db02';
Query OK, 0 rows affected (0.00 sec)


修改用戶:update、alter、grant
mysql> update mysql.user set p
host='localhost';


MySQL用戶定義	 
用戶名@'主機域'
root@'%' select root@'localhost' 超級用戶 root@'127.0.0.1' 超級用戶 root@'10.0.0.%' root@'10.%.%.%' root@'10.0.0.0/255.255.255.0' root@'db01'

MySQL用戶管理實戰	 

1.誤刪除root用戶
[root@db01 bin]# mysqld_safe --skip-grant_tables &
--skip-grant_tables #跳過受權表
[root@db01 bin]# mysqld_safe --skip-grant-tables --skip-networking &
--skip-networking # 跳過網絡(安全)
mysql> insert into user(user,host,password) values( 'root','localhost',PASSWORD('123'));
mysql> insert into user(user,host,password,ssl_cipher,x509_issuer,x509_subject)
values('root','localhost',PASSWORD('123'),'null','null','null');

 
2.忘記root密碼
先中止數據庫
mysqld_safe --skip-grant-tables --skip-networking &
#1.update修改密碼
update mysql.user set password=PASSWORD('123') where user='root' and host='localhost';
mysql> flush privileges;
#2.set
mysql> set password=PASSWORD('1');
#3.grant
mysql> grant all on *.* to root@'localhost' identified by '2';
#4.mysqladmin
[root@db01 ~]# mysqladmin -uroot -p2 password '123'
#5.alter


MySQL的權限管理	 

INSERT,SELECT, 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

給開發開權限
grant INSERT,SELECT, UPDATE, DELETE on *.* to dev@ 'xxx';

權限最小化,最小級別不是表級別,是列級別
grant select on mysql.user.user to dev@'10.0.0.5%' identified by '123';

主機域:10.0.0.5% 能夠鏈接:10.0.0.50-59 10.0.0.5 脫敏:脫離敏感信息
grant select(user,host) on wzry.user to no_vip@ '%' identified by '123';


數據庫集羣,10.0.0.51 52 53 54 grant     all privileges    on     *.*    to   

oldboy@’10.0.0.%’  identified by    ‘123’;                 權限               做用對象          歸屬               密碼

做用對象分解
*.* [當前MySQL實例中全部庫下的全部表] wordpress.* [當前MySQL實例中wordpress庫中全部表(單庫級別)] wordpress.user [當前MySQL實例中wordpress庫中的user表(單表級別)] 單列級別,是最小級別
 create database wordpress;
use wordpress;
create table t1 (id int);
create table t2 (id int);
create database blog;
use blog;
create table tb1 (id int);


mysql> show databases;
+--------------------+
| Database |
+--------------------+
| blog |
| wordpress |
+--------------------+
mysql> show tables from wordpress
+---------------------+
| Tables_in_wordpress |
+---------------------+
| t1 |
| t2 |
+---------------------+
mysql> show tables from blog;
+----------------+
| Tables_in_blog |
+----------------+
| tb1 |
+----------------+

1.grant select on *.* to wordpress@’10.0.0.5%’ identified by ‘123’; 針對wordpress@'10.0.0.5%' 受權 全部庫全部表 查詢權限  密碼是 123
2.grant insert,delete,update on wordpress.* to wordpress@’10.0.0.5%’ identified by ‘123’; 針對wordpress@'10.0.0.5%'  受權 插入、刪除、修改 wordpress庫中的全部表 密碼是 123
3.grant all on wordpress.t1 to wordpress@’10.0.0.5%’ identified by ‘123’; 針對wordpress@'10.0.0.5%' 受權全部權限 wordpress庫中的t1表 密碼是123
 

一個客戶端程序使用wordpress用戶登錄到10.0.0.51的MySQL後
[root@db02 ~]# mysql -uwordpress -p123 -h10.0.0.51

 
對t1(wordpress)表的管理能力? t1:select ,insert,delete,update all 全部權限
對t2(wordpress)表的管理能力?t2:select,insert,delete,update
insert update delete select
對tb1表的管理能力?只有select

 
結論:
若是在不一樣級別都包含某個表的管理能力時,權限是相加關係。
可是咱們不推薦在多級別定義重複權限。
最經常使用的權限設定方式是單庫級別受權,即:wordpress.* 【單庫級別】

 
在企業中,開發讓你給他開一個MySQL的用戶:
grant insert,delete,update on wordpress.* to wordpress@’10.0.0.5%’ identified by ‘123’;
1.權限是什麼?insert,delete,update
2.哪一個庫,哪幾張表?哪些列? wordpress.*
3.你從哪裏鏈接?’10.0.0.5%’
4.用戶名和密碼是什麼?
5.發郵件,走流程
MySQL的鏈接管理
	 mysql
-u:指定用戶
-p:指定密碼
-P:指定端口
-S:指定socket文件
-h:指定主機域
-e:指定SQL語句



MySQL的啓動方式	 

/etc/init.d/mysqld start 
service mysqld start 
systemctl start mysqld
mysqld_safe --defaults-file=/etc/my.cnf &

MySQL的關閉方式	 

/etc/init.d/mysqld stop 
service mysqld stop 
systemctl stop mysqld 
mysqladmin -uroot -p123 shutdown 


MySQL實例初始化配置	 
kill -9
pkill -9
killall
??????

配置文件讀取順序:

 
 
/etc/my.cnf server_id=1
/etc/mysql/my.cnf server_id=2
/application/mysql/my.cnf server_id=3
~/.my.cnf server_id=4

[root@db02 ~]# mysql -uroot -p123 -e "show variables like 'server_id'"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 4 |
+---------------+-------+

思考:

#cmake:
socket=/application/mysql/tmp/mysql.sock
#命令行:
--socket=/tmp/mysql.sock
#配置文件:
/etc/my.cnf中[mysqld]標籤下: socket=/opt/mysql.sock
#default參數:
--defaults-file=/tmp/a.txt配置文件中[mysqld]標籤下: socket=/tmp/test.sock

1./tmp/mysql.sock
3./tmp/test.sock
 
優先級總結:
1.命令行優先級最高
2.--defaults-file
3.配置文件讀取順序反着來
4.cmake優先級最低
 
mysql配置文件的做用:
1.影響服務端的啓動
2.影響客戶端的鏈接
 
MySQL多實例	 

什麼是實例?
一個進程+多個線程+預分配的內存結構
 
什麼是多實例?
多個進程+多個線程+多個預分配內存結構
 
配置文件 datadir 端口 socket 啓動腳本
1.準備多個配置文件
#建立多個存放配置文件的目錄
[root@db02 ~]# mkdir /data/{3307,3308,3309} -p
[root@db02 ~]# tree /data/
/data/
├── 3307
├── 3308
└──3309
#建立多個配置文件
[root@db02 ~]# vim /data/3307/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/data/3307/data
socket=/data/3307/data/mysql.sock
port=3307
log_error=/data/3307/data/3307.err
server_id=7
pid_file=/data/3307/data/3307.pid
-----------------------------------------------------
[root@db02 ~]# vim /data/3308/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/data/3308/data
socket=/data/3308/data/mysql.sock
port=3308
log_error=/data/3308/data/3308.err
server_id=8
pid_file=/data/3308/data/3308.pid
-----------------------------------------------------
[root@db02 ~]# vim /data/3309/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/data/3309/data
socket=/data/3309/data/mysql.sock
port=3309
log_error=/data/3309/data/3309.err
server_id=9
pid_file=/data/3309/data/3309.pid
-----------------------------------------------------
[root@db02 ~]# tree /data
/data
├── 3307
│ └── my.cnf
├── 3308
│ └── my.cnf
└── 3309
└──my.cnf


2.初始化多個datadir
[root@db02 ~]# cd /application/mysql/scripts/
#初始化3307的數據目錄
[root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/3307/data
#3308
[root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3308/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/3308/data
#3309
[root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3309/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/3309/data
[root@db02 scripts]# tree -L 2 /data
/data
├── 3307
│ ├── data
│ └── my.cnf
├── 3308
│ ├── data
│ └── my.cnf
└──3309
├── data
└my.cnf
3.啓動多實例
mysqld_safe --defaults-file=/data/3307/my.cnf &
mysqld_safe --defaults-file=/data/3308/my.cnf &
mysqld_safe --defaults-file=/data/3309/my.cnf &
#檢查端口
[root@db02 scripts]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program
name
tcp6 0 0 :::3306 :::* LISTEN
13052/mysqld
tcp6 0 0 :::3307 :::* LISTEN
13598/mysqld
tcp6 0 0 :::3308 :::* LISTEN
13428/mysqld
tcp6 0 0 :::3309 :::* LISTEN
13768/mysqld

4.設置密碼
[root@db02 scripts]# mysqladmin -uroot -p3307 -S/data/3307/data/mysql.sock password '3307'
[root@db02 scripts]# mysqladmin -uroot -p3308 -S/data/3308/data/mysql.sock password '3308'
[root@db02 scripts]# mysqladmin -uroot -p3309 -S/data/3309/data/mysql.sock password '3309'
5.鏈接MySQL
[root@db02 scripts]# mysql -uroot -p3307 -S /data/3307/data/mysql.sock
[root@db02 scripts]# mysql -uroot -p3308 -S /data/3308/data/mysql.sock
[root@db02 scripts]# mysql -uroot -p3309 -S /data/3309/data/mysql.sock
#小技巧
[root@db02 bin]# vim mysql3309
mysql -uroot -p3309 -S /data/3309/data/mysql.sock
[root@db02 bin]# chmod +x mysql3309
相關文章
相關標籤/搜索