真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql怎么分權(quán)限,mysql權(quán)限命令

MySQL 數(shù)據(jù)庫,如何分角色權(quán)限建表?

角色一直存在各個(gè)數(shù)據(jù)庫中,比如 SQL Server、Oracle 等,MySQL 自從版本 8.0 release,引入了角色這個(gè)概念。

班瑪ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

角色的概念

角色就是一組針對各種數(shù)據(jù)庫權(quán)限的集合。比如,把一個(gè)角色分配給一個(gè)用戶,那這個(gè)用戶就擁有了這個(gè)角色包含的所有權(quán)限。一個(gè)角色可以分配給多個(gè)用戶,另外一個(gè)用戶也可以擁有多個(gè)角色,兩者是多對多的關(guān)系。不過 MySQL 角色目前還沒有提供類似于其他數(shù)據(jù)庫的系統(tǒng)預(yù)分配的角色。比如某些數(shù)據(jù)庫的 db_owner、 db_datareader 、 db_datawriter 等等。那接下來我分幾個(gè)方面,來示例說明角色的使用以及相關(guān)注意事項(xiàng)。

示例 1:一個(gè)完整角色的授予步驟

用管理員創(chuàng)建三個(gè)角色:db_owner, db_datareader, db_datawriter

mysql create role db_owner,db_datareader,db_datawriter;

Query OK, 0 rows affected (0.02 sec)

mysql grant all on ytt_new.* to db_owner;

Query OK, 0 rows affected (0.01 sec)

mysql grant select on ytt_new.* to db_datareader;

Query OK, 0 rows affected (0.01 sec)

mysql grant insert,delete,update on ytt_new.* to db_datawriter;

Query OK, 0 rows affected (0.01 sec)

創(chuàng)建三個(gè)普通用戶,分別為 ytt1、ytt2、ytt3。mysql create user ytt1 identified by 'ytt',ytt2 identified by 'ytt',ytt3 identified by 'ytt';Query OK, 0 rows affected (0.01 sec)

分別授予這三個(gè)用戶對應(yīng)的角色。

-- 授權(quán)角色

mysql grant db_owner to ytt1;

Query OK, 0 rows affected (0.02 sec)

-- 激活角色

mysql set default role db_owner to ytt1;

Query OK, 0 rows affected (0.00 sec)

mysql grant db_datareader to ytt2;

Query OK, 0 rows affected (0.01 sec)

mysql set default role db_datareader to ytt2;

Query OK, 0 rows affected (0.01 sec)

mysql grant db_datawriter to ytt3;

Query OK, 0 rows affected (0.01 sec)

mysql set default role db_datawriter to ytt3;

Query OK, 0 rows affected (0.01 sec)

以上是角色授予的一套完整步驟。那上面有點(diǎn)非常規(guī)的地方是激活角色這個(gè)步驟。MySQL 角色在創(chuàng)建之初默認(rèn)是沒有激活的,也就是說創(chuàng)建角色,并且給一個(gè)用戶特定的角色,這個(gè)用戶其實(shí)并不能直接使用這個(gè)角色,除非激活了才可以。

示例 2:一個(gè)用戶可以擁有多個(gè)角色

-- 用管理員登錄并且創(chuàng)建用戶

mysql create user ytt4 identified by 'ytt';

Query OK, 0 rows affected (0.00 sec)

-- 把之前的三個(gè)角色都分配給用戶ytt4.

mysql grant db_owner,db_datareader,db_datawriter to ytt4;

Query OK, 0 rows affected (0.01 sec)

-- 激活用戶ytt4的所有角色.

mysql set default role all to ytt4;

Query OK, 0 rows affected (0.02 sec)

-- ytt4 用戶登錄

root@ytt-pc:/var/lib/mysql# mysql -uytt4 -pytt -P3304 -hytt-pc

...

-- 查看當(dāng)前角色列表

mysql select current_role();

+--------------------------------------------------------+

| current_role() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

+--------------------------------------------------------+

| `db_datareader`@`%`,`db_datawriter`@`%`,`db_owner`@`%` |

+--------------------------------------------------------+

1 row in set (0.00 sec)

-- 簡單創(chuàng)建一張表并且插入記錄, 檢索記錄,完了刪掉這張表

mysql use ytt_new

Database changed

mysql create table t11(id int);

Query OK, 0 rows affected (0.05 sec)

mysql insert into t11 values (1);

Query OK, 1 row affected (0.02 sec)

mysql select * from t11;

+------+

| id ? |

+------+

| ? ?1 |

+------+

1 row in set (0.00 sec)

mysql drop table t11;

Query OK, 0 rows affected (0.04 sec)

示例 3:用戶在當(dāng)前 session 里角色互換

其實(shí)意思是說,用戶連接到 MySQL 服務(wù)器后,可以切換當(dāng)前的角色列表,比如由 db_owner 切換到 db_datareader。

