Alp*_*gay 21 security postgresql permissions database-permissions
我想为所有数据库中的所有表创建一个只具有select权限的用户.我以为我可以获取数据库列表并为每个数据库应用以下命令:
GRANT select ON DATABASE dbname to user1;
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
ERROR: invalid privilege type SELECT for database
Run Code Online (Sandbox Code Playgroud)
当我用谷歌搜索时,人们建议grant select对所有桌子进行操作.但总是会添加新表.所以这对我来说不是一个可接受的解决方案.有谁知道任何变通方法?
IMS*_*SoP 24
您需要做两件事:首先,允许访问现有对象; 第二,设置从现在开始创建的新对象的默认访问权限.
请注意,授予对"TABLES"的访问权限包括视图,但不包括序列(例如"SERIAL"列的自动增量功能),因此您可能也希望授予对这些列的访问权限.
以下假定您要在public架构中执行所有操作.该ALTER DEFAULT PRIVILEGES声明可以通过省略该IN SCHEMA ...条款对整个数据库起作用; 在GRANT必须对每个方案运行一次.
-- Grant access to current tables and views
GRANT SELECT ON ALL TABLES IN SCHEMA public TO user1;
-- Now make sure that's also available on new tables and views by default
ALTER DEFAULT PRIVILEGES
IN SCHEMA public -- omit this line to make a default across all schemas
GRANT SELECT
ON TABLES
TO user1;
-- Now do the same for sequences
GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO user1;
ALTER DEFAULT PRIVILEGES
IN SCHEMA public -- omit this line to make a default across all schemas
GRANT SELECT, USAGE
ON SEQUENCES
TO user1;
Run Code Online (Sandbox Code Playgroud)
PostgreSQL手册
a_h*_*ame 23
您无法在数据库级别执行此操作,仅在架构级别执行此操作.
假设您只public在每个数据库中使用模式,您可以这样做:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO user1;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO user;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29870 次 |
| 最近记录: |