我有一个设置了只读角色的数据库;我们称之为“ app_user_ro”。我正在使用第三方数据加载工具(以“ app_user”身份运行)删除并重新创建表。重新创建表后,先前的权限就消失了,并且'app_user_ro'不再可以从表中选择。
我正在使用在Ubuntu 19.04上运行的Postgres 11.3。我看过Grant privileges on future tables in PostgreSQL?并尝试更改默认权限,但是'app_user_ro'在删除并重新创建后仍然无法从表中读取数据。
我尝试过:
-- The accepted answer
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO app_user_ro;
-- An alternative answer from the comments:
ALTER DEFAULT PRIVILEGES FOR USER app_user_ro IN SCHEMA public GRANT SELECT ON TABLES TO app_user_ro;
唯一可行的方法是在每次导入后手动授予权限:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO app_user_ro;
docs状态:
您只能更改将由您自己或您所属的角色创建的对象的默认特权
我担任的角色是:
app_data_loader=# \du
List of roles
Role name | Attributes | Member of
----------------+------------------------------------------------------------+------------
app_user | | {postgres}
app_user_ro | | {}
pg | Superuser | {}
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
最初,我以{postgres”角色的身份运行ALTER DEFAULT...
命令,但最近我在“ app_user”角色(加载数据的角色)中添加了“ app_user_ro”角色,并尝试将其作为“ app_user的角色,行为没有变化。
现在,我将安排一次作业在每次导入后授予权限,但似乎应该有更好的方法!
答案 0 :(得分:2)
您缺少的难题是router.post('/api/auth2/signout', async ctx => {
try {
if (ctx.isAuthenticated()) {
ctx.logout()
ctx.cookies.set('koa:sess')
ctx.cookies.set('koa:sess.sig')
ctx.body = { status: 'success' }
} else {
ctx.status = 401;
ctx.body = { status: 'error' };
}
}
catch (err) {
console.log(err)
}
仅影响通过ALTER DEFAULT PRIVILEGES
子句中指定的角色创建的表(或者,如果您省略了,运行该语句的用户)。
因此,如果创建表的是FOR USER/ROLE
,则必须运行
app_user