-- 還是之前的用戶ytt4, 切換到db_datareader

mysql set role db_datareader;

Query OK, 0 rows affected (0.00 sec)

mysql select current_role();

+---------------------+

| current_role() ? ? ?|

+---------------------+

| `db_datareader`@`%` |

+---------------------+

1 row in set (0.00 sec)

-- 切換后,沒有權(quán)限創(chuàng)建表

mysql create table t11(id int);

ERROR 1142 (42000): CREATE command denied to user 'ytt4'@'ytt-pc' for table 't11'

-- 切換到 db_owner,恢復(fù)所有權(quán)限。

mysql set role db_owner;

Query OK, 0 rows affected (0.00 sec)

mysql create table t11(id int);

Query OK, 0 rows affected (0.04 sec)

示例 4:關(guān)于角色的兩個(gè)參數(shù)

activate_all_roles_on_login:是否在連接 MySQL 服務(wù)時(shí)自動(dòng)激活角色mandatory_roles:強(qiáng)制所有用戶默認(rèn)角色

-- 用管理員連接MySQL,

-- 設(shè)置默認(rèn)激活角色

mysql set global activate_all_roles_on_login=on;

Query OK, 0 rows affected (0.00 sec)

-- 設(shè)置強(qiáng)制給所有用戶賦予角色db_datareader

mysql set global mandatory_roles='db_datareader';

Query OK, 0 rows affected (0.00 sec)

-- 創(chuàng)建用戶ytt7.

mysql create user ytt7;

Query OK, 0 rows affected (0.01 sec)

-- 用 ytt7登錄數(shù)據(jù)庫

root@ytt-pc:/var/lib/mysql# mysql -uytt7 -P3304 -hytt-pc

...

mysql show grants;

+-------------------------------------------+

| Grants for ytt7@% ? ? ? ? ? ? ? ? ? ? ? ? |

+-------------------------------------------+

| GRANT USAGE ON *.* TO `ytt7`@`%` ? ? ? ? ?|

| GRANT SELECT ON `ytt_new`.* TO `ytt7`@`%` |

| GRANT `db_datareader`@`%` TO `ytt7`@`%` ? |

+-------------------------------------------+

3 rows in set (0.00 sec)

示例 5 :create role 和 create user 都有創(chuàng)建角色權(quán)限,兩者有啥區(qū)別?

以下分別創(chuàng)建兩個(gè)用戶 ytt8、ytt9,一個(gè)給 create role,一個(gè)給 create user 權(quán)限。

-- 管理員登錄,創(chuàng)建用戶ytt8,ytt9.

mysql create user ytt8,ytt9;

Query OK, 0 rows affected (0.01 sec)

mysql grant create role on *.* to ytt8;

Query OK, 0 rows affected (0.02 sec)

mysql grant create user on *.* to ytt9;

Query OK, 0 rows affected (0.01 sec)

-- 用ytt8 登錄,

root@ytt-pc:/var/lib/mysql# mysql -uytt8 -P3304 -hytt-pc

...

mysql create role db_test;

Query OK, 0 rows affected (0.02 sec)

-- 可以創(chuàng)建角色,但是不能創(chuàng)建用戶

mysql create user ytt10;

ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation

mysql \q

Bye

-- 用ytt9 登錄

root@ytt-pc:/var/lib/mysql# mysql -uytt9 -P3304 -hytt-pc

...

-- 角色和用戶都能創(chuàng)建

mysql create role db_test2;

Query OK, 0 rows affected (0.02 sec)

mysql create user ytt10;

Query OK, 0 rows affected (0.01 sec)

mysql \q

Bye

那這里其實(shí)看到 create user 包含了 create role,create user 即可以創(chuàng)建用戶,也可以創(chuàng)建角色。

示例 6:MySQL 用戶也可以當(dāng)角色來用

-- 用管理員登錄,創(chuàng)建用戶ytt11,ytt12.

mysql create user ytt11,ytt12;

Query OK, 0 rows affected (0.01 sec)

mysql grant select on ytt_new.* to ytt11;

Query OK, 0 rows affected (0.01 sec)

-- 把ytt11普通用戶的權(quán)限授予給ytt12

mysql grant ytt11 to ytt12;

Query OK, 0 rows affected (0.01 sec)

-- 來查看 ytt12的權(quán)限,可以看到擁有了ytt11的權(quán)限

mysql show grants for ytt12;

+-----------------------------------+

| Grants for ytt12@% ? ? ? ? ? ? ? ?|

+-----------------------------------+

| GRANT USAGE ON *.* TO `ytt12`@`%` |

| GRANT `ytt11`@`%` TO `ytt12`@`%` ?|

+-----------------------------------+

2 rows in set (0.00 sec)

