Ada*_*tan 122 postgresql permissions sql user-management
是否有一个班轮,授予SELECT权限给新用户的PostgreSQL?
将实现以下伪代码的东西:
GRANT SELECT ON TABLE * TO my_new_user;
Run Code Online (Sandbox Code Playgroud)
小智 205
我认为提及从 9.0 开始,postgres 确实具有授予架构中所有表(以及其他对象)权限的语法:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO user;
Run Code Online (Sandbox Code Playgroud)
这是链接。
Ada*_*tan 14
我的(非单线)解决方案:
#!/bin/bash
for table in `echo "SELECT schemaname || '.' || relname FROM pg_stat_user_tables;" | psql -A -t my_database_name`;
do
echo "GRANT SELECT ON TABLE $table to my_new_user;"
echo "GRANT SELECT ON TABLE $table to my_new_user;" | psql my_database_name
done
Run Code Online (Sandbox Code Playgroud)
从特权用户运行,它就像一个魅力。
Ben*_*ams 12
这可以通过两步过程来完成。
运行此查询:
select 'grant all on '||schemaname||'.'||tablename||' to $foo;'
from pg_tables where schemaname in ('$bar', '$baz')
order by schemaname, tablename;
Run Code Online (Sandbox Code Playgroud)
更换:
$foo= 您要授予权限的用户名
$bar,$baz= 您要授予权限的架构(可以只是“公开”)
这将为您提供将生成所需权限的查询列表。复制输出,将其粘贴到另一个查询中,然后执行。
小智 8
我最终这样做了,它奏效了:
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO PUBLIC;
Run Code Online (Sandbox Code Playgroud)
我最终来到这里是因为我的数据库用户只看到了几个表,而不是较新的表。如果这是你的情况,这对我有帮助。
向所有现有表授予权限:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO user;
Run Code Online (Sandbox Code Playgroud)
向将来要创建的所有新表授予权限(通过默认权限):
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO user;
Run Code Online (Sandbox Code Playgroud)
您还可以仔细检查所有表是否都已正确授予。
计算所有现有表的数量:
SELECT COUNT(*)
FROM pg_catalog.pg_tables
WHERE schemaname != 'pg_catalog' AND
schemaname != 'information_schema';
Run Code Online (Sandbox Code Playgroud)
统计用户有权访问的所有表:
SELECT COUNT(*)
FROM information_schema.role_table_grants
WHERE grantee = 'user';
Run Code Online (Sandbox Code Playgroud)
最后两个查询的计数必须相同。