本節索引:
一、MySQL用戶管理
二、MySQL權限管理
三、操作:破解Mysql數據庫口令
一、MySQL用戶管理
用戶賬號:
MySQL的用戶賬號由兩部分組成:用戶名+主機名
‘USERNAME’@’HOST’
其中:
主機名HOST可以是IP地址或Network;
如:wxlinux@192.168.30.10
主機名HOST也支持通配符的寫法:
如:wxlinux@172.20.%.%
MySQL中自帶有一張名稱為mysql的數據庫,稱為元數據數據庫。
它是mysql的核心數據庫,類似于sql server中的master庫,主要負責存儲數據庫的
用戶、權限設置、關鍵字等mysql自己需要使用的控制和管理信息。
系統授權表:
user表:該表決定是否允許用戶連接到服務器。如果允許連接,權限字段則
為該用戶的全局權限。
db表:用于決定哪些用戶可以從哪些主機訪問哪些數據庫。包含在db表中的
權限適用于這個表標識的數據庫。
host表:當您想在db表的范圍之內擴展一個條目時,就會用到這個表。舉例
來說,如果某個db允許通過多個主機訪問的話,那么超級用戶就可
以讓db表內將host列為空,然后用必要的主機名填充host表。
tables_priv表:該表與db表相似,不同之處是它用于表而不是數據庫。這個
表還包含一個其他字段類型,包括timestamp和grantor兩個字段,用
于存儲時間戳和授權方。在本文后面我們會對這個表做進一步的講解。
columns_priv:該表作用幾乎與db和tables_priv表一樣,不同之處是它提供
的是針對某些表的特定列的權限。這個表也多 出了一個字段類型,即
其他字段,包括了一個timestamp列,用于存放時間戳。
用戶管理
創建用戶:
方法一:
CREATE USER ‘USERNAME’@’HOST’ [IDENTIFIED BY ‘password’];
默認權限:USAGE,只能連接數據庫,無法查看、更改、刪除
示例:
Mysql> create user wxlinux@’192.168.30.%’ identified by ‘wxlinux’;
Mysql> select user,host,password from mysql.user where user=’wxlinux’;
方法二:
也可使用GRANT 授權同時創建用戶
示例:
授權wang用戶select、insert權限同時創建用戶
Mysql> grant select,insert on hellodb.* to wang@’%’ identified by ‘centos’;
Mysql> select user,host,password from mysql.user where user=’wang’;???????
用戶重命名:
RENAME USER old_user_name TO new_user_name
示例:
Mysql> rename user wxlinux@’192.168.30.%’ to wangx@’192.168.30.%’;
Mysql> select user,host,password from user where user=’wangx’;
刪除用戶:
DROP USER ‘USERNAME’@’HOST’
示例:
刪除匿名用戶:
MariaDB [mysql]> select user,host,password from user;
刪除指定用戶:
Mysql> drop user wangx@’192.168.30.%’;
Mysql> select user,host,password from user where user=’wangx’;
Empty set (0.00 sec)
修改密碼:
方法一:
Mysql> SET PASSWORD FOR ‘user’@’host’ = PASSWORD(‘password’);
方法二:???
Mysql> UPDATE mysql.user SET password=PASSWORD(‘password’) WHERE clause;
此方法需要執行下面指令才能生效:
Mysql> FLUSH PRIVILEGES;
方法三:
bash命令行修改??
無密碼新設密碼:
# mysqladmin -u root ?password ?‘newpasswd’
修改舊密碼:
#mysqladmin -u root –poldpasswd password ?‘newpasswd’
二、MySQL權限管理
權限類別:
數據庫級別
表級別
字段級別
管理類
程序類
管理類:
CREATE TEMPORARY TABLES
CREATE USER
FILE
SUPER
SHOW DATABASES
RELOAD
SHUTDOWN
REPLICATION SLAVE
REPLICATION CLIENT
LOCK TABLES
PROCESS
程序類: FUNCTION、PROCEDURE、TRIGGER
CREATE
ALTER
DROP
EXCUTE
庫和表級別:DATABASE、TABLE
ALTER
CREATE
CREATE VIEW
DROP
INDEX
SHOW VIEW
GRANT OPTION:能將自己獲得的權限轉贈給其他用戶
數據操作:
SELECT
INSERT
DELETE
UPDATE
字段級別:
SELECT(col1,col2,…)
UPDATE(col1,col2,…)
INSERT(col1,col2,…)
所有權限:ALL PRIVILEGES 或 ALL
授權:
參考:https://dev.mysql.com/doc/refman/5.7/en/grant.html
GRANT priv_type [(column_list)],… ON [object_type] priv_level TO ‘user’@’host’
[IDENTIFIED BY ‘password’] [WITH GRANT OPTION];
priv_type:ALL [PRIVILEGES]
?? object_type:TABLE | FUNCTION | PROCEDURE
?? priv_level:*(所有庫) | *.* | db_name.* | db_name.tbl_name | tbl_name(當前庫
的表) | db_name.routine_name(指定庫的函數,存儲過程,觸發器)
with_option:GRANT OPTION
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
回收授權:
REVOKE priv_type [(column_list)] [, priv_type[(column_list)]] …
ON [object_type] priv_level FROM user [, user] …
查看指定用戶獲得的授權:
???????? Help SHOW GRANTS
???????? SHOW GRANTS FOR ‘user’@’host’;
???????? SHOW GRANTS FOR CURRENT_USER[()];
注意:MariaDB服務進程啟動時會讀取mysql庫中所有授權表至內存
(1) GRANT或REVOKE等執行權限操作會保存于系統表中,MariaDB的服務進
程通常會自動重讀授權表,使之生效
(2) 對于不能夠或不能及時重讀授權表的命令,可手動讓MariaDB的服務進程
重讀授權表:mysql> FLUSH PRIVILEGES;
示例:
授權同時創建用戶
MariaDB [hellodb]> grant select,insert on hellodb.* to mage@’%’ identified by ‘centos’;
MariaDB [hellodb]> select user,host,password from mysql.user;??????????
只授權某個字段的操作權限
MariaDB [hellodb]> grant select(stuid,name) on hellodb.students to zhang@’%’identified by ‘centos’;
查看指定用戶的權限
MariaDB [hellodb]> show grants for wang@’192.168.30.%’;
查看本機登錄用戶權限
current_user()是一個變量,特指本機
MariaDB [(none)]> show grants for current_user();
收回指定用戶的select權限
MariaDB [hellodb]> revoke select on hellodb.* from mage@’%’;
三、并發控制
鎖粒度:
表級鎖
行級鎖
鎖:
讀鎖:共享鎖,只讀不可寫,多個讀互不阻塞,
寫鎖:獨占鎖,排它鎖,一個寫鎖會阻塞其它讀和它鎖
實現
存儲引擎:自行實現其鎖策略和鎖粒度
服務器級:實現了鎖,表級鎖;用戶可顯式請求
分類:
隱式鎖:由存儲引擎自動施加鎖
顯式鎖:用戶手動請求
鎖策略:在鎖粒度及數據安全性尋求的平衡機制
顯示使用鎖
? LOCK TABLES
tbl_name [[AS] alias] lock_type
???????? [, tbl_name [[AS] alias] lock_type] …
???????? lock_type: READ , WRITE
解鎖
UNLOCK TABLES
FLUSH TABLES tb_name[,…] [WITH READ LOCK]?
關閉正在打開的表(清除查詢緩存),通常在備份前加全局讀鎖
SELECT clause [FOR UPDATE | LOCK IN SHARE MODE]
查詢時加寫或讀鎖
添加讀鎖:
效果:可查看但不可修改,本端會提示,其他客戶端會卡住并且無提示
MariaDB [hellodb]> lock tables teachers read;
添加寫鎖:
效果:自己可讀,但別人無法讀
MariaDB [hellodb]> lock tables students write;
四、操作:破解Mysql數據庫口令
方法一:
適合干凈環境,沒有其他數據庫:
systemctl stop mariadb
cd /var/lib/mysql/
rm -rf mysql/*
systemctl start mariadb
方法二:
vim /etc/my.cnf.d
[mysqld]
skip-grant-tables???????????? #忽略授權表
重啟mysql服務
systemctl restart mariadb
#mysql
MariaDB [mysql] > use mysql
MariaDB [mysql] > update user set password=(‘centos’)where user=’root’ and host=’localhost’
最后再將忽略授權表那行刪掉
重啟mysql服務
systemctl restart mariadb
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/100695