首页 > 解决方案 > 允许任意用户读取 MonetDB 的 sys.queue

问题描述

我创建了一个用户foouser和一个包含一些表的模式fooschema 。Foouser对其在fooschema中的表执行长时间运行的查询。

现在我想检查查询的状态。但是,foouser没有足够的权限来访问sys.queue表/视图:

sql>SELECT * FROM sys.queue;
SELECT: access denied for foouser to table 'sys.queue'
sql>SELECT * FROM sys.queue();
SELECT: no such operator 'queue'

monetdb用户具有必要的权限,但看不到foosuer查询,而只能看到他们自己的查询:

sql>SELECT * FROM sys.queue;
+---------+---------+----------------------------+----------------------------+----------+---------+-----------+--------------------------+
| qtag    | user    | started                    | estimate                   | progress | status  | tag       | query                    |
+=========+=========+============================+============================+==========+=========+===========+==========================+
| 2593257 | monetdb | 2018-04-26 15:06:01.000000 | null                       |     null | running | 2593257@0 | select * from sys.queue; |
+---------+---------+----------------------------+----------------------------+----------+---------+-----------+--------------------------+

那么问题来了:foouser如何查看自己查询的状态呢?我可以授予foouser访问权限sys.queue()吗?如果是这样,怎么做?

标签: monetdb

解决方案


我找到了一个解决方案,它允许“普通”用户阅读自己的sys.queue. 但是,这种方法(根据我的喜好)向用户授予了许多权限,因此不是最佳的。

方法是将角色sysadmin授予foouser。这必须在以monetdb用户身份登录(即运行mclient -u monetdb)时完成:

sql> grant sysadmin to foouser;
operation successful

之后,如果您以foouser(即mclient -u foouser)身份登录,您必须选择 sysadmin 角色,现在可以通过查看以下内容来查看您自己正在运行的查询sys.queue

sql>set role sysadmin;
operation successful
sql>select * from sys.queue;
+---------+---------+-------------+-------------+------+---------+-----------+--------------+
| qtag    | user    | started     | estimate    | prog | status  | tag       | query        |
:         :         :             :             : ress :         :           :              :
+=========+=========+=============+=============+======+=========+===========+==============+
| 1627134 | foouser | 2018-11-09  | null        | null | running | 1627134@0 | insert into  |
:         :         : 17:48:57.00 :             :      :         :           : REDACTED     :
:         :         : 0000        :             :      :         :           : REDACTED     :
| 1627135 | foouser | 2018-11-09  | null        | null | running | 1627135@0 | select * fro |
:         :         : 17:48:57.00 :             :      :         :           : m sys.queue; :
:         :         : 0000        :             :      :         :           :              :
+---------+---------+-------------+-------------+------+---------+-----------+--------------+
2 tuples !1 field truncated!

但是,现在(故意)受限用户foouser具有完全的管理权限,这使得使用受限用户变得毫无意义。


推荐阅读