我正在尝试为SELECT
Redshift 中的组分配权限。所以我在该组中创建了一个组和一个用户:
CREATE GROUP data_viewers;
CREATE USER <user> PASSWORD '<password>' IN GROUP data_viewers;
Run Code Online (Sandbox Code Playgroud)
现在我想让这个组能够从任何表中读取数据:
GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC TO GROUP data_viewers;
Run Code Online (Sandbox Code Playgroud)
命令返回GRANT
。现在,当我以新创建的用户身份连接到 Redshift 并发出问题时,SELECT * FROM something.something;
我得到:
架构某物的权限被拒绝
我尝试授予某些东西的权限:GRANT SELECT ON ALL TABLES IN SCHEMA something TO GROUP data_viewers;
但这并没有改变任何东西。
如何允许我组中的用户SELECT
访问架构中任何表中的数据?
我有一个应用程序(数据存储在 PostgreSQL 中),其中表中的大多数字段始终不为空,但这些表的架构并未强制执行此操作。例如看看这个假表:
CREATE TABLE "tbl" (
"id" serial,
"name" varchar(40),
"num" int,
"time" timestamp
PRIMARY KEY ("id"),
UNIQUE ("id")
);
Run Code Online (Sandbox Code Playgroud)
此外name
,num
,time
没有明确声明为NOT NULL
,实际上它们是,因为强制执行发生在应用程序端。
我的感觉是应该改变它,但相反的是应用程序级别确保这里不能出现空值并且没有其他人手动修改表。
我的问题是:通过设置一个显式NOT NULL
约束?
我们有一个很好的代码审查流程和一个相当好的文档,所以一些新人会提交打破这个限制的东西的可能性并不足以证明改变是合理的。
这不是我的决定,所以这正是我寻找其他理由的原因。在我看来,如果某些内容不能为空并且数据库允许您指定某些内容不为空 - 那就去做吧。特别是如果更改非常简单。
我有一个非常标准的问题,我无法解决。我想在 redshift 中删除一个DROP USER u_A;
返回我的用户:user "u_A" cannot be dropped because the user has a privilege on some object
。
问题是我不知道这是什么特权以及针对什么对象。
在 PostgreSQL 中,我只想REASSIGN OWNED BY u_A TO u_B
在 u_B 是其他用户的地方。问题是 redshift 不支持 REASSIGN。我拥有的表和模式的数量太大(所以我不能随意尝试所有内容,希望在某个时候我会删除所需的特权。
那么如何删除该用户呢?