PostgreSQL 13 :: ERROR: permission denied for table 'mydb'
PostgreSQL 13 :: ERROR: permission denied for table 'mydb'
下面我正在创建数据库 mydb
并填充它。请注意,我执行的最后一步是为 postgres
设置密码。这只是为了避免在前面的步骤中提示密码。
我遵循了其他 Whosebug
帖子中的步骤,即在 TABLES
、SEQUENCES
和 FUNCTIONS
上发布了 GRANT ALL
,但我仍然面临下面的问题。
mydb.sh:
su - postgres <<xEOFx
set +H
psql -c "CREATE DATABASE mydb"
psql -c "CREATE USER user01 WITH ENCRYPTED PASSWORD 'SomePassword'"
psql -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to user01"
psql -c "GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to user01"
psql -c "GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to user01"
psql --dbname=mydb --username=postgres -f /tmp/mydb.sql
psql -c "GRANT ALL PRIVILEGES ON DATABASE mydb TO user01"
psql -c "ALTER USER postgres WITH PASSWORD 'AnotherPassword'"
exit
xEOFx
脚本没有失败,但我也无法访问 mydb
作为 user01
:
jdoe$ psql --username=user01 --dbname=mydb
Password for user user01:
psql (13.2)
Type "help" for help.
mydb=> \c
You are now connected to database "mydb" as user "user01".
mydb=> \dt
List of relations
Schema | Name | Type | Owner
--------+---------------+-------+----------
public | some_table | table | postgres
(1 rows)
mydb=> select * from some_table;
ERROR: permission denied for table some_table
mydb=>
SIDEBAR:我确实注意到 some_table
的所有者是 postgres
,我希望它是 user01
。也许这可能是问题的一部分。
我错过了什么?
提前致谢。
编辑:请注意,我也在 GRANT ALL
语句之前尝试了 运行 psql --dbname=mydb --username=postgres -f /tmp/mydb.sql
。
您正在向数据库 postgres 而非 mydb 的 public 模式中的表、序列和函数授予权限。默认情况下,psql 将连接到与当前用户同名的数据库,在本例中为 postgres。通过将 -d mydb
添加到您的 psql 命令,确保您 运行 mydb 中的命令。
下面我正在创建数据库 mydb
并填充它。请注意,我执行的最后一步是为 postgres
设置密码。这只是为了避免在前面的步骤中提示密码。
我遵循了其他 Whosebug
帖子中的步骤,即在 TABLES
、SEQUENCES
和 FUNCTIONS
上发布了 GRANT ALL
,但我仍然面临下面的问题。
mydb.sh:
su - postgres <<xEOFx
set +H
psql -c "CREATE DATABASE mydb"
psql -c "CREATE USER user01 WITH ENCRYPTED PASSWORD 'SomePassword'"
psql -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to user01"
psql -c "GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to user01"
psql -c "GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to user01"
psql --dbname=mydb --username=postgres -f /tmp/mydb.sql
psql -c "GRANT ALL PRIVILEGES ON DATABASE mydb TO user01"
psql -c "ALTER USER postgres WITH PASSWORD 'AnotherPassword'"
exit
xEOFx
脚本没有失败,但我也无法访问 mydb
作为 user01
:
jdoe$ psql --username=user01 --dbname=mydb
Password for user user01:
psql (13.2)
Type "help" for help.
mydb=> \c
You are now connected to database "mydb" as user "user01".
mydb=> \dt
List of relations
Schema | Name | Type | Owner
--------+---------------+-------+----------
public | some_table | table | postgres
(1 rows)
mydb=> select * from some_table;
ERROR: permission denied for table some_table
mydb=>
SIDEBAR:我确实注意到 some_table
的所有者是 postgres
,我希望它是 user01
。也许这可能是问题的一部分。
我错过了什么?
提前致谢。
编辑:请注意,我也在 GRANT ALL
语句之前尝试了 运行 psql --dbname=mydb --username=postgres -f /tmp/mydb.sql
。
您正在向数据库 postgres 而非 mydb 的 public 模式中的表、序列和函数授予权限。默认情况下,psql 将连接到与当前用户同名的数据库,在本例中为 postgres。通过将 -d mydb
添加到您的 psql 命令,确保您 运行 mydb 中的命令。