Gil*_*mas 6 postgresql permissions postgresql-9.2
我正在使用 PostgreSQL 9.2.4。当我在非超级用户拥有的数据库中以非超级用户身份创建表时,它归postgres用户所有,因此除非我明确授予自己权限,否则我无法将任何数据放入其中。
我创建了这样的非超级用户:
admin_user=# create role "test1" NOINHERIT LOGIN ENCRYPTED PASSWORD 'wibble' CONNECTION LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个test1像这样拥有的数据库:
admin_user=# create database "test1$db1" with owner "test1";
Run Code Online (Sandbox Code Playgroud)
然后我以 user 身份启动了一个新的 psql test1,并创建了一个表:
test1$db1=> create table test_table (column_name varchar(50));
Run Code Online (Sandbox Code Playgroud)
但我无法插入其中:
test1$db1=> insert into test_table values ('some data');
ERROR: permission denied for relation test_table
Run Code Online (Sandbox Code Playgroud)
检查权限显示该表归postgres用户所有:
test1$db1=> \dt
List of relations
Schema | Name | Type | Owner
--------+----------------+-------+----------
public | test_table | table | postgres
Run Code Online (Sandbox Code Playgroud)
但是,我可以授予自己权限并执行以下操作:
test1$db1=> grant insert, select on test_table to test1;
GRANT
test1$db1=> insert into test_table values ('some data');
INSERT 0 1
test1$db1=> select * from test_table;
column_name
-------------
some data
(1 row)
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?我很确定这曾经有效。CREATE TABLE的PostgreSQL 文档说
CREATE TABLE 将在当前数据库中创建一个新的、初始为空的表。该表将由发出命令的用户拥有。
必须在我自己的表上授予我自己的权限听起来不像是我应该做的。
非常感谢任何帮助!
[更新]
看起来这可能是由http://apt.postgresql.org/pub/repos/apt/上的 PostgreSQL 包的某种更改引起的
我们有三个机器映像,所有这些映像都从该源安装了 PostgreSQL:
因此,也许包装中发生了一些变化。我会在邮件列表中添加一行。
原来你的新桌子的主人postgres是个很奇怪的人。
无论哪种方式,默认情况下,您都可以使用以下命令使 Postgres 授予或撤销任何角色的任何权限ALTER DEFAULT PRIVILEGES:
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT INSERT, UPDATE, DELETE ON TABLES TO test1;
Run Code Online (Sandbox Code Playgroud)
好的,感谢大家的帮助。
但正如经常发生的非常奇怪的事情一样,结果证明这是一个我完全忘记的额外因素。我们使用 Dimitri Fontaine 的PostgreSQL 扩展白名单模块——我们是一个共享托管环境,需要稍微锁定一些东西。看起来这是在 7 月 23 日更新的,我们已经确认,如果没有扩展,这个问题就不存在,并且确实存在。我将为 Dimitri 制作一个最小的重现并提交错误报告。
抱歉占用您的时间!
| 归档时间: |
|
| 查看次数: |
11919 次 |
| 最近记录: |