MySQL权限系统介绍51CTO博客 - 亚美娱乐

MySQL权限系统介绍51CTO博客

2019-03-06 10:20:46 | 作者: 雅青 | 标签: 权限,用户,指令 | 浏览: 1502

一、权限系统简介:

MySQL的权限系统在完成上比较简略,相关权限信息首要存储在mysql.User、mysql.db、mysql.Host、mysql_table_priv和mysql.column_priv几个表中。因为权限信息数据量比较小,并且拜访又比较频频,所以MySQL在启动时就会将一切的权限信息都Load到内存中保存在几个特定的结构中,所以才有了咱们手动修正了权限相关的表后,都需求经过履行"FLUSH PRIVILEGES" 指令从头加载MySQL的权限信息。咱们也能够经过GRANT,REVOKE或许DROP USER指令所做的修正权限后也会一起更新到内存结构中的权限信息。

二、权限的赋予与去除

要为某个用户授权能够运用GRANT指令,要去除某个用户现有的权限能够运用REVKOE指令,当给用户授权不只需求供给用户名,还能够指定经过哪个主机拜访,下面供给给简略的列子:

#创立一个用户test1只能从本机登录并赋予这个用户具有test库的查询权限
mysql> grant select  on test.* to test1@localhost identified by test123;
Query OK, 0 rows affected (0.03 sec)
#创立一个用户test2能够从互联网上任何一台主机登录并赋予这个用户具有test库的查询权限
mysql> grant select  on test.* to test2@% identified by test234;
Query OK, 0 rows affected (0.02 sec)
改写权限,并查询用户test1的权限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for test1@localhost;
+--------------------------------------------------------------------------------------------------------------+
| Grants for test1@localhost                                                                                   |
+--------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO test1@localhost IDENTIFIED BY PASSWORD *676243218923905CF94CB52A3C9D3EB30CE8E20D |
| GRANT SELECT ON `test`.* TO test1@localhost                                                              |
+--------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
删去用户test1的权限
mysql> revoke select on test.* from test1@localhost identified by test123;
Query OK, 0 rows affected (0.00 sec)
在此检查用户test1,现已没有权限了。
mysql> show grants for test1@localhost;
+--------------------------------------------------------------------------------------------------------------+
| Grants for test1@localhost                                                                                   |
+--------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO test1@localhost IDENTIFIED BY PASSWORD *676243218923905CF94CB52A3C9D3EB30CE8E20D |
+--------------------------------------------------------------------------------------------------------------+

三、权限等级

mysql的权限分为5个等级,别离如下:

1、Global Lovel:

Global Lovel的权限操控又称为大局操控权限,一切权限信息u保存在mysql.User 表中,Global Lovel的一切权限都是针对整个mysqld的,对一切mysql数据库下的一切表及一切字段都有用。假如一个权限是以Global Lovel来颁发的,则会掩盖其他一切等级的相同权限设置。Global Lovel首要有如下权限:

称号版别支撑约束信息
ALTERALL表结构更改权限
ALTER ROUTINE5.0.3procedure, function 和 trigger等的改变权限
CREATEALL数据库,表和索引的创立权限
CREATE ROUTINE5.0.3+procedure, function 和 trigger等的改变权限
CREATE TEMPORARY TABLES4.0.2+零时表的创立权限
CREATE USER5.0.3+创立用户的权限
CREATE VIEW5.0.1+创立视图的权限
DELETEALL删去表数据的权限
EXECUTE5.0.3+procedure, function 和 trigger等的履行权限
FILE
ALL履行LOAD DATA INFILE 和 SELECT... INTO FILE 的权限
INDEXALL在已有表上创立索引的权限
INSERT
ALL数据刺进权限
LOCK TABLES
4.0.2+履行LOCK TABLES 指令显现给表加锁的权限
PROCESS
ALL履行SHOW PROCESSLIST指令的权限
RELOAD
ALL履行FLUSH等让数据库重载LOAD某些目标或许数据指令的权限
REPLCATION SLAVE
4.0.2+主从仿制中SLAVE衔接用户所需的仿制权限
REPLICATION CLIENT
4.0.2+履行SHOW MASTER STATUS 和SHOW SLAVE STSTUS指令的权限
SELECT
ALL数据查询权限
SHOW DATABASES
4.0.2+履行SHOW DATABASES的权限
SHUTDOWN
ALLMySQL Server的shut down 权限
SHOW VIEW
5.0.1+履行SHOW CREATE VIEW指令检查VIEW创立句子的权限
SUPER
4.0.2+履行kill线程,CHANGE MASTER,PURGE MASTER LOGS, and SET GLOBAL等指令的权限
UPDATE
ALL更新数据库的权限
USAGE
ALL新创立用户后不授权时所用到具有最小的权限

