2011-12-09 34 views
1

示例: 非超级用户已被授予对插入表“a”的过程的执行权。该用户将看到数据库表“a”与“show databases”在一起,但不能使用“show tables”查看表“a”。但同一用户可以通过“显示过程状态”来查看基本程序信息。mysql用户可以看到存储过程吗?

这是审计,我希望审计过程尽可能模糊。如果用户被授予对某个过程的执行权限,那么该用户是否有能力查看该过程?并且他们必须能够看到该过程涉及的数据库?

回答

3

如果您是该过程的所有者,或者您有权访问mysql.proc表,则可以按照说明here来查看该过程的定义。

因此,您将创建过程为超级并设置DEFINER CURRENT_USER(因此该过程以超级方式执行)。然后确保超级有权访问表,但没有其他人做。这应该保护表格和来源,但可以调用该过程。

它不必是超级的,可以是任何有权访问表的用户。

+0

没错。因此,即使使用show create过程(如果它们不是过程所有者),非超级用户也将无法看到过程的功能。但他们将能够知道程序存在。如果用户没有能力知道该程序存在,我认为我不认为我可以在程序上授予执行权。 –

+0

我不明白他们怎么知道它,知道程序而不知道它的唯一方法是通过读取mysql.proc并且它们不能。当然,你会告诉他们,这是针对数据库的API,你会给他们每个过程和它的参数和结果集的描述。 –

+0

或者,实际上,您可能会从SELECT_ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES'。我没有看到该表上的任何限制。 –

相关问题