MySQL能否授予查看存储过程定义权限给用户

MySQL能否授予查看存储过程定义权限给用户在其他RDBMS中,可以将查看某个存储过程(PROCEDURE)定义的权限给某个用户,例如在SQL Server中,可以单独将查看ProcedureName定义的权限授予UserA GRANT VIE

在其他RDBMS中,可以将查看某个存储过程(PROCEDURE)定义的权限给某个用户,例如在SQL Server中,可以单独将查看ProcedureName定义的权限授予UserA

 

GRANT VIEW DEFINITION ON ProcedureName TO UserA; —用具体的存储过程名和账号替换

 

那么在MySQL中能否实现这个功能呢? 找了很多资料,没有看到有这方面的功能,官方文档没有涉及这样的权限,网上有个方法:可以通过授予用户查询mysql.proc这样的权限来间接实现这个功能

 

 

grant select on mysql.proc to usrname@”xxx.xxx.xxx.xxx”;

 

个人简单测试了一下,这样授权后,发现还是有一些其他问题。

 

mysql> show create procedure prc_insert;  --没有授权前报这个错误。

代码100分

代码100分ERROR 1305 (42000): PROCEDURE prc_insert does not exist

mysql> show create procedure prc_insertG; --授权后

代码100分*************************** 1. row ***************************

           Procedure: prc_insert

            sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

    Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `prc_insert`(in  cnt int)

begin

declare i int;

set i=1;

while i < cnt do

    insert into test(id, name) select i,  CONCAT("name",i) from dual;

    

    set i = i+1;

 

end while;

end

character_set_client: utf8

collation_connection: utf8_general_ci

  Database Collation: latin1_swedish_ci

1 row in set (0.00 sec)

 

ERROR: 

No query specified

 

问题1:这样授权后,你能看到所有数据库存储过程的定义(不仅仅是某个某个存储过程,或某个数据库的存储过程的定义), 这里就涉及一个权限放大的问题。例如,我本来打算只授予用户A查看存储过程PRC_A的定义权限,但是那样授权后,A能查看很多存储过程的定义,甚至还能查看一些没有访问权限数据库的存储过程的权限。严格意义上来说,这个授权是不合理,而且是有问题的。

 

问题2:MySQL 8.0开始抛弃了mysql.proc,而且从MySQL 8.0开始,如果你要用SHOW CREATE PROCEDURE或SHOW CREATE FUNCION的话,需要有什么权限呢?。

 

MySQL 8.0开始,存储过程存储在mysql.routines和mysql.parameters系统表中,但是这些表无法直接访问,只能访问INFORMATION_SCHEMA.ROUTINES。像MySQL 8.0之前那样授权行不通了,

 

 

Where are stored procedures stored?

 

Stored procedures are stored in the mysql.routines and mysql.parameters tables, which are part of the data dictionary. You cannot access these tables directly. Instead, query the INFORMATION_SCHEMA ROUTINES and PARAMETERS tables. See Section 25.29, “The INFORMATION_SCHEMA ROUTINES Table”, and Section 25.19, “The INFORMATION_SCHEMA PARAMETERS Table”.

You can also use SHOW CREATE FUNCTION to obtain information about stored functions, and SHOW CREATE PROCEDURE to obtain information about stored procedures. See Section 13.7.7.9, “SHOW CREATE PROCEDURE Statement”.

 

 

个人测试发现,授予alter routine后,就能查看存储过程的定义,但是这个授权也带来一个问题,授予权限的用户不仅可以查看存储过程定义,而且可以删除这个存储过程(这个也是一个问题)。这个当然,不清楚是否还有其它授权来实现。

 

mysql> grant alter routine on procedure MyDB.prc_2 TO test@"192.168%";

 

Query OK, 0 rows affected (0.08 sec)

 

 

 

mysql> 

 

总结:

   在MySQL5.7或之前版本,可以通过授予用户查询mysql.proc来间接实现查看存储过程定义的权限,在MySQL 8.0 可以通过授予用ALTER ROUTINE的权限来间接实现查看存储过程定义的权限,两者都有一个问题,那就是会放大权限,这个属于MySQL功能性的缺陷,短时间估计一直存在!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10974.html

(0)
上一篇 2022-12-18
下一篇 2022-12-18

相关推荐

  • Python实现二进制数61

    Python实现二进制数61使用二进制有什么好处呢?首先二进制是计算机可以直接处理的数字形式,这是因为在计算机内部使用的是二进制电子元器件,所以使用二进制能够更加高效地进行数值运算和存储。其次,当数据需要在不同的计算机之间传输时,使用二进制能够保证数据的准确性和一致性。

    2023-12-05
    73
  • 20200617学习笔记[通俗易懂]

    20200617学习笔记[通俗易懂]基数 一个索引上不同的值的个数,我们称之为“基数”(cardinality)。也就是说,这个基数越大,索引的区分度越好 我们可以使用 show index 方法,看到一个索引的基数 MySQL 是怎…

    2023-03-12
    107
  • Python中的__enter__属性及其使用方法

    Python中的__enter__属性及其使用方法在Python中,with语句是一种管理资源(例如文件流、网络连接等)的机制,该语句会自动释放资源,无需显式地调用close()方法。要使用with语句,必须使用__enter__和__exit__方法。这篇文章主要介绍__enter__属性及其使用方法。

    2024-03-01
    54
  • 莱姆达英文_查询表达式

    莱姆达英文_查询表达式一般查询 db.User.Select(u => u); // 不带条件查询 db.User.Where(u => true); //不带条件查询 db.User.Where(u =&gt

    2023-04-18
    107
  • hdfs的ha机制_redis集群工作原理

    hdfs的ha机制_redis集群工作原理1.简单hdfs集群中存在的问题 不能存在两个NameNode 单节点问题 单节点故障转移 2.解决单节点问题 找额外一个NameNode备份原有的数据 会出现脑裂 脑裂:一个集群中多个管理者数据不一

    2022-12-30
    126
  • kafka 架构_业务架构和系统架构

    kafka 架构_业务架构和系统架构一、什么是Kafka? 数据工程中最具挑战性的部分之一是如何从不同点收集和传输大量数据到分布式系统进行处理和分析。需要通过消息队列正确地分离大量数据,因为如果一部分数据无法传送,则可以在系统恢复时传输

    2023-03-04
    107
  • Python实例:创建实例方法

    Python实例:创建实例方法在Python中,实例方法是类中定义的函数,它们可以直接使用实例对象进行调用,同时也可以在类定义中通过”self”来进行调用。

    2024-02-23
    75
  • hms 包括哪些服务_什么是能力

    hms 包括哪些服务_什么是能力     随着互联网不停的发展,人们的生活已经离不开智能手机更离不开手机应用,它让人们的生活更高效、更智慧、更便捷。HMS Core作为HMS的核心服务能力,围绕高效、安全、智慧、价值,华为HMS …

    2023-02-20
    117

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注