MySQL 許可權管理 DCL資料控制語言

2021-10-11 10:57:52 字數 3359 閱讀 6164

採⽤⽤戶名+主機名來識別⽤戶的⾝份。

連線資料庫,此時mysql會根據你的⽤戶名及你的**(ip或者主機名稱)判斷是否有許可權連線。

階段2:對mysql伺服器發起請求操作,如create table、select、delete、update等操作,此時mysql會判斷你是否有許可權操作這些指令。

⽤戶及許可權資訊放在庫名為mysql的庫中。mysql啟動時,這些內容被讀進記憶體並且從此時⽣效,所以如果通過直接操作這些表來修改⽤戶及許可權資訊後,需要重啟mysql 或者執行flush privileges;才可以⽣效。

⽤戶登入之後,mysql會和當前⽤戶之間建立⼀個連線,此時⽤戶相關的許可權資訊都儲存在這個連線,存放在記憶體中,此時如果有其他地⽅修改了當前⽤戶的許可權,這些變更的許可權會在下⼀次登入時才⽣效。

⽤戶資訊在 mysql.user 表中。

檢視mysql中所有使用者

use mysql;

select

user

,host from

user

;建立使用者

語法:create

user 使用者名稱[@主機名]

[identified by

'密碼'];

注意:1.主機名預設值為 %,表示該使用者可以從任何主機連線mysql伺服器

2.密碼可以省略,表示無密碼登入

上面建立了使用者名為 test1無密碼的使用者,沒有指定主機,可以看到host的預設值為%,表示test1可以從任何機器登入到mysql中。

說明:test2的主機為localhost表示本機,此使用者只能在本機登陸mysql;

create

user

'test2'@'localhost' identified by '

123';

說明:test3可以從任何機器連線到mysql伺服器;

create user 'test3'@'

%' identified by '

123';

說明:test4可以從192.168.1段的機器連線mysql;

create user 'test4'@'

192.168.1.

%' identified by '

123';

方式一:管理員直接修改密碼

set password for 『test1』@』%』 = password(『123456』);

注意:在mysql 5.7.9以後廢棄了password欄位和password()函式;密碼欄位為authentication_string。

priveleges (許可權列表),可以是 all ,表示所有許可權,也可以是 select、update 等許可權,多個許可權之間用逗號分開。

on 用來指定許可權針對哪些庫和表,格式為 資料庫.表名,點號前用來來指定資料庫名,點號後用來來指定表名,*.* 表示所有資料庫所有表。

to 表示將許可權賦予某個使用者, 格式為 username@host ,@前為使用者名稱,@後接限制的主機,可以是ip、ip段、網域名稱以及%,%表示任何地方。

with grant option 這個選項表示該使用者可以將自己擁有的許可權授權給別人。

注意:經常有人在建立操作使用者的時候不指定with grant option選項導致後來該使用者不能使用grant命令建立使用者或者給其它使用者授權。

備註:可以使用grant重複給使用者新增許可權,許可權疊加,比如你先給⽤使用者新增乙個select許可權,然後又給使用者新增乙個insert許可權,那麼該使用者就同時擁有了select和insert許可權。

給test1授權可以操作所有庫的所有許可權,相當於dba

grant

allon*.

*to'test1'@'%

';test1可以對test_db庫中所有表執行 select

grant select on test_db.* to 'test1'@'%';

test1可以對test_db庫中所有表執行select、update

grant select,update on test_db.* to 'test1'@'%';

test1使用者只能查詢mysql.user表的 user,host欄位

grant select(user,host) on mysql.`user` to 'test1'@'

%';

語法:

revoke privileges on database.table from 『使用者名稱』[@『主機』];

許可權小練習:建立使用者,檢視許可權,賦予許可權,檢視許可權,撤銷許可權,檢視許可權

create

user

'test2'@'%

' identified by '

123456789root';

show grants for 'test2'@'%';

grant select(user,host) on mysql.`user` to 'test2'@'%';

show grants for 'test2'@'%';

revoke select(host) on mysql.`user` from 'test2'@'%';

show grants for 'test2'@'

%';

授權原則說明:

• 只授予能滿足需要的最小許可權,防止使用者幹壞事,比如使用者只是需要查詢,那就只給select許可權就可以了,不要給使用者賦予update、insert或者delete許可權

• 建立使用者的時候限制使用者的登入主機,一般是限制成指定ip或者內網ip段

• 初始化資料庫的時候刪除沒有密碼的使用者,安裝完資料庫的時候會自動建立一些使用者,這些使用者預設沒有密碼

• 為每個使用者設定滿足密碼複雜度的密碼

• 定期清理不需要的使用者,**許可權或者刪除使用者

總結:

通過命令的方式操作使用者和許可權不需要重新整理,下次登入自動生效

通過操作mysql庫中表的方式修改使用者資訊,需要呼叫 flush privileges; 重新整理一下,下次登入自動生效

mysql識別使用者身份的方式是:使用者名稱+主機

一些指令中帶主機的,主機都可以省略,預設值為%,表示所有機器

mysql中使用者和許可權的資訊在庫名為mysql的庫中

MySQL許可權操作(DCL)

語法 create user 使用者名稱 位址 identified by 密碼 create user user1 localhost identified by 123 create user user2 identified by 123 user1使用者只能訪問localhost user2...

MySql筆記 05資料許可權語言 DCL

3 常見的許可權型別 2.3 修改使用者密碼語法 set password for使用者名稱 連線到的伺服器 新密碼 修改test使用者的密碼為19981104 set password for test localhost 19981104 修改當前使用者的密碼,如果是root則修改root的密碼...

MySQL 利用DCL管理使用者和控制許可權

dcl data control language 資料控制語言,用來定義資料庫的訪問許可權和安全級別,及建立使用者。建立使用者 create user 使用者名稱 主機名 identified by 密碼 create user summerday localhost identified by ...