gpt4 book ai didi

mysql - CREATE AGGREGATE FUNCTION 权限

转载 作者:行者123 更新时间:2023-11-29 02:26:42 27 4
gpt4 key购买 nike

为什么我无法创建这个聚合函数?

据我所知,我已经在 *.* 上授予了适当的权限(CREATE ROUTINEALTER ROUTINE)在我的数据库中(peacock):

mysql> SELECT User, Host, Create_priv, Create_routine_priv, Alter_routine_priv FROM mysql.user WHERE user='glpy';
+------+-----------+-------------+---------------------+--------------------+
| User | Host | Create_priv | Create_routine_priv | Alter_routine_priv |
+------+-----------+-------------+---------------------+--------------------+
| glpy | localhost | Y | Y | Y |
+------+-----------+-------------+---------------------+--------------------+

mysql> SELECT User, Host, db, Create_priv, Create_routine_priv, Alter_routine_priv FROM mysql.db WHERE user='glpy';
+------+-----------+---------+-------------+---------------------+--------------------+
| User | Host | db | Create_priv | Create_routine_priv | Alter_routine_priv |
+------+-----------+---------+-------------+---------------------+--------------------+
| glpy | localhost | peacock | N | Y | Y |
+------+-----------+---------+-------------+---------------------+--------------------+

但是,当我尝试创建该函数时,我得到了 Access denied ... to database 'mysql':

mysql> use peacock;
mysql> CREATE AGGREGATE FUNCTION coverage RETURNS INT SONAME 'my-library.so';
ERROR 1044 (42000): Access denied for user 'glpy'@'localhost' to database 'mysql'

特别是:

  • 为什么需要访问 mysql 表才能创建聚合函数?
  • 既然我已经授予了 *.* 的权限,为什么访问被拒绝?
  • 我也尝试授予对 mysql 的权限,但访问仍然被拒绝。

最佳答案

CREATE [AGGREGATE] FUNCTION function_name 
RETURNS {STRING|INTEGER|REAL|DECIMAL}
SONAME shared_library_name;

这是 User Defined Function 的声明,这似乎是您要安装的内容。这不是声明Stored Function . CREATE FUNCTIONtwo different uses在 MySQL 中。这是其中之一。

为了让它工作:

  • 您不需要CREATE ROUTINE权限
  • 您在哪个数据库中并不重要,因为用户定义函数与存储函数不同,它是全局范围的。它们以类似于其内置聚合函数的方式扩展 MySQL 功能,例如 AVG()SUM()MIN()MAX()
  • 不能在函数声明中指定数据库
  • 以下是您缺少的要求:

13.7.3.1. CREATE FUNCTION Syntax for User-Defined Functions

To create a function, you must have the INSERT privilege for the mysql database. This is necessary because CREATE FUNCTION adds a row to the mysql.func system table that records the function's name, type, and shared library name.

http://dev.mysql.com/doc/refman/5.6/en/create-function-udf.html

如果您没有此权限,则该功能必须由拥有此权限的人安装,或者需要授予您。您不能将其授予自己。

关于mysql - CREATE AGGREGATE FUNCTION 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20573271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com