1. 程式人生 > >mysql授權管理

mysql授權管理

mysql 權限管理

數據庫的安全的重要性就不需要我來贅述了。除了做好安全備份外,我們首先要做的是做好我們數據庫的權限控制,盡量保護我們的數據庫不被黑客攻擊。
本文主要講的是mysql數據庫的權限管理 ,在當前網絡環境中互聯網公司中的關系型數據庫大多采用的是mysql。
首先說一下mysql數據庫管理權限的數據庫是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數據庫中幾個重要的表

columns_priv表 記錄授權用戶對表中字段的訪問權限

db 表記錄用戶服務器上庫的訪問權限

tables_priv 表 記錄授權用戶對庫中表的訪問權限

user 記錄有哪些授權用戶

user 表中的字段

user 是用戶名 root是mysql的管理員用戶

host 是允許該用戶從哪個客戶端訪問mysql服務器 可以是ip地址 主機名 網段(主機位用%代替) 除本機外的所有網絡地址使用%

Select_priv。確定用戶是否可以通過SELECT命令選擇數據。

Insert_priv。確定用戶是否可以通過INSERT命令插入數據。

Update_priv。確定用戶是否可以通過UPDATE命令修改現有數據。

Delete_priv。確定用戶是否可以通過DELETE命令刪除現有數據。

Create_priv。確定用戶是否可以創建新的數據庫和表。

Drop_priv。確定用戶是否可以刪除現有數據庫和表。

Reload_priv。確定用戶是否可以執行刷新和重新加載MySQL所用各種內部緩存的特定命令,包括日誌、權限、主機、查詢和表。

Shutdown_priv。確定用戶是否可以關閉MySQL服務器。在將此權限提供給root賬戶之外的任何用戶時,都應當非常謹慎。

Process_priv。確定用戶是否可以通過SHOW PROCESSLIST命令查看其他用戶的進程。

File_priv。確定用戶是否可以執行SELECT INTO OUTFILE和LOAD DATA INFILE命令。

Grant_priv。確定用戶是否可以將已經授予給該用戶自己的權限再授予其他用戶。例如,如果用戶可以插入、選擇和刪除foo數據庫中的信息,並且授予了GRANT權限,則該用戶就可以將其任何或全部權限授予系統中的任何其他用戶。

References_priv。目前只是某些未來功能的占位符;現在沒有作用。

Index_priv。確定用戶是否可以創建和刪除表索引。

Alter_priv。確定用戶是否可以重命名和修改表結構。

Show_db_priv。確定用戶是否可以查看服務器上所有數據庫的名字,包括用戶擁有足夠訪問權限的數據庫。可以考慮對所有用戶禁用這個權限,除非有特別不可抗拒的原因。

Super_priv。確定用戶是否可以執行某些強大的管理功能,例如通過KILL命令刪除用戶進程,使用SET

GLOBAL修改全局MySQL變量,執行關於復制和日誌的各種命令。

Create_tmp_table_priv。確定用戶是否可以創建臨時表。

Lock_tables_priv。確定用戶是否可以使用LOCK TABLES命令阻止對表的訪問/修改。

Execute_priv。確定用戶是否可以執行存儲過程。此權限只在MySQL 5.0及更高版本中有意義。

Repl_slave_priv。確定用戶是否可以讀取用於維護復制數據庫環境的二進制日誌文件。此用戶位於主系統中,有利於主機和客戶機之間的通信。

Repl_client_priv。確定用戶是否可以確定復制從服務器和主服務器的位置。

Create_view_priv。確定用戶是否可以創建視圖。此權限只在MySQL 5.0及更高版本中有意義。關於視圖的更多信息,參見第34章。

Show_view_priv。確定用戶是否可以查看視圖或了解視圖如何執行。此權限只在MySQL 5.0及更高版本中有意義。關於視圖的更多信息,參見第34章。

Create_routine_priv。確定用戶是否可以更改或放棄存儲過程和函數。此權限是在MySQL 5.0中引入的。

Alter_routine_priv。確定用戶是否可以修改或刪除存儲函數及函數。此權限是在MySQL 5.0中引入的。

Create_user_priv。確定用戶是否可以執行CREATE USER命令,這個命令用於創建新的MySQL賬戶。

Event_priv。確定用戶能否創建、修改和刪除事件。這個權限是MySQL 5.1.6新增的。

Trigger_priv。確定用戶能否創建和刪除觸發器,這個權限是MySQL 5.1.6新增的。

一般我們在程序中使用的權限都是設置的剛剛夠用就行,不要設置過高的權限從而給數據庫帶來一些安全隱患;

