postgresql 列级安全,列权限

列级安全

在某些情况下,并非所有的人都能看到表中所有的数据。postgres中可以指定某些用户只能看到某些列

1.--表,插入一条数据
postgres=# create table t_user(n_id int,c_name text);
CREATE TABLE
postgres=# insert into t_user values(1,'张三');
INSERT 0 1

2.--创建用户zhangsan
postgres=# create role zhangsan login;
CREATE ROLE

3.--赋予账号连接和使用权限
postgres=# grant connect on database postgres to zhangsan;
GRANT
postgres=# grant usage on schema public to zhangsan;
GRANT

4.赋予select权限给zhangsan,只能访问n_id
postgres=# grant select (n_id) on t_user to zhangsan;
GRANT

5.--查询数据,可以读取到数据
postgres=# c postgres zhangsan
You are now connected to database "postgres" as user "zhangsan".
postgres=> select n_id from t_user;
 n_id 
------
    1
(1 row)

--如果使用select *会报错,因为*标识所有的列,只能访问有权限访问的列
postgres=> select * from t_user;
错误:  permission denied for table t_user
postgres=> select c_name from t_user;
错误:  permission denied for table t_user
原文地址:https://www.cnblogs.com/zhangfx01/p/14367563.html