【问题标题】:How to grant execute on specific stored procedure to user如何将特定存储过程的执行权限授予用户
【发布时间】:2014-08-21 00:16:17
【问题描述】:

我已经在特定架构上创建了一些存储过程。

在这个存储过程中,我想授予执行权限。

所以我写了:

GRANT EXECUTE ON PROCEDURE schema_name.proc_name TO 'user_name';
GRANT SELECT ON mysql.proc to 'user_name';

问题是:我的用户可以看到每个存储过程。 我希望他只能看到他拥有 EXECUTE 权限的过程。

有没有办法做到这一点?

提前致谢。

【问题讨论】:

    标签: mysql stored-procedures grant


    【解决方案1】:

    问题解决了。

    实际上,为了能够在 MySQLForExcel 中执行存储过程,我们需要设置我们希望由 MySQLForExcel 用户调用的每个存储过程的 DEFINER。

    DELIMITER $$
    
    DROP PROCEDURE IF EXISTS `procedure_name` $$
    CREATE DEFINER=`user_mysqlforexcel` PROCEDURE `procedure_name`(param)
    BEGIN
         Do smth as usual
    END $$
    

    I found that here

    感谢您的帮助。

    【讨论】:

    • 实际上,这样做的原因是错误的,并且可能会产生安全隐患。正确的解决方案可能在原始错误消息中:您需要在 ODBC 连接字符串中使用 CheckParameters=false 来禁用导致错误的 ODBC 中断。
    【解决方案2】:

    是的...如果您不直接或间接授予用户对mysql.proc 表的SELECT 权限(例如使用GRANT SELECT ON *.* TO ...),这将按预期工作

    如果没有对该表的SELECT 权限,用户只能看到他们拥有其他权限的存储过程和存储函数的存在,例如EXECUTE

    在底层,mysql.proc 上缺少 SELECT 也会阻止用户通过 information_schema.routines 伪表查看他们无权访问的过程。

    您不应该需要GRANT SELECT ON mysql.proc 来使用户能够执行过程或功能...如果您这样做了,那么 似乎是个问题。

    【讨论】:

    • 事实上,似乎是我的插件导致了这个问题。我正在使用 MySQLForExcel 来允许用户与数据库进行交互。你是对的,没有 SELECT ON mysql.proc,我可以毫无问题地调用我的存储过程。但是 MySQLForExcel 不允许它出于某些模糊的原因... 无法检索例程“truncate_t_qcms_lead_engineer”的存储过程元数据。要么为此用户授予 mysql.proc SELECT 权限,要么在您的连接字符串中使用“check parameters=false”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2011-03-23
    • 2011-07-22
    • 2011-05-17
    • 1970-01-01
    相关资源
    最近更新 更多