-- 在細(xì)化點(diǎn),看看ytt12擁有哪些具體的權(quán)限

mysql show grants for ytt12 using ytt11;

+--------------------------------------------+

| Grants for ytt12@% ? ? ? ? ? ? ? ? ? ? ? ? |

+--------------------------------------------+

| GRANT USAGE ON *.* TO `ytt12`@`%` ? ? ? ? ?|

| GRANT SELECT ON `ytt_new`.* TO `ytt12`@`%` |

| GRANT `ytt11`@`%` TO `ytt12`@`%` ? ? ? ? ? |

+--------------------------------------------+

3 rows in set (0.00 sec)

示例 7:角色的撤銷

角色撤銷和之前權(quán)限撤銷類似。要么 revoke,要么刪除角色,那這個(gè)角色會(huì)從所有擁有它的用戶上移除。

-- 用管理員登錄,移除ytt2的角色

mysql revoke db_datareader from ytt2;

Query OK, 0 rows affected (0.01 sec)

-- 刪除所有角色

mysql drop role db_owner,db_datareader,db_datawriter;

Query OK, 0 rows affected (0.01 sec)

-- 對應(yīng)的角色也從ytt1上移除掉了

mysql show grants for ytt1;

+----------------------------------+

| Grants for ytt1@% ? ? ? ? ? ? ? ?|

+----------------------------------+

| GRANT USAGE ON *.* TO `ytt1`@`%` |

+----------------------------------+

1 row in set (0.00 sec)

至此,我分了 7 個(gè)目錄說明了角色在各個(gè)方面的使用以及注意事項(xiàng),希望對大家有幫助。

MySQL的權(quán)限有哪些

MySQL的權(quán)限有哪些?

一.權(quán)限表

mysql數(shù)據(jù)庫中的3個(gè)權(quán)限表:user

、db、

host

權(quán)限表的存取過程是:

1)先從user表中的host、

user、

password這3個(gè)字段中判斷連接的IP、用戶名、密碼是否存在表中,存在則通過身份驗(yàn)證;

2)通過權(quán)限驗(yàn)證,進(jìn)行權(quán)限分配時(shí),按照useràdbàtables_privàcolumns_priv的順序進(jìn)行分配。即先檢查全局權(quán)限表user,如果user中對應(yīng)的權(quán)限為Y,則此用戶對所有數(shù)據(jù)庫的權(quán)限都為Y,將不再檢查db,

tables_priv,columns_priv;如果為N,則到db表中檢查此用戶對應(yīng)的具體數(shù)據(jù)庫,并得到db中為Y的權(quán)限;如果db中為N,則檢查tables_priv中此數(shù)據(jù)庫對應(yīng)的具體表,取得表中的權(quán)限Y,以此類推。

二.MySQL各種權(quán)限(共27個(gè))

(以下操作都是以root身份登陸進(jìn)行g(shù)rant授權(quán),以p1@localhost身份登陸執(zhí)行各種命令。)

1.

usage

連接(登陸)權(quán)限,建立一個(gè)用戶,就會(huì)自動(dòng)授予其usage權(quán)限(默認(rèn)授予)。

mysql

grant

usage

on

*.*

to

‘p1′@’localhost’

identified

by

‘123′;

該權(quán)限只能用于數(shù)據(jù)庫登陸,不能執(zhí)行任何操作;且usage權(quán)限不能被回收,也即REVOKE用戶并不能刪除用戶。

2.

select

必須有select的權(quán)限,才可以使用select

table

mysql

grant

select

on

pyt.*

to

‘p1′@’localhost’;

mysql

select

*

from

shop;

3.

create

必須有create的權(quán)限,才可以使用create

table

mysql

grant

create

on

pyt.*

to

‘p1′@’localhost’;

4.

create

routine

必須具有create

routine的權(quán)限,才可以使用{create

|alter|drop}

{procedure|function}

mysql

grant

create

routine

on

pyt.*

to

‘p1′@’localhost’;

當(dāng)授予create

routine時(shí),自動(dòng)授予EXECUTE,

ALTER

ROUTINE權(quán)限給它的創(chuàng)建者:

mysql

show

grants

for

‘p1′@’localhost’;

+—————————————————————————+

Grants

for

p1@localhost

+————————————————————————–+

|

GRANT

USAGE

ON

*.*

TO

‘p1′@’localhost’

IDENTIFIED

BY

PASSWORD

‘*23AE809DDACAF96AF0FD78ED04B6A265E05AA257′

|

|

GRANT

SELECT,

CREATE,

CREATE

ROUTINE

ON

`pyt`.*

TO

‘p1′@’localhost’|

|

GRANT

EXECUTE,

ALTER

ROUTINE

ON

PROCEDURE

`pyt`.`pro_shop1`

TO

‘p1′@’localhost’

|

+————————————————————————————-+

5.

create

temporary

