Asl*_*986 34 postgresql permissions
我将用户添加myuser到 Postgres。
然后我mydatabase在 pgAdmin III GUI 中添加了数据库并从备份文件中恢复。所以拥有者mydatabase是超级用户postgres。
然后我试图给所有的访问权和修改mydatabase来myuser。我psql以用户身份登录postgres:
psql -d template1 -U postgres
Run Code Online (Sandbox Code Playgroud)
然后我运行了这个查询:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser
Run Code Online (Sandbox Code Playgroud)
现在我可以myuser用来记录,但如果我尝试一个简单的查询,我会得到这个错误:
Run Code Online (Sandbox Code Playgroud)ERROR: permission denied for relation table_name
我错过了什么吗?你能帮我解决吗?
Gor*_*son 42
您已授予CREATE、CONNECT和TEMPORARY对数据库的权限,myuser但尚未授予SELECT和INSERT表权限。你需要这样的东西:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO myuser;
Run Code Online (Sandbox Code Playgroud)
此外,如果您有从序列中绘制的任何序列列或其他列默认值,则您需要对序列的权限。通常,USAGE特权足以使INSERT操作正常工作,但是由于您要求"give all rights":
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO myuser;
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 12
对已经存在的对象使用@Gord 提供的命令。
您可能也想授予DEFAULT PRIVILEGES。因此,您的用户myuser也可以自动访问未来的对象。
可以按模式完成:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO myuser;
Run Code Online (Sandbox Code Playgroud)
如果省略架构,则它适用于整个数据库:
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO myuser;
Run Code Online (Sandbox Code Playgroud)
仅适用于指定角色创建的对象(默认为执行此命令的角色):
ALTER DEFAULT PRIVILEGES FOR ROLE administrator GRANT IN SCHEMA public ... ;
Run Code Online (Sandbox Code Playgroud)
自 PostgreSQL 9.0 起可用。如果你有的话,
不要忘记额外的GRANT特权SEQUENCES。(例如作为串行列中默认值的来源。)
| 归档时间: |
|
| 查看次数: |
138042 次 |
| 最近记录: |