有没有办法创建一个可以访问所有现有表的新管理员用户/角色。 如果其他用户创建新表,则管理员用户也应该能够拥有新表的权限。
现在,唯一的方法是明确给出表的列表:
mclient -f "csv" -s "select name from sys.tables where system=false" | xargs -I '{}' mclient -s 'set schema "'$MONETDB_SCHEMA'"; grant select on "{}" to "pm-usecase"'
但是,如果另一个用户创建了一个新表,那么我们需要再次授予对新表的访问权限。
我们想知道同样的事情,但唯一的选择是制作一个角色:
CREATE ROLE test_role;
创建具有角色授权的架构:
CREATE SCHEMA new_schema AUTHORIZATION test_role;
使用架构将角色授予用户:
GRANT test_role TO test_user;
现在,如果用户test_user
在 sql 会话中使用set role test_role
命令,他将能够访问其他用户创建的表,而无需授予权限。
目前,似乎没有一揽子选项可以使用户能够在所有架构中执行此操作。解决方案可以是使用一个特定的表角色授权创建所有表。
有一个名为sysadmin
的内置角色:
grant sysadmin to <user>
但是,您仍需要在连接上设置角色才能激活权限。