您好,登錄后才能下訂單哦!
下文內(nèi)容主要給大家?guī)?a title="mysql" target="_blank" href="http://kemok4.com/mysql/">mysql數(shù)據(jù)庫的權(quán)限管理詳解,這里所講到的知識,與書籍略有不同,都是億速云專業(yè)技術(shù)人員在與用戶接觸過程中,總結(jié)出來的,具有一定的經(jīng)驗分享價值,希望給廣大讀者帶來幫助。
數(shù)據(jù)庫的安全的重要性就不需要我來贅述了。除了做好安全備份外,我們首先要做的是做好我們數(shù)據(jù)庫的權(quán)限控制,盡量保護我們的數(shù)據(jù)庫不被******。
本文主要講的是mysql數(shù)據(jù)庫的權(quán)限管理 ,在當前網(wǎng)絡(luò)環(huán)境中互聯(lián)網(wǎng)公司中的關(guān)系型數(shù)據(jù)庫大多采用的是mysql。
首先說一下mysql數(shù)據(jù)庫管理權(quán)限的數(shù)據(jù)庫是mysql庫 我們看一下mysql庫中都有哪些表
mysql> show tables from mysql; +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | db | | engine_cost | | event |
| func |
| general_log |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
mysql數(shù)據(jù)庫中幾個重要的表
columns_priv表 記錄授權(quán)用戶對表中字段的訪問權(quán)限
db 表記錄用戶云服務(wù)器上庫的訪問權(quán)限
tables_priv 表 記錄授權(quán)用戶對庫中表的訪問權(quán)限
user 記錄有哪些授權(quán)用戶
user 表中的字段
user 是用戶名 root是mysql的管理員用戶
host 是允許該用戶從哪個客戶端訪問mysql服務(wù)器 可以是ip地址 主機名 網(wǎng)段(主機位用%代替) 除本機外的所有網(wǎng)絡(luò)地址使用%
Select_priv。確定用戶是否可以通過SELECT命令選擇數(shù)據(jù)。
Insert_priv。確定用戶是否可以通過INSERT命令插入數(shù)據(jù)。
Update_priv。確定用戶是否可以通過UPDATE命令修改現(xiàn)有數(shù)據(jù)。
Delete_priv。確定用戶是否可以通過DELETE命令刪除現(xiàn)有數(shù)據(jù)。
Create_priv。確定用戶是否可以創(chuàng)建新的數(shù)據(jù)庫和表。
Drop_priv。確定用戶是否可以刪除現(xiàn)有數(shù)據(jù)庫和表。
Reload_priv。確定用戶是否可以執(zhí)行刷新和重新加載MySQL所用各種內(nèi)部緩存的特定命令,包括日志、權(quán)限、主機、查詢和表。
Shutdown_priv。確定用戶是否可以關(guān)閉MySQL服務(wù)器。在將此權(quán)限提供給root賬戶之外的任何用戶時,都應(yīng)當非常謹慎。
Process_priv。確定用戶是否可以通過SHOW PROCESSLIST命令查看其他用戶的進程。
File_priv。確定用戶是否可以執(zhí)行SELECT INTO OUTFILE和LOAD DATA INFILE命令。
Grant_priv。確定用戶是否可以將已經(jīng)授予給該用戶自己的權(quán)限再授予其他用戶。例如,如果用戶可以插入、選擇和刪除foo數(shù)據(jù)庫中的信息,并且授予了GRANT權(quán)限,則該用戶就可以將其任何或全部權(quán)限授予系統(tǒng)中的任何其他用戶。
References_priv。目前只是某些未來功能的占位符;現(xiàn)在沒有作用。
Index_priv。確定用戶是否可以創(chuàng)建和刪除表索引。
Alter_priv。確定用戶是否可以重命名和修改表結(jié)構(gòu)。
Show_db_priv。確定用戶是否可以查看服務(wù)器上所有數(shù)據(jù)庫的名字,包括用戶擁有足夠訪問權(quán)限的數(shù)據(jù)庫??梢钥紤]對所有用戶禁用這個權(quán)限,除非有特別不可抗拒的原因。
Super_priv。確定用戶是否可以執(zhí)行某些強大的管理功能,例如通過KILL命令刪除用戶進程,使用SET
GLOBAL修改全局MySQL變量,執(zhí)行關(guān)于復制和日志的各種命令。
Create_tmp_table_priv。確定用戶是否可以創(chuàng)建臨時表。
Lock_tables_priv。確定用戶是否可以使用LOCK TABLES命令阻止對表的訪問/修改。
Execute_priv。確定用戶是否可以執(zhí)行存儲過程。此權(quán)限只在MySQL 5.0及更高版本中有意義。
Repl_slave_priv。確定用戶是否可以讀取用于維護復制數(shù)據(jù)庫環(huán)境的二進制日志文件。此用戶位于主系統(tǒng)中,有利于主機和客戶機之間的通信。
Repl_client_priv。確定用戶是否可以確定復制從服務(wù)器和主服務(wù)器的位置。
Create_view_priv。確定用戶是否可以創(chuàng)建視圖。此權(quán)限只在MySQL 5.0及更高版本中有意義。關(guān)于視圖的更多信息,參見第34章。
Show_view_priv。確定用戶是否可以查看視圖或了解視圖如何執(zhí)行。此權(quán)限只在MySQL 5.0及更高版本中有意義。關(guān)于視圖的更多信息,參見第34章。
Create_routine_priv。確定用戶是否可以更改或放棄存儲過程和函數(shù)。此權(quán)限是在MySQL 5.0中引入的。
Alter_routine_priv。確定用戶是否可以修改或刪除存儲函數(shù)及函數(shù)。此權(quán)限是在MySQL 5.0中引入的。
Create_user_priv。確定用戶是否可以執(zhí)行CREATE USER命令,這個命令用于創(chuàng)建新的MySQL賬戶。
Event_priv。確定用戶能否創(chuàng)建、修改和刪除事件。這個權(quán)限是MySQL 5.1.6新增的。
Trigger_priv。確定用戶能否創(chuàng)建和刪除觸發(fā)器,這個權(quán)限是MySQL 5.1.6新增的。
一般我們在程序中使用的權(quán)限都是設(shè)置的剛剛夠用就行,不要設(shè)置過高的權(quán)限從而給數(shù)據(jù)庫帶來一些安全隱患;
mysql數(shù)據(jù)庫默認root管理員用戶只能在本機登陸為了方便管理我們將我們添加一個root用戶在管理機的地址,有所有權(quán)限,才能遠程管理mysql數(shù)據(jù)庫
在本機用root用戶登陸mysql
mysql -hlocalhost -uroot -p管理員密碼
如果是新安裝的mysql數(shù)據(jù)庫服務(wù)器(以5.7版本為例) 默認的root密碼是安裝時隨即生成的可以在日志文件中找到 root@localhost:后面是隨機密碼大部分隨機密碼有特殊符號所以登陸的時候密碼要用單引號引起來
[root@A5 ~]# grep 'password' /var/log/mysqld.log
2018-02-23T00:42:30.776575Z 1 [Note] A temporary password is generated for root@localhost: aRaOssg_*774
登陸進入mysql后
mysql> grant all on *.* to root@'遠程管理的客戶端ip' identified by '遠程管理的密碼' with grant option; #with grant option 是給新加的root用戶授權(quán)權(quán)限
這樣就可以在你指定的管理機上登陸mysql服務(wù)器了
grant 權(quán)限列表 on 庫名.表名 to "用戶名"@"客戶端地址" identified by “密碼” with grant option; 新授權(quán)的權(quán)限在指定的客戶端上也可以授權(quán) with grant option
客戶端地址可以是指定ip
指定網(wǎng)段主機位用%表示 192.168.4.%
所以ip用%
權(quán)限 all 所有權(quán)限
庫和表可以用*來表示所有的意思
查看數(shù)據(jù)庫服務(wù)器上已經(jīng)有的授權(quán)的用戶及權(quán)限
select user,host from mysql.user;
show garts for "用戶名"@“客戶端地址”;
顯示當前登陸的用戶
select user();
顯示當前主機名
select @@hostname;
查看登陸用戶的訪問權(quán)限
show grants;
權(quán)限撤銷
revoke 權(quán)限列表 on 庫名.表名 from "用戶名"@"客戶端地址"
刪除授權(quán)用戶
drop user "用戶名"@"客戶端地址"; 刪除授權(quán)用戶后該用戶的權(quán)限也會全部被刪除
修改授權(quán)用戶的登陸密碼
set password for "用戶名"@"客戶端地址"=password("新密碼")
授權(quán)用戶重置自己的用戶密碼
set password=password("新密碼");
如果說你要給某一個庫據(jù)具有所有權(quán)限包含可以授權(quán)的權(quán)限
你需要添加該用戶在mysql數(shù)據(jù)庫中的所有表具有插入權(quán)限 (如果沒有mysql的插入權(quán)限,授予該用戶的with grant option 也無法給其他用戶授權(quán)) 并且該用戶能給其他用戶授權(quán)的權(quán)限不能大于本身具有的權(quán)限
恢復數(shù)據(jù)庫管理員本機管理密碼(忘記的root用戶的管理密碼的請況下在mysql服務(wù)器操作系統(tǒng)上)
1.修改配置文件 /etc/my.cnf 文件
在[mysqld] 下面
添加跳過授權(quán)表的參數(shù)(如果有驗證策略的參數(shù)設(shè)置需要先注釋已經(jīng)添加過的驗證策略參數(shù))skip-grant-tables
2.重啟mysql 服務(wù)
3.無密碼進入mysql
4.修改mysql root用戶密碼
update mysql.user set authentication_string=password("新密碼") where user=“root” host=“l(fā)ocalhost”;
5.退出,修改回原來的mysql配置
6.重啟mysqld服務(wù)
下面提供一些示例
1、修改數(shù)據(jù)庫管理員從本機登錄的密碼為123456
數(shù)據(jù)庫管理員使用新密碼從本機連接數(shù)據(jù)庫服務(wù)器
mysqladmin -uroot -p654321 password123456;
2、查看當前登陸數(shù)據(jù)庫服務(wù)器的用戶是誰?
mysql> select user();
3、查看當前登陸數(shù)據(jù)庫服務(wù)器用戶的權(quán)限?
mysql> show grants for root@localhost;
4、查看當前數(shù)據(jù)庫服務(wù)器有哪些授權(quán)用戶?
mysql> select user,host from mysql.user;
5、授權(quán)管理員用戶可以在網(wǎng)絡(luò)中的192.168.4.254主機登錄,對所有庫和表有完全權(quán)限且有授權(quán)的權(quán)限;登陸密碼abc123
mysql> grant all on *.* to root@'192.168.4.254' identified by 'abc123' with grant option;
6、不允許數(shù)據(jù)庫管理員在數(shù)據(jù)庫服務(wù)器本機登錄。(在做此操作之前一定要添加一個可以遠程管理的用戶,否則你就進不了mysql服務(wù)器了)
drop user root@"localhost";
7、授權(quán)userweb用戶可以從網(wǎng)絡(luò)中的任意主機訪問數(shù)據(jù)庫服務(wù)器,對db3庫下的user表有查看、更新name字段和age字段的權(quán)限 , 登錄密碼userweb888。
grant select,update(name,age) on db3.user to userweb@'%' identified by 'userweb888'
8、驗證以上授權(quán)是否成功
#mysql -h292.168.4.51 -uuserweb -puserweb888
mysql> select * from db3.user;
mysql> update db3.user set name="xx",age=20 where name="ss";
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> delete from db3.user where name="xx";
ERROR 1142 (42000): DELETE command denied to user 'userweb'@'192.168.4.254' for table 'user'
9、userweb修改自己的登陸密碼為123456,并驗證能否使用新密碼登陸
mysql> set password=password("123456");
Query OK, 0 rows affected, 1 warning (0.00 sec)
#mysql -h292.168.4.51 -uuserweb -p123456
10、 數(shù)據(jù)庫管理員修改授權(quán)用戶userweb的登錄密碼為654321,讓授權(quán)用戶userweb 使用新密碼登陸數(shù)據(jù)庫服務(wù)器。
set password for userweb@"%"=password("654321");
11、撤銷授權(quán)用戶userweb 的所有授權(quán)并 使其不再能使用此用戶連接數(shù)據(jù)庫服務(wù)器。
mysql> drop user user@"%";
12、授權(quán)webadmin用戶可以從網(wǎng)絡(luò)中的所有主機登錄,對bbsdb庫擁有完全權(quán)限,且有授權(quán)權(quán)限,登錄密碼為 123456
mysql> grant all on bbsdb.* to webadmin@'%' identified by '123456' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> grant insert on mysql.* to webadmin@"%" ;
Query OK, 0 rows affected (0.00 sec)
13、在客戶端使用授權(quán)用戶webadmin登錄,把自己的權(quán)限授權(quán)給userone用戶 , 登錄密碼是 123456
# mysql -h292.168.4.51 -uwebadmin -p123456
mysql> grant all on bbsdb.* to userone@"%" identified by "123456" with grant option;
15、撤銷webadmin用戶的授權(quán)權(quán)限。mysql> revoke grant option on bbsdb.* from webadmin@"%";
Query OK, 0 rows affected (0.00 sec)
對于以上關(guān)于mysql數(shù)據(jù)庫的權(quán)限管理詳解,如果大家還有更多需要了解的可以持續(xù)關(guān)注我們億速云的行業(yè)推新,如需獲取專業(yè)解答,可在官網(wǎng)聯(lián)系售前售后的,希望該文章可給大家?guī)硪欢ǖ闹R更新。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。