无法授予对现有表的访问权限

时间:2018-06-04 09:51:22

标签: sql postgresql roles rbac

我未能添加新的DB角色,对特定数据库中的表具有$ curl # collapsed multi-line command curl: try 'curl --help' or 'curl --manual' for more information ERROR: Job failed: exit code 1 权限。

我的问题是该角色无法从现有数据库中的表中SELECT

这是我失败的测试用例(写得好,可以安全地复制粘贴到SELECT并执行):

/tmp/test.sh

看起来我错过了一些非常令人尴尬的事情,因为上面的失败并出现以下错误

# --- cleanup objects, if any
psql -U postgres -c "REVOKE SELECT ON ALL SEQUENCES IN SCHEMA public FROM db_reader"
psql -U postgres -c "REVOKE SELECT ON ALL TABLES IN SCHEMA public FROM db_reader"
psql -U postgres -c "REVOKE USAGE ON SCHEMA public FROM db_reader"
psql -U postgres -c "DROP ROLE IF EXISTS db_reader"
psql -U postgres -c "DROP DATABASE IF EXISTS some_existing_db"
# --- test
psql -U postgres -c "CREATE DATABASE some_existing_db"
psql -U postgres some_existing_db -c "CREATE TABLE cats (name varchar(10))"
psql -U postgres some_existing_db -c "INSERT INTO cats (name) VALUES ('a'), ('b')"
psql -U postgres -c "CREATE ROLE db_reader WITH login"
psql -U postgres -c 'GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO db_reader'
psql -U postgres -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO db_reader'
psql -U postgres -c 'GRANT USAGE ON SCHEMA public TO db_reader'
psql -U db_reader some_existing_db -c "SELECT COUNT(1) FROM cats"

为什么?

1 个答案:

答案 0 :(得分:1)

您缺少数据库在逻辑上是分开的。

您的GRANT语句在数据库postgres中执行(如果未指定数据库名称,psql将尝试连接到与数据库用户同名的数据库)

因此,这些授权的影响仅限于您所连接的数据库。

您必须将some_existing_db添加到psql授予db_reader权限的 Cars Range(Days) Sold 0 A 1-3 5 1 4-7 23 2 8-15 2 3 B 4-7 4 4 8-15 1 5 C 1-3 5 6 D 1-3 2 7 E 1-3 9 次调用中。