网站首页 > 文章中心 > 其它

mysql怎么打开权限表

作者:小编 更新时间:2023-09-16 11:26:10 浏览量:258人看过

mysql怎么查看用户权限

如果需要查看MySQL用户权限,应该如何实现呢?下面就为您介绍查看MySQL用户权限的方法,并对授予MySQL用户权限的语句进行介绍,供您参考.

查看MySQL用户权限:

show grants for 你的用户

比如:

show grants for root@'localhost';

Grant 用法

GRANT ALL PRIVILEGES ON ◆discuz◆.* TO 'discuz'@'localhost';

我先按我的理解解释一下上面两句的意思

建立一个只可以在本地登陆的 不能操作的用用户名 discuz 密码为 ***** 已经加密了的

然后第二句的意思是 ,给这个discuz用户操作discuz数据库的所有权限

使用GRANT

GRANT命令用来建立新用户,指定用户口令并增加用户权限.其格式如下:

mysql GRANT privileges ON what

- TO user [IDENTIFIED BY "password"]

- [WITH GRANT OPTION];

正如你看到的,在这个命令中有许多待填的内容.让我们逐一地对它们进行介绍,并最终给出一些例子以让你对它们的协同工作有一个了解.

privileges是一个用逗号分隔的你想要赋予的MySQL用户权限的列表.你可以指定的权限可以分为三种类型:

数据库/数据表/数据列权限: Alter: 修改已存在的数据表(例如增加/删除列)和索引.

Create: 建立新的数据库或数据表.

Delete: 删除表的记录.

Drop: 删除数据表或数据库.

INDEX: 建立或删除索引.

Insert: 增加表的记录.

Select: 显示/搜索表的记录.

Update: 修改表中已存在的记录.

全局管理MySQL用户权限:

file: 在MySQL服务器上读写文件.

PROCESS: 显示或杀死属于其它用户的服务线程.

RELOAD: 重载访问控制表,刷新日志等.

SHUTDOWN: 关闭MySQL服务.

特别的权限:

ALL: 允许做任何事(和root一样).

USAGE: 只允许登录--其它什么也不允许做.

简述构成mysql权限控制步骤

①.、mysql的权限是,从某处来的用户对某对象的权限.

b、能不能执行操作,粒度从粗到细,分别为:mysql.user, mysql.db, msql.tables_priv, mysql.columns_priv, mysql.proc_priv.

需要注意的是,这些表各有分工,但是在权限分配上有一定的重合.

可以这样理解,mysql 先检查对大范围是否有权限,如果没有再到小范围里去检查.比如:先检查对这个数据库是否有select权限,如果有,就允许执行.如果没有,再检查对表是否有select权限,一直到最细粒度,也没有权限,就拒绝执行.举例来说:要检查张三能否控制一个团,我只要先检查张三能否控制一个军,如果可以,就是有权限,如果不行,再检查张三能否控制一个师.所以呢,粒度控制越细,权限校验的步骤越多,性能越差,需要考虑.

mysql 对用户进行了排序,先对host排序,再对user排序,小范围在前面,大范围在后面,从上往下匹配.

①.0、那么问题来了,我授予张三 select的权限,现在revoke all privileges 也不能收回张三select的权限,因为没有对张三 grant all privileges,怎么解决这个问题?

使用 revoke all privileges,grant option from user

①.1、权限级别:从某台主机来的某个用户,对某个数据库中某个表的某些列的某部分记录,是否有权限.

a、尽量缩小权限

b、按业务,分离用户,不同的业务对应不同的用户

c、避免权限粒度太细,因为mysql权限检查,会影响性能.

a、mysql启动,增加选项重置密码

b、mysql启动,增加选项不检查权限,登陆后修改密码,退出重启启动.

面试官:MySQL权限表损坏导致无法启动怎么办?

第一段:背景

第二段:问题复现

按照测试同学的测试步骤,首先创建一个用户:

然后关闭mysqld;这里需要介绍一下,我们集群的关闭方式是如下方式:

然后重启mysqld,操作如下:

此时问题复现了,mysqld启动失败,我们查看了下error日志,信息如下:

