MySQL許可權更改何時生效

2022-09-01 05:48:08 字數 1354 閱讀 4481

偶然在一次實驗中發現mysql許可權分配何時生效的問題,當在同一臺電腦(伺服器)上,我用的只是一台普通pc,建立的乙個普通使用者user1,除測試表test1的select以外無其他許可權

create user user1@localhost;

grant select on test1.* to user1@localhost;

同時用root和user1連線mysql,如不想用圖形化可在cmd命令列執行

mysql -u user1 - p test1

然後在user1使用者下對某張表進行insert的操作(注意user1一直處於連線狀態)

insert into test1 values('aa');

執行結果是user1無相應的許可權,執行不成功

在root下為user1授權

grant insert on test1.* to user1@localhost;

flush privileges;

在user1下再次對錶test1進行insert操作

這時發現,居然還是提示未有相應許可權!!

然後我們user1使用者退出登入後再重新登入上去,這時發現,可以作insert操作了.

因為第一次寫帖還不是很熟悉發圖發**的操作,所以有興趣的朋友可以親自做一下我上面說的這個小測試.

下面引用一下mysql5.1 參考手冊裡的一段話:

5.7.7. 許可權更改何時生效

當mysqld啟動時,所有授權表的內容被讀進記憶體並且從此時生效。

當伺服器注意到授權表被改變了時,現存的客戶端連線有如下影響: 

表和列許可權在客戶端的下一次請求時生效。 

資料庫許可權改變在下乙個use db_name命令生效。 

·         全域性許可權的改變和密碼改變在下一次客戶端連線時生效。

如果用grant、revoke或set password對授權表進行修改,伺服器會注意到並立即重新將授權表載入記憶體。

如果你手動地修改授權表(使用insert、update或delete等等),你應該執行mysqladmin flush-privileges或mysqladmin reload告訴伺服器再裝載授權表,否則你的更改將不會生效,除非你重啟伺服器。

如果你直接更改了授權表但忘記過載,重啟伺服器後你的更改方生效。這樣可能讓你迷惑為什麼你的更改沒有什麼變化!

仔細讀了一下才發現,結論很簡單:

當操作物件為 *.*或xx.*(屬於全域性許可權)時,要在下一次客戶端連線時才生效,

當操作物件為xx.xx時,就能做到實時更新了,

僅從這點看來,mysql的安全性並沒有做得太好,

也不知道mysql出於什麼考慮做出了這樣的設計.

MySQL許可權更改何時生效

偶然在一次實驗中發現mysql許可權分配何時生效的問題,當在同一臺電腦 伺服器 上,我用的只是一台普通pc,建立的乙個普通使用者user1,除測試表test1的select以外無其他許可權 create user user1 localhost grant select on test1.to us...

MYSQL當許可權更改生效時

當 mysqld 啟動時,它會將所有授權表內容讀入記憶體。記憶體中的表在此時對訪問控制有效。如果你修改授權表間接使用賬戶管理語句,如 grant,revoke,set password,或 rename user,伺服器注意到這些變化,並立即再次載入授權表到記憶體中。如果你修改授權表直接使用的語句,...

MySQL 許可權生效

用grant revoke或set password對授權表施行的修改會立即被伺服器注意到。如果你手工地修改授權表 使用insert update等等 你應該執行乙個flush privileges語句或執行mysqladmin flush privileges告訴伺服器再裝載授權表,否則你的改變將...