ITPub博客

首页 > 数据库 > > 23.6 存储程序和视图的访问控制

23.6 存储程序和视图的访问控制

作者:飘絮絮絮丶 时间:2020-05-11 11:09:22 0 删除 编辑

参考官方文档:

dev.mysql.com/doc/refma


存储的程序和视图在使用之前定义,并且在引用时,在确定其权限的安全上下文中执行。 这些权限由其DEFINER属性控制,如果存在,则由SQL SECURITY特性控制。

所有存储的程序(过程,函数,触发器和事件)和视图都可以具有命名MySQL 用户的DEFINER属性。 如果从存储的程序或视图定义中省略了DEFINER属性,则默认帐户是创建该对象的用户。


此外,存储的例程(过程和函数)和视图可以具有SQL SECURITY特性,其值为DEFINER或INVOKER,以指定对象是在定义者还是调用者上下文中执行。 如果省略SQL SECURITY特性,则缺省值为definer 文本。


触发器和事件没有SQL SECURITY特性,并始终在definer上下文中执行。 服务器根据需要自动调用这些对象,因此没有调用用户。


定义者和调用者安全上下文的不同之处如下:


  • 在定义安全上下文中执行的存储程序或视图使用其DEFINER属性指定的用户权限执行。 这些权限可能与调用用户的权限完全不同。 调用者必须具有引用对象的适当权限(例如,EXECUTE用于调用存储过程或SELECT用于从视图中进行选择),但是当对象执行时,调用者的权限将被忽略,只有DEFINER帐户权限才重要。 如果此帐户具有很少的权限,则该对象在其可执行的操作中相应地受到限制。 如果DEFINER帐户具有高权限(例如root帐户),则无论谁调用它,对象都可以执行操作。
  • 在调用程序安全上下文中执行的存储例程或视图只能执行调用者具有的权限操作。 可以指定DEFINER属性,但对在调用程序上下文中执行的对象无效。


请考虑以下存储过程:

CREATE DEFINER = 'admin'@'localhost' PROCEDURE p1()

SQL SECURITY DEFINER

BEGIN

UPDATE t1 SET counter = counter + 1;

END;


具有p1的EXECUTE特权的任何用户都可以使用CALL语句调用它。 但是,当p1执行时,它会在definer安全上下文中执行,因此以“admin”@“localhost”(DEFINER属性中指定的帐户)的权限执行。 此帐户必须具有p1的EXECUTE特权以及表t1的UPDATE特权。 否则,该过程失败。

现在考虑这个存储过程,它与p1相同,只是它的SQL SECURITY特性是INVOKER:

CREATE DEFINER = 'admin'@'localhost' PROCEDURE p2()

SQL SECURITY INVOKER BEGIN

UPDATE t1 SET counter = counter + 1;

END;

与p1不同,p2在调用者程序安全上下文中执行。 DEFINER属性无关紧要,p2以调用用户的权限执行。 如果调用者缺少p2的EXECUTE特权或表t1的UPDATE特权,则p2失败。

MySQL使用以下规则来控制用户可以在对象DEFINER属性中指定的帐户:

  • 除非拥有SUPER权限时,才能指定除自己帐户以外的DEFINER值。
  • 如果您没有SUPER权限,则唯一的合法用户值是您自己的帐户,无论是字面指定还是使用CURRENT_USER。 您无法将定义者设置为其他帐户。


要最大程度地降低存储程序和视图创建和使用的潜在风险,请遵循以下准则:

  • 对于存储的例程或视图,尽可能在对象定义中使用SQL SECURITY INVOKER,以便只有具有适合对象执行的操作的权限的用户才能使用它。


  • 如果在使用具有SUPER权限的帐户时创建定义者上下文存储的程序或视图,请指定显式DEFINER属性,该属性指定为仅拥有对象执行的操作所需的权限的帐户。 仅在绝对必要时指定具有高权限的DEFINER帐户。


  • 管理员可以通过不授予SUPER权限来阻止用户指定高权限DEFINER帐户。


但是,触发器不存在这种控制,因为用户不直接引用它们。 触发器总是在定义器上下文中执行,并通过访问与其关联的表来激活,甚至是没有特殊权限的用户进行的普通表访问。 如果DEFINER帐户具有高权限,则触发器可以执行敏感或危险操作。 如果创建触发器所需的SUPER和TRIGGER权限从创建它的用户的帐户中撤消,则仍然如此。 管理员应特别注意授予用户权限的组合。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3160136/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: pipelinedb命令积累
请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42182