要颁发Global Lovel权限只需求在履行GRANT指令的时分,用*.*来指定规模是Global即可,假如有多个用户,能够运用逗号分离隔,如下:

mysql> grant all on *.* to test3,test4@localhost identified by test123;
Query OK, 0 rows affected (0.00 sec)

2、Database Level

Database Level是在Global Level之下,其他三个Level之上的权限等级,其效果域即为所指定数据库中的一切目标,和Database Level比 Database Level首要少了以下几个权限,CREATE USER,FILE,PROCESS,RELOAD,REPLICATION CLIENT,REPLICATION SLAVE, SHOW DATABASES, SHUTDOWN,没有添加任何权限,

要颁发Database Level权限,用如下方法完成:

1)、在履行GRANT指令的时分,经过database.* 来指定效果域为整个数据库:或许先创立一个没有权限的用户在运用过GRANT指令来授权。

mysql> grant all on test.* to test3,test4@localhost identified by test123;
Query OK, 0 rows affected (0.00 sec)

3、Table Level

Table Level权限能够被Global Level和Database Level权限掩盖,Table Level权限的效果域是授权所指定的表,能够经过如下句子来授权:

mysql> grant all on test.test1 to wolf@% identified by wolf@123;
Query OK, 0 rows affected (0.01 sec)
mysql> show grants for wolf@%;
+-----------------------------------------------------------------------------------------------------+
| Grants for wolf@%                                                                                   |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO wolf@% IDENTIFIED BY PASSWORD *F693761139616215C4AC1A7C23A8B8F5B94704D1 |
| GRANT ALL PRIVILEGES ON `test`.`test1` TO wolf@%                                                |
+-----------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

Table Level权限因为效果域仅限于每张表,所以权限品种也比较小,只要如下8个权限,ALTER,CREATE,DELETE,DROP,INDEX,INSERT,SELECT,UODATE

4、Column Level

Column Level权限的效果域仅限于某个表的某个列,Column Level相同能够被Database Level,Database Level,Table Level相同的权限掩盖掉,因为Column Level权限和Routine Level权限效果域没有重合部分所以不会被掩盖,Column Level权限仅有SELECT,UPDATE,INSERT三种,经过如下方法赋予权限(需求赋予权限的列名用括号括起来):

mysql> grant select(id,name) on test.test to kelly@% identified by wolf123;
Query OK, 0 rows affected (0.01 sec)
mysql> show grants for kelly@%;
+------------------------------------------------------------------------------------------------------+
| Grants for kelly@%                                                                                   |
+------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO kelly@% IDENTIFIED BY PASSWORD *30F17FEB599168D8F1BC498525B27B83A13F54E3 |
| GRANT SELECT (name, id) ON `test`.`test` TO kelly@%                                              |
+------------------------------------------------------------------------------------------------------+

5、Routine Level

Routine Level权限首要只要EXECUTE和ALTER ROUTINE两种,首要针对的目标是procedure 和function两种目标,要赋予Routine Level权限需求指定数据库和相关目标,如下:

mysql> grant execute on test.pl to kelly@%;
Query OK, 0 rows affected (0.01 sec)


版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表亚美娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章