对于该参数的官方文档的解释如下:

设置MyISAM存储引擎恢复模式.选项值是OFF、DEFAULT、BACKUP、FORCE或QUICK的值的任意组合.如果指定多个值,请用逗号分隔.指定不带参数的选项与指定DEFAULT相同,指定显式值" "将禁用恢复(与OFF值相同).如果启用了恢复,则mysqld每次打开MyISAM表时,都会检查该表是否标记为已崩溃或未正确关闭.(只有在禁用外部锁定的情况下运行,最后一个选项才起作用.)在这种情况下,mysqld在表上运行检查.如果表已损坏,mysqld将尝试对其进行修复.

服务器自动修复表之前,它将有关修复的注释写到错误日志中.如果您希望能够在无需用户干预的情况下从大多数问题中恢复,则应使用选项BACKUP,FORCE.即使某些行将被删除,这也会强制修复表,但是它将旧的数据文件保留为备份,以便您以后可以检查发生了什么.

全局变量,只读变量,默认为OFF.

第三段:问题修复

这类MySQL用户表损耗的问题解决方式也是有多种,我这里列举其中一种:

(1)my.cnf中的[mysqld]标签下添加skip_grant_tables,启动时跳过加载系统字典.

此时mysqld是可以正常启动的,无异常.

第四段:深入排查

在产品化中,以上修复方式很不优雅,只是作为临时的解决方案;并且也存在一些令人疑惑的点:

带着这些疑问,我们继续排查出现该现象的原因;此时Google也没有找到一些有效的信息,那么只能通过MySQL源代码来寻找一些答案.

在源代码中搜索一下关键词,用于打断点的位置,然后进行调试:

根据该函数的注释发现:该函数是初始化负责用户/数据库级特权检查的结构,并从mysql schema中的表中为其加载特权信息;且return值为1代表的是初始化权限失败.

调试信息如下:

可以看到flags的值为0,而MYSQL_OPEN_SKIP_SCOPED_MDL_LOCK为宏定义值0x1000,与flags的值 做按位与操作,结果自然也是0,当然MYSQL_LOCK_IGNORE_GLOBAL_READ_ONLY也是如此;need_global_read_lock_protection是bool类型值,代表是否需要全局读锁的保护,这个值是在table- mdl_request.type不为MDL_SHARED_READ_ONLY发生改变;check_readonly函数相关信息 下面概述.

此时第一反应就是去检查my.cnf中是否包含read_only相关参数,检查之后发现确实是使用了该参数, 如下:

此时注释掉该参数,然后再次启动mysqld,发现MyISAM表可以自动修复,且正常启动;error log信息如下:

由于docker一些限制,我们在mysqld启动会涉及两次;所以解决该问题的方式为:第一次mysqld的启动时先关闭read_only参数,第二次启动时开启read_only参数.之所以选择默认开启read_only参数, 是为了避免在mysqld启动后,选主逻辑未完成时的保护措施;当然选主完成后,会自动对master执行 set global read_only=0 操作.

第五段:总结

第六段:附录

调试的栈帧信息如下,有兴趣的小伙伴可以研究下:

熟悉MySQL体系结构和innodb存储引擎工作原理;以及MySQL备份恢复、复制、数据迁移等技术;专注于MySQL、MariaDB开源数据库,喜好开源技术.

原文链接:

mysql 权限设置

背景

在了解动态权限之前,我们先回顾下 MySQL 的权限列表.

图 1- MySQL 静态权限的权限管理图

那我们看到其实动态权限就是对 SUPER 权限的细分. SUPER 权限在未来将会被废弃掉.

我们来看个简单的例子,

但是现在我只想这个用户有 SUPER 的子集,设置变量的权限.那么单独给这个用户赋予两个能设置系统变量的动态权限,完了把 SUPER 给拿掉.

我们看到这个 WARNINGS 提示 SUPER 已经废弃了.

mysql show warnings;

◆---------◆------◆----------------------------------------------◆

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

①. row in set (0.00 sec)◆

◆-----------------------------------------------------------------------------------◆

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章