数据库服务权限管理
1 数据库服务权限管理
查看数据库权限信息;
show privileges;
all privileges 代表了几乎所有的权限除 grant option 外,
授权
grant insert,select on *.* to baimei@'%'
给baimei 用户授权 inser,select 的权限
取消授权
revoke insert on *.* from baimei@'%';
取消baimei用户的 insert 权限
产看授权
show grants for baimei@'%';
生产环境 授权实践
create database bbs;
创建数据库
create user bbs@'192.168.%' identified by '123';
创建管理数据库用户
grant insert,select,update,delete on bbs.* to bbs@'192.168.%';
进行管理用户授权
1 权限信息存储位置 mysql库下
user
用户全局权限信息设置 如 grant select on *.*
db
针对用户某个库权限信息设置
grant inser on bbs.*
tables_priv
用户针对某个表权限信息设置
gran inser on bbs.clase
2权限的角色划分 (8.0 新添的功能
角色权限设置:
第一步:创建角色
create role baimei_rw, baimei_ro;
创建2个不同的角色 信息
第二步:设置角色权限
grant select,updat,insert,delete on mysql.user to baimei_rw
进行role 权限信息设定
第三步:将用户划分到不同角色中
create user user01@'%' identified by '123';
grant baimei_rw to user01@'%';
第四步:激活角色功能
1自动激活
set global acitvate_all_roles_on_login=on;
2手动激活
set default role all to user01@'%';
角色激活后,可以查看角色信息
select current_role();
(需要重新连接数据库服务,进行查看)
在数据库服务中,权限管理可以用于针对不同的用户,限制登录管理数据库服务用户的操作行为,也可以区分不同用户的操作能力;
思考:系统权限和数据库权限作用在哪?
系统权限是作用于文件上的;
数据库权限是作用在用户上的,或者角色(相当于系统的用户组)上的;
数据库服务常见的权限管理定义设置:(采用具有的字符参数信息进行定义,并且权限是赋予数据库管理用户的)
数据库服务中可以授权的所有权限信息查看:
MySQL> show privileges;
输出展示的信息表示内容:
序号 输出列 解释说明
01 Privilege 表示可以授权的所有权限信息展示
02 Context 表示设置的权限可以对数据库服务哪些资源进行操作
03 Comment 对相应的权限功能进行简单解释说明
核心重要授权权限总结:
序号 权限 授权资源 解释说明
01 Select Tables 可以对表进行操作,查询表中数据信息
02 Insert Tables 可以对表进行操作,插入表中数据信息
03 Update Tables 可以对表进行操作,修改表中数据信息
04 Delete Tables 可以对表进行操作,删除表中数据信息
05 Alter Tables 可以对表进行操作,修改表中结构信息(元数据-属性)
06 Index Tables 可以对表进行操作,删除或创建表中的索引信息
07 Create Databases,Tables 可以对表和库进行操作,用于创建数据库和表信息
08 Drop Databases,Tables 可以对表和库进行操作,用于删除数据库和表信息
说明:all privileges(all)包含查看的所有权限信息,但是唯独缺了Grant option,不能授权用户,此权限只能给root@local用户
数据库服务中用户授权信息的存放位置:授权表 baimei@% -- select update
# 切换进入到默认mysql数据库中
mysql> use mysql;
# 查看数据库中的信息
mysql> show tables;
-- 查看mysql数据库中的表信息
常见的授权表信息说明:
序号 授权表名称 解释说明
01 user 主要用于存储用户、主机域、密码、加密插件等信息,同时还存储了*.*级别的权限(全局权限)
02 db 主要用于存储用户、主机域等信息,同时还存储了单库级别的权限(局部权限)
03 tables_priv 主要用于存储用户、主机域等信息,同时还存储了单表级别的权限(局部权限)
说明:以上授权表信息了解作用即可,不建议采用手工方式对授权表中的数据进行修改调整
01 设置数据库服务用户授权
通过理解数据库内部结构,可以知晓,数据库是一个很大的仓库,里面包含多个库,每个库中有多个表,每个表中有多个行和列;
当然作为数据库服务管理用户,要管理的不仅仅是库和表,其实还有视图、触发器、存储过程等和数据库有关的信息;
因此,在某些时候创建完用户信息,还需要对创建的用户进行授权,就是让不同用户拥有管理库和表对象的权限。
进入到数据库环境中,执行以下SQL语句进行设置:
# 授权语法格式
MySQL> grant all on 授权对象范围 to 权限赋予用户信息
MySQL> grant all on * . * to blog@'192.168.30.%';
授权 权限 库信息 表信息 用户 主机域
# 对数据库和表同时进行授权方法
MySQL> grant all on *.*
-- 表示对所有的数据库和所有的表进行授权
MySQL> grant all on baimei.*
-- 表示对指定的数据库中所有的表进行授权
MySQL> grant all on baimei.t1
-- 表示对指定的数据库中指定的表进行授权
具体授权权限操作步骤:
MySQL> grant all on * . * to oldgirl@'192.168.30.%';
MySQL> grant Insert,Delete,Update,Select on * . * to baimei@'192.168.30.%';
# 创建远程特权管理用户(练习)
MySQL > create user root@'10.0.0.%' identified by '123456';
MySQL > grant all on *.* to root@'10.0.0.%'
具体回收权限操作步骤:
mysql> grant insert,update,delete,select on * . * to oldbaby@'192.168.30.%';
Query OK, 0 rows affected (0.00 sec)
-- 数据库服务用户授权操作
mysql> show grants for oldbaby@'192.168.30.%';
+-----------------------------------------------------------------------------------------------------------+
| Grants for oldbaby@192.168.30.% |
+-----------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO `oldbaby`@`192.168.30.%` |
+-----------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
-- 数据库服务用户权限授权成功
mysql> revoke delete on *.* from oldbaby@'192.168.30.%';
Query OK, 0 rows affected (0.00 sec)
-- 数据库服务用户回收权限
mysql> show grants for oldbaby@'192.168.30.%';
+-----------------------------------------------------------------+
| Grants for oldbaby@192.168.30.% |
+-----------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE ON *.* TO `oldbaby`@`192.168.30.%` |
+-----------------------------------------------------------------+
1 row in set (0.00 sec)
-- 数据库服务用户权限回收成功
02 查看数据库服务用户权限
当用户授权操作完毕后,可以对授权的用户进行查看确认:
mysql> show grants for xiaoQ@'192.168.30.%';
1665905280711
授权操作实践过程:
# 数据库用户权限设置实践
[root@baimei ~]# mysql -uroot -pbaimei123
MySQL> grant all on *.* to blog@'192.168.30.%';
-- 授权blog作为管理员,但是不具有创建用户权利
MySQL> flush privileges;
-- blog@'192.168.30.%' 权限,就相当于管理员,但是缺少一个创建用户权限
# 数据库用户权限设置查看
MySQL> show grants for blog@'192.168.30.%';
--再查看发现权限变化ALL PRIVILEGES,重新登录数据库可以对数据库操作。
企业生产情况授权思路:
企业生产库表授权一定要更小,最小的授权最大的安全,给业务用户常规授权,包含对内容的增删改查;
序号 权限 互联网应用
01 SELECT 查询数据 访问网站页面时,表示浏览查看数据信息;
02 INSERT 插入数据 访问网站页面时,表示发表文章数据信息;
03 UPDATE 修改数据 访问网站页面时。表示修改文章数据信息;
04 DELETE 删除数据 访问网站页面时,表示删除文章数据信息;
# 生产常规授权实践
MySQL> create database bbs;
-- 创建数据库操作
MySQL> create user bbs@'192.168.56.%' identified by '123';
-- 创建管理数据库用户
MySQL> grant insert,select,update,delete on bbs.* to bbs@'192.168.56.%';
-- 进行管理用户授权
# 授权等价于root管理用户
MySQL> grant all on *.* to baimei@'localhost' identified by 'baimei123' with grant option;
MySQL> flush privileges;
03 数据库服务权限管理特性(5.7与8.0权限管理区别)
之后版本,出现了数据库服务中对用户的role支持,表示可以将企业中常用的权限汇总打包为一个特定的role信息,在赋予给指定用户;
具体操作演示过程:
# 指定用户操作特定数据库时,具有共性相同的权限:分为运维权限(rw) 分为开发权限(ro)
mysql>help create role;
-- 查看role创建的方法
# 创建指定的role信息
CREATE ROLE 'admin', 'developer';
CREATE ROLE 'webapp'@'localhost';
-- 创建role信息的语句结构信息,不加@信息表示角色白名单为%方式,实际还要根据具体用户定义
mysql> create role baimei_rw,baimei_r;
-- 创建两个不同的role信息
-- baimei_rw: baimei.* rw(select,update,insert,delete)
-- baimei_r: baimei.* r(select)
# 进行role权限信息设定
mysql> grant select on baimei.* to baimei_r;
Query OK, 0 rows affected (0.00 sec)
mysql> grant select,update,insert,delete on baimei.* to baimei_rw;
Query OK, 0 rows affected (0.00 sec)
# 将指定role信息与相应的用户信息进行捆绑
mysql> create user user01@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
mysql> create user user02@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
-- 创建需要捆绑role权限的用户信息
mysql> grant baimei_r to user01@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> grant baimei_rw to user02@'%';
Query OK, 0 rows affected (0.00 sec)
-- 实现不同的role信息与不同的用户进行捆绑
# 进行角色信息激活
# 方式一:手动激活角色
mysql> SET DEFAULT ROLE ALL TO 'lei_test'@'localhost';
mysql> set default role all to user01@'%';
mysql> set default role all to user02@'%';
-- 利用数据库管理员账号手工激活角色
mysql> select current_role();
+----------------+
| current_role() |
+----------------+
| `baimei_r`@`%` |
+----------------+
1 row in set (0.00 sec)
-- user01登录数据库,会显示对应激活的角色信息
mysql> select current_role();
+----------------+
| current_role() |
+----------------+
| `baimei_rw`@`%` |
+----------------+
1 row in set (0.00 sec)
-- user02登录数据库,会显示对应激活的角色信息
#方式二:实现自动激活用户角色信息
mysql > set global activate_all_roles_on_login=on;
[root@db-01 ~]# mysql -uuser01 -p123 -h10.0.0.51
mysql> select current_role();
+----------------+
| current_role() |
+----------------+
| `baimei_r`@`%` |
+----------------+
1 row in set (0.00 sec)
-- user01登录数据库,会显示对应激活的角色信息
[root@db-01 ~]# mysql -uuser02 -p123 -h10.0.0.51
mysql> select current_role();
+-----------------+
| current_role() |
+-----------------+
| `baimei_rw`@`%` |
+-----------------+
1 row in set (0.01 sec)
-- user02登录数据库,会显示对应激活的角色信息
# 进行用户操作验证
mysql> select * from baimei.t1;
+----------+
| name |
+----------+
| zhangsan |
| lisi |
+----------+
2 rows in set (0.04 sec)
mysql> insert into baimei.t1 values ('xiaoQ');
ERROR 1142 (42000): INSERT command denied to user 'user01'@'10.0.0.51' for table 't1'
-- user01只读用户登录数据库,只能查看操作,不能进行其他操作
mysql> select * from baimei.t1;
+--------+
| name |
+--------+
| baimei |
| lisi |
+--------+
2 rows in set (0.00 sec)
mysql> insert into baimei.t1 values ('xiaoQ');
-- user02读写用户登录数据库,可以进行其他操作任务
1.3.3 数据库服务连接管理
欢迎来撩 : 汇总all