if *_*one 22 postgresql permissions
我在 psql 中运行了以下 SQL:
CREATE USER bspu LOGIN;
CREATE DATABASE bsp OWNER bspu;
GRANT ALL PRIVILEGES ON DATABASE bsp TO bspu;
\c bsp
CREATE TABLE users (
id SERIAL PRIMARY KEY,
client_id VARCHAR(20) NOT NULL,
api_key VARCHAR(100) NOT NULL,
api_secret VARCHAR(100) NOT NULL,
auth_token VARCHAR(128) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
当我以 身份登录bspu并尝试查询users表时,出现错误:
Run Code Online (Sandbox Code Playgroud)permission denied for relation users
我尝试运行:
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO bspu;
Run Code Online (Sandbox Code Playgroud)
但它没有帮助。我究竟做错了什么?为什么数据库所有者没有权限查询自己的数据库?
编辑:我bspu现在升级为超级用户,所以我可以继续工作。任何进一步的指导表示赞赏。
Erw*_*ter 35
DEFAULT PRIVILEGES千万不能更改权限,现有的对象。它们是新创建的对象的默认权限,并且仅适用于它们所属的特定角色。如果运行时不指定角色ALTER DEFAULT PRIVILEGES,则默认为当前角色(执行ALTER DEFAULT PRIVILEGES语句时。
此外,由于您使用的是serial创建的列,因此SEQUENCE您还需要为序列设置默认权限。
在运行CREATE命令之前,在您创建对象的用户上运行此命令:
ALTER DEFAULT PRIVILEGES [ FOR ROLE my_create_role] GRANT ALL ON TABLES TO bspu;
ALTER DEFAULT PRIVILEGES [ FOR ROLE my_create_role] GRANT ALL ON SEQUENCES TO bspu;
Run Code Online (Sandbox Code Playgroud)
对 pgAdmin 用户的警告。pgAdmin III 和 pgAdmin4(包括 v5.3)的所有版本都有一个错误。数据库或模式节点的反向工程 SQL 脚本显示DEFAULT PRIVILEGES忽略拥有用户,因此在某些情况下是不正确的。我报告了这个错误(反复),但该项目在修复它时遇到了困难。pgAdmin III 被停止支持 pgAdmin4。该错误仍然存在于 pgAdmin4 中。
对于现有对象,您可能还对GRANT命令的这种“批处理”形式感兴趣:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO bspu;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO bspu;
Run Code Online (Sandbox Code Playgroud)
更多关于SO的相关问题:
| 归档时间: |
|
| 查看次数: |
108198 次 |
| 最近记录: |