MySQL运维实战(2.3)MySQL的权限体系

作者:俊达

MySQL权限划分

MySQL权限按授权范围可以分为三大类:全局权限、数据库权限和对象权限。

  • 全局权限主要用于管理系统模块,这些权限涵盖了对MySQL服务器整体的操作和管理,与具体的数据库或对象无关,因此在授权时需要指定为*.*。
  • 数据库权限是用于管理数据库,这些权限针对特定数据库,允许用户执行与该数据库相关的操作,例如创建、修改、删除数据库等。在授权时需指定database_name.*。
  • 对象权限是用于管理数据库对象,涉及对具体数据库对象(如表、字段)的权限管理,允许用户对特定对象执行特定操作,例如对表进行查询、更新或删除操作。授权时需指定为database_name.table_name或database_name.table_name.column_name。

这种分类使得MySQL的权限管理更加灵活,可以根据实际需求精细地控制不同级别的权限,保障数据库安全性和管理的有效性。

MySQL各权限说明

权限名称授权范围描述
ALL全局权限实例所有权限
CREATE ROLE全局权限创建数据库角色
CREATE TABLESPACE全局权限创建表空间
CREATE USER全局权限创建数据库用户
DROP ROLE全局权限删除数据库角色
PROCESS全局权限查看实例中的所有session(show processlist)
默认只能看登录用户的session
PROXY全局权限
RELOAD全局权限执行下面的操作需要reload权限
flush privileges
flush logs
REPLICATION CLIENT全局权限查看复制信息的权限(show slave status)
REOLICATION SLAVE全局权限复制权限(从主库复制数据)
SHUTDOWN全局权限关闭实例
SUPER全局权限超级权限
kill任何用户的session
修改参数
管理复制(start slave,change master等)
USAGE全局权限无任何权限
SHOW DATABASES全局权限查看数据库列表
show databases
CREATE数据库权限创建数据库、表
INDEX对象权限创建索引(create index)
CREATE VIEW对象权限创建视图
CREATE ROUTINE数据库权限创建存储过程、函数
DROP数据库权限删除表、视图、存储过程、触发器、定时任务
ALTER对象权限修改表结构和表的索引
即使没有index权限,也可以使用alter语句添加或删除索引
修改表名称时,同时需要drop权限
ALTER ROUTINE对象权限修改存储过程、函数
EVENT全局权限创建、删除调度任务
TRIGGER对象权限创建触发器的权限
SELECT对象权限查询数据
INSERT对象权限插入数据
UPDATE对象权限更新数据
DELETE对象权限删除数据
EXECUTE对象权限执行存储过程的权限
REFERENCE数据库权限外键引用权限
LOCK TABLES数据库权限执行lock tables权限,需要同时对表有select权限
SHOW VIEW对象权限查看视图定义(show create view)

一个例子:授权库不一致导致访问报错

1、创建账号并授权
授予账号(cc@%) select和create view的权限。

mysql> create database hello_db_x;
Query OK, 1 row affected (0.01 sec)

mysql> grant select on `hello\_db\_x`.* to 'cc'@'%' identified by '123';
Query OK, 0 rows affected, 1 warning (0.05 sec)

mysql> grant create view, show view on `hello_db_x`.* to 'cc'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> use hello_db_x;
Database changed
mysql> create table tx(a int);
Query OK, 0 rows affected (0.14 sec)

2、使用新账号登陆,创建视图
报没有create view的权限

root@box1 ~]# mysql -ucc -p123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hello_db_x         |
+--------------------+
2 rows in set (0.00 sec)

mysql> use hello_db_x;


mysql> show tables;
+----------------------+
| Tables_in_hello_db_x |
+----------------------+
| tx                   |
+----------------------+
1 row in set (0.01 sec)

mysql> select * from tx;
Empty set (0.01 sec)


mysql> create or replace view v_xx as select * from tx;
ERROR 1142 (42000): CREATE VIEW command denied to user 'cc'@'localhost' for table 'v_xx'


mysql> show grants;
+------------------------------------------------------------+
| Grants for cc@%                                            |
+------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'cc'@'%'                             |
| GRANT SELECT ON `hello\_db\_x`.* TO 'cc'@'%'               |
| GRANT CREATE VIEW, SHOW VIEW ON `hello_db_x`.* TO 'cc'@'%' |
+------------------------------------------------------------+

创建视图失败,但是通过show grants,可以看到账号有create view的权限。
3、分析原因
hello_db_x库存在2条授权记录,一条有select权限,但是没有create view权限,一条有create view权限,但是无select权限。
mysql使用没有create view权限的那条授权记录,导致create view失败。

mysql> select host, db, user, select_priv, create_view_priv, show_view_priv from mysql.db where user='cc';
+------+--------------+------+-------------+------------------+----------------+
| host | db           | user | select_priv | create_view_priv | show_view_priv |
+------+--------------+------+-------------+------------------+----------------+
| %    | hello_db_x   | cc   | N           | Y                | Y              |
| %    | hello\_db\_x | cc   | Y           | N                | N              |
+------+--------------+------+-------------+------------------+----------------+

4、解决: 重新授权,库名保持一致(包括转义符)

grant create view, show view on `hello\_db\_x`.* to 'cc'@'%';

select host, db, user, select_priv, create_view_priv, show_view_priv from mysql.db where user='cc';
+------+--------------+------+-------------+------------------+----------------+
| host | db           | user | select_priv | create_view_priv | show_view_priv |
+------+--------------+------+-------------+------------------+----------------+
| %    | hello_db_x   | cc   | N           | Y                | Y              |
| %    | hello\_db\_x | cc   | Y           | Y                | Y              |

