【问题标题】:Why can I still not access any DB function in PSQL?为什么我仍然无法访问 PSQL 中的任何数据库函数?
【发布时间】:2016-08-22 18:24:54
【问题描述】:

这是我的init.sql 文件:

DROP DATABASE IF EXISTS my_data;
CREATE DATABASE my_data;

DROP USER IF EXISTS u;
CREATE USER u WITH PASSWORD 'secret';

GRANT ALL ON ALL TABLES IN SCHEMA public TO u;
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO u;
GRANT ALL ON ALL FUNCTIONS IN SCHEMA public TO u;

\c my_data;

CREATE TABLE users (
  ID SERIAL PRIMARY KEY NOT NULL,
  email VARCHAR NOT NULL DEFAULT '',
  password VARCHAR NOT NULL DEFAULT '',
  active SMALLINT NOT NULL DEFAULT '1',
  created TIMESTAMP NOT NULL,
  modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  salt VARCHAR NOT NULL DEFAULT ''
);

如果我:

psql -f init.sql

还有..

psql -d my_data -U u

my_data=> select * from users;

ERROR:  permission denied for relation users

如果我刚刚授予此权限,为什么会被拒绝?

更多信息

my_data=> \z users
                       Access privileges
 Schema | Name  | Type  | Access privileges | Column access privileges 
--------+-------+-------+-------------------+--------------------------
 public | users | table |                   | 
(1 row)

【问题讨论】:

    标签: sql postgresql psql privileges sql-grant


    【解决方案1】:

    您只授予了与表分开的架构的权限。如果您想授予对表的权限,也可以使用

    GRANT ALL ON ALL TABLES IN SCHEMA public TO u;
    

    请注意,如果您有序列或其他对象,它们也需要单独的权限。

    这必须在创建表之后设置,因为权限是为现有对象设置的。

    如果你想为新对象设置默认权限,你可以使用

    ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO u;
    

    【讨论】:

    • 嗯.. 更新了我的帖子与您的回答有关以添加所有赠款,但仍然是同样的错误。
    • \z users 告诉你什么?另外,您在什么时候创建表格,因为它没有显示在脚本中。
    • 更新了/z users 响应和我在 OP 中创建的表数据
    • @Trip 您必须在创建表后授予权限。它们设置在现有对象上,而不是新对象上
    • @Trip 还添加了如何设置将为新表设置的默认值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多