tables(注意這里是tabl

mysql 權(quán)限設(shè)置

背景

在了解動(dòng)態(tài)權(quán)限之前,我們先回顧下 MySQL 的權(quán)限列表。

權(quán)限列表大體分為服務(wù)級別和表級別,列級別以及大而廣的角色(也是MySQL 8.0 新增)存儲程序等權(quán)限。我們看到有一個(gè)特殊的 SUPER 權(quán)限,可以做好多個(gè)操作。比如 SET 變量,在從機(jī)重新指定相關(guān)主機(jī)信息以及清理二進(jìn)制日志等。那這里可以看到,SUPER 有點(diǎn)太過強(qiáng)大,導(dǎo)致了僅僅想實(shí)現(xiàn)子權(quán)限變得十分困難,比如用戶只能 SET 變量,其他的都不想要。那么 MySQL 8.0 之前沒法實(shí)現(xiàn),權(quán)限的細(xì)分不夠明確,容易讓非法用戶鉆空子。

那么 MySQL 8.0 把權(quán)限細(xì)分為靜態(tài)權(quán)限和動(dòng)態(tài)權(quán)限,下面我畫了兩張?jiān)敿?xì)的區(qū)分圖,圖 1 為靜態(tài)權(quán)限,圖 2 為動(dòng)態(tài)權(quán)限。

圖 1- MySQL 靜態(tài)權(quán)限的權(quán)限管理圖

圖 2-動(dòng)態(tài)權(quán)限圖

那我們看到其實(shí)動(dòng)態(tài)權(quán)限就是對 SUPER 權(quán)限的細(xì)分。 SUPER 權(quán)限在未來將會(huì)被廢棄掉。

我們來看個(gè)簡單的例子,

比如, 用戶 'ytt2@localhost', 有 SUPER 權(quán)限。

mysql show grants for ytt2@'localhost';+---------------------------------------------------------------------------------+| Grants for ytt2@localhost ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |+---------------------------------------------------------------------------------+| GRANT INSERT, UPDATE, DELETE, CREATE, ALTER, SUPER ON *.* TO ytt2@localhost |+---------------------------------------------------------------------------------+1 row in set (0.00 sec)

但是現(xiàn)在我只想這個(gè)用戶有 SUPER 的子集,設(shè)置變量的權(quán)限。那么單獨(dú)給這個(gè)用戶賦予兩個(gè)能設(shè)置系統(tǒng)變量的動(dòng)態(tài)權(quán)限,完了把 SUPER 給拿掉。

mysql grant session_variables_admin,system_variables_admin on *.* to ytt2@'localhost';Query OK, 0 rows affected (0.03 sec)mysql revoke super on *.* from ytt2@'localhost';Query OK, 0 rows affected, 1 warning (0.02 sec)

我們看到這個(gè) WARNINGS 提示 SUPER 已經(jīng)廢棄了。

mysql show warnings;

+---------+------+----------------------------------------------+

| Level ? | Code | Message ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

+---------+------+----------------------------------------------+

| Warning | 1287 | The SUPER privilege identifier is deprecated |

+---------+------+----------------------------------------------+

1 row in set (0.00 sec)`

mysql show grants for ytt2@'localhost';

+-----------------------------------------------------------------------------------+

| Grants for ytt2@localhost ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

+-----------------------------------------------------------------------------------+

| GRANT INSERT, UPDATE, DELETE, CREATE, ALTER ON *.* TO ytt2@localhost ? ? ? ? ?|

| GRANT SESSION_VARIABLES_ADMIN,SYSTEM_VARIABLES_ADMIN ON *.* TO ytt2@localhost |

+-----------------------------------------------------------------------------------+

2 rows in set (0.00 sec)

當(dāng)然圖 2 上還有其它的動(dòng)態(tài)權(quán)限,這里就不做特別說明了。

如何給mysql用戶分配權(quán)限

查看用戶權(quán)限

mysql show grants for zx_root;

賦予權(quán)限

mysql grant select on dmc_db.* to zx_root;

回收權(quán)限

mysql revoke select on dmc_db.* from zx_root; //如果權(quán)限不存在會(huì)報(bào)錯(cuò)

設(shè)置權(quán)限時(shí)必須給出一下信息

1,要授予的權(quán)限

2,被授予訪問權(quán)限的數(shù)據(jù)庫或表

3,用戶名

grant和revoke可以在幾個(gè)層次上控制訪問權(quán)限

1,整個(gè)服務(wù)器,使用 grant ALL 和revoke ALL

2,整個(gè)數(shù)據(jù)庫,使用on database.*

3,特點(diǎn)表,使用on database.table

4,特定的列

5,特定的存儲過程


網(wǎng)站名稱:mysql怎么分權(quán)限,mysql權(quán)限命令
本文地址:http://weahome.cn/article/hcssci.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部