PostgreSQL上的只读单表访问权限最少


10

以下是似乎可以用来创建新用户(登录)并为PostgreSQL上的一个指定表授予只读访问权限的命令列表。

假设这些命令是在具有足够特权的登录时执行的(即postgres默认安装中的登录)。

CREATE ROLE user_name NOSUPERUSER NOCREATEDB 
NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity';

现在,我想授予数据库select上的表的权限,因此就可以了(通过PgAdmin或类似方法将数据库选择为当前数据库):tab_abcdb_xyzdb_xyz

grant select on tab_abc to user_name;

现在的问题是:这是足够的,或者应该有更多的赠款(数据库connectusage也许)?

这些命令似乎对我有用,但是我的默认安装具有默认的安全设置。如果服务器管理员配置了更强的安全性,我还应该添加哪些其他赠款?

看来,我不需要批准connect,也没有usage-而授予是implicite select?总是这样吗?

Answers:


12

问题是:这足够了还是应该有更多的授权(数据库连接,可能使用)?

可能主要从以下几点使安全性从默认值得到加强:

  • pg_hba.conf文件。在考虑任何数据库特权之前,它会过滤连接。默认值是相对开放的,用于本地连接,但它可能仅限于数据库,用户名和网络来源的显式列表。

  • public的权限,任何人都拥有的伪角色。仅当授予的连接权限时,用户才能隐式连接PUBLIC。请参见创建的用户无需任何授权即可访问PostgreSQL中的所有数据库。数据库可能具有从公共吊销的所有特权。有关正在使用的主要PostgreSQL版本,请参见文档中的REVOKE

  • 在的存在public模式。为了方便起见,默认情况下使用数据库创建它,但这不是强制性的。代替从public架构中删除公共权限,对于DBA来说,public当新用户根本没有隐式权限时,只需删除架构就可以了。

在删除这些默认设置的情况下,要读取一个表,应授予一个新用户:

GRANT CONNECT ON DATABASE dbname TO username;

在数据库级别:

GRANT USAGE ON SCHEMA schemaname TO username;
GRANT SELECT ON schemaname.tablename TO username;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.