我在我的 PostgreSQL 9.5 数据库中有一个名为 editor_users
的用户组。我的 product 表被授予了 select, insert, update 和 delete
操作权限,以供 editor_user
成员使用。
但是我想防止 id 列被更新。如何撤销用户的更新权限?
我在我的 PostgreSQL 9.5 数据库中有一个名为 editor_users
的用户组。我的 product 表被授予了 select, insert, update 和 delete
操作权限,以供 editor_user
成员使用。
但是我想防止 id 列被更新。如何撤销用户的更新权限?
CREATE TABLE product (
id serial primary key,
mytext text
);
editor_user
权限:GRANT SELECT(id), INSERT(id) ON product TO editor_user;
GRANT SELECT(mytext), UPDATE(mytext), INSERT(mytext), REFERENCES(mytext) ON product TO editor_user;
你有两个选择。第一个选择是撤销表权限并授予列权限。如果您选择这种方式,那么最好使用Indoemation模式或系统目录来发现所有相关列,并通过程序创建授权语句。如果您选择这种方式,则array_agg
和array_to_string
是你的朋友。
例如:
revoke all on table product from public, ...;
select 'grant insert(' || array_to_string(array_agg(attname), ', ') || ') to ... ;'
from pg_attribute
where attrelid = 'product'::regclass and attnum > 0;
REVOKE UPDATE(id) ON product FROM GROUP editor_user;
将不会产生任何影响。 - MaxSELECT * FROM information_schema.column_privileges WHERE table_name = 'product'
并更改除了id
以外的所有列的权限。 - Max