monetdb - 允许任意用户读取 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()
吗?如果是这样,怎么做?
解决方案
我找到了一个解决方案,它允许“普通”用户阅读自己的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具有完全的管理权限,这使得使用受限用户变得毫无意义。