账号和权限管理实践

以下是一些关于MySQL账号和权限管理的建议:

  1. 避免无密码和弱密码账号:
    确保不使用没有密码或者弱密码的账号,可以利用validate_password插件来评估密码的强度,从而保证只有强密码被使用。
  2. 删除匿名用户: 删除所有用户名为空的匿名用户,以防止未经授权的访问。
  3. 最小权限原则: 按需分配权限,给予用户所需的最小权限。例如,对于只需要进行查询的账号,仅授予"select"权限。
  4. 区分业务账号权限:对于业务相关的账号,限制权限仅限于数据操作语言(DML)操作,如"insert"、“update”、“delete”、“select”、“lock tables”。通常不建议使用业务账号执行数据定义语言(DDL)操作(如"create"、“alter”、“drop”),以防止对数据库结构的意外更改。
  5. 创建专用的DBA账号: 为数据库管理员(DBA)创建单独的账号,赋予其DDL权限(如"create"、“drop”、"alter"等)。这种职责分离确保了管理任务与常规业务操作分离,增强了对数据库修改的安全性和控制。

这些措施可以有助于更好地保护MySQL数据库安全,并且有条不紊地管理账号和权限,减少潜在的安全风险。

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL运维内参是一本介绍MySQL数据库运维的参考书籍,可以帮助数据库管理员(DBA)提供关于MySQL运维的实用知识和经验。 MySQL是一种广泛使用的关系型数据库管理系统,其运维工作对于保持数据库的稳定性和高性能至关重要。MySQL运维内参提供了一系列针对MySQL数据库运维技巧和最佳实践,帮助DBA更好地管理MySQL服务器。 MySQL运维内参涵盖了各个方面的MySQL运维知识,包括数据库安装和配置、性能优化、备份和恢复、故障处理和监控等。对于初学者来说,它提供了从入门到进阶的学习路径;对于有经验的DBA来说,它提供了解决特定问题和优化数据库性能的实用方法。 MySQL运维内参中的知识点和技巧都是经过实践验证的,可以直接应用到实际的MySQL环境中。它从实际运维中总结出的经验,包括遇到的一些常见问题和解决方案,以及一些高级技术和工具的介绍。 通过阅读MySQL运维内参,DBA可以学习到如何提高数据库性能和可靠性,如何进行合理的容量规划和监控,以及如何处理各种故障情况。对于企业而言,MySQL运维内参可以帮助降低数据库管理的成本,提高数据库的运行效率和稳定性。 总之,MySQL运维内参是一本值得DBA阅读和参考的书籍,它可以帮助DBA更好地管理MySQL数据库,提高数据库的性能和可靠性。 ### 回答2: MySQL运维内参是一本关于MySQL数据库运维方面的参考书籍,提供了使用MySQL数据库的最佳实践和运维技巧。这本书的PDF版本提供了便于读者在线阅读和下载的方式。 MySQL是一种广泛应用的关系型数据库管理系统,许多企业和组织都在其业务中使用MySQL数据库。然而,由于MySQL的复杂性和特殊性,对于数据库管理员来说,掌握MySQL运维技术是至关重要的。MySQL运维内参提供了详细的指导和建议,帮助数据库管理员更好地管理和维护MySQL数据库。 这本书包含了许多主题,包括MySQL数据库的安装和配置、性能调优、备份和恢复、故障排除等。每个主题都以实际案例和问题解决方案为基础,结合了作者多年的实践经验和深入研究。读者可以根据自己的需要选择感兴趣的章节进行学习和实践。 MySQL运维内参的PDF版本允许读者在线阅读和下载,使得读者可以随时随地获取所需的信息。这对于那些经常需要查阅MySQL运维方面的知识的数据库管理员来说非常方便。同时,PDF版本也提供了搜索和书签等功能,帮助读者更好地浏览和管理书籍内容。 总之,MySQL运维内参是一本对于MySQL数据库运维非常有价值的参考书籍,而PDF版本则提供了便捷的阅读方式,使得读者可以更好地学习和应用其中的知识。无论是初学者还是有经验的数据库管理员,都可以通过阅读这本书来提升MySQL数据库运维的能力。 ### 回答3: MySQL运维内参是一本关于MySQL数据库运维的指南手册,以PDF格式提供。MySQL是一种开源的关系型数据库管理系统,用于管理和存储大量的数据。MySQL运维内参提供了深入的MySQL运维知识和技巧,帮助数据库管理员更好地管理和维护MySQL数据库MySQL运维内参的内容包括MySQL的安装配置、数据库备份与恢复、性能优化、高可用性和集群部署等方面。这本指南详细介绍了如何正确地安装和配置MySQL数据库,包括选择适合的版本和安全设置。此外,它还提供了备份数据库和恢复数据的方法,以确保数据的安全性和完整性。 性能优化是MySQL运维工作中一个重要的方面。MySQL运维内参会介绍一些常见的性能问题和解决方法,如优化查询语句、索引的使用和调整缓存等。高可用性和集群部署也是数据库运维人员关注的重点。该指南会介绍如何搭建MySQL的主从复制和主主复制,以及如何使用集群技术来实现高可用性和负载均衡。 MySQL运维内参还提供了一些实用的脚本和工具,帮助数据库管理员更高效地进行日常工作。比如,自动备份数据库、监控数据库的运行状态和性能、查询执行计划等。这些工具和脚本可以节省管理员的时间和精力,提高工作效率。 总之,MySQL运维内参是一本非常实用的MySQL数据库管理指南,涵盖了数据库运维的各个方面。无论是初学者还是有经验的数据库管理员,都可以从中学习到宝贵的知识和经验,提高MySQL数据库的管理水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值