mysql數據庫默認root管理員用戶只能在本機登陸為了方便管理我們將我們添加一個root用戶在管理機的地址,有所有權限,才能遠程管理mysql數據庫

在本機用root用戶登陸mysql

mysql -hlocalhost -uroot -p管理員密碼

如果是新安裝的mysql數據庫服務器(以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用戶授權權限

這樣就可以在你指定的管理機上登陸mysql服務器了

用戶授權

grant 權限列表 on 庫名.表名 to "用戶名"@"客戶端地址" identified by “密碼” with grant option; 新授權的權限在指定的客戶端上也可以授權 with grant option

客戶端地址可以是指定ip

指定網段主機位用%表示 192.168.4.%

所以ip用%

權限 all 所有權限

庫和表可以用*來表示所有的意思

查看數據庫服務器上已經有的授權的用戶及權限

select user,host from mysql.user;

show garts for "用戶名"@“客戶端地址”;

顯示當前登陸的用戶

select user();

顯示當前主機名

select @@hostname;

查看登陸用戶的訪問權限

show grants;

權限撤銷

revoke 權限列表 on 庫名.表名 from "用戶名"@"客戶端地址"

刪除授權用戶

drop user "用戶名"@"客戶端地址"; 刪除授權用戶後該用戶的權限也會全部被刪除

修改授權用戶的登陸密碼

set password for "用戶名"@"客戶端地址"=password("新密碼")

授權用戶重置自己的用戶密碼

set password=password("新密碼");




如果說你要給某一個庫據具有所有權限包含可以授權的權限

你需要添加該用戶在mysql數據庫中的所有表具有插入權限 (如果沒有mysql的插入權限,授予該用戶的with grant option 也無法給其他用戶授權) 並且該用戶能給其他用戶授權的權限不能大於本身具有的權限

恢復數據庫管理員本機管理密碼(忘記的root用戶的管理密碼的請況下在mysql服務器操作系統上)

1.修改配置文件 /etc/my.cnf 文件

在[mysqld] 下面

添加跳過授權表的參數(如果有驗證策略的參數設置需要先註釋已經添加過的驗證策略參數)skip-grant-tables

2.重啟mysql 服務

3.無密碼進入mysql

4.修改mysql root用戶密碼

update mysql.user set authentication_string=password("新密碼") where user=“root” host=“localhost”;

5.退出,修改回原來的mysql配置

6.重啟mysqld服務

下面提供一些示例

1、修改數據庫管理員從本機登錄的密碼為123456
數據庫管理員使用新密碼從本機連接數據庫服務器
mysqladmin -uroot -p654321 password123456;

2、查看當前登陸數據庫服務器的用戶是誰?
mysql> select user();
3、查看當前登陸數據庫服務器用戶的權限?
mysql> show grants for root@localhost;

4、查看當前數據庫服務器有哪些授權用戶?
mysql> select user,host from mysql.user;

5、授權管理員用戶可以在網絡中的192.168.4.254主機登錄,對所有庫和表有完全權限且有授權的權限;登陸密碼abc123
mysql> grant all on *.* to root@'192.168.4.254' identified by 'abc123' with grant option;


6、不允許數據庫管理員在數據庫服務器本機登錄。(在做此操作之前一定要添加一個可以遠程管理的用戶,否則你就進不了mysql服務器了)
drop user root@"localhost";


7、授權userweb用戶可以從網絡中的任意主機訪問數據庫服務器,對db3庫下的user表有查看、更新name字段和age字段的權限 , 登錄密碼userweb888。
grant select,update(name,age) on db3.user to userweb@'%' identified by 'userweb888'

8、驗證以上授權是否成功
#mysql -h192.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 -h192.168.4.51 -uuserweb -p123456

10、 數據庫管理員修改授權用戶userweb的登錄密碼為654321,讓授權用戶userweb 使用新密碼登陸數據庫服務器。
set password for userweb@"%"=password("654321");


11、撤銷授權用戶userweb 的所有授權並 使其不再能使用此用戶連接數據庫服務器。
mysql> drop user user@"%";


12、授權webadmin用戶可以從網絡中的所有主機登錄,對bbsdb庫擁有完全權限,且有授權權限,登錄密碼為 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、在客戶端使用授權用戶webadmin登錄,把自己的權限授權給userone用戶 , 登錄密碼是 123456
# mysql -h192.168.4.51 -uwebadmin -p123456
mysql> grant all on bbsdb.* to userone@"%" identified by "123456" with grant option;


15、撤銷webadmin用戶的授權權限。mysql> revoke grant option on bbsdb.* from webadmin@"%";
Query OK, 0 rows affected (0.00 sec)


mysql授權管理