相关疑难解决方法(0)

错误:在尝试将SELECT作为只读用户时,Postgres上关系表名的权限被拒绝

GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
Run Code Online (Sandbox Code Playgroud)

readonly用户可以连接,查看表,但是当它尝试进行简单的选择时,它会获得:

ERROR: permission denied for relation mytable
SQL state: 42501
Run Code Online (Sandbox Code Playgroud)

这发生在PostgreSQL 9.1上

我做错了什么?

postgresql

86
推荐指数
2
解决办法
15万
查看次数

psycopg2.errors.InsufficientPrivilege:关系 django_migrations 的权限被拒绝

我的数据库 settings.py 看起来像:

ALLOWED_HOSTS = ['*']

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'fishercoder',
        'USER': 'fishercoderuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}
Run Code Online (Sandbox Code Playgroud)

我这样创建了一个名为“fishercoder”的新空数据库:

psql -U postgres
create database fishercoder; 
ALTER USER postgres with password 'badpassword!'; 
CREATE USER fishercoderuser WITH PASSWORD 'password';
ALTER ROLE fishercoderuser SET client_encoding TO 'utf8';
ALTER ROLE fishercoderuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE fishercoderuser SET timezone TO 'PST8PDT';
GRANT ALL PRIVILEGES ON DATABASE fishercoder TO fishercoderuser;

Run Code Online (Sandbox Code Playgroud)

然后我通过运行以下命令成功地将其他 SQL 转储导入到这个新数据库中:psql -U postgres …

python database django postgresql amazon-ec2

15
推荐指数
3
解决办法
2万
查看次数

受限制的Web应用程序的PostgreSQL权限

目标

创建一个有三个用户的数据库并限制他们的权限(我只是大声思考,所以我的用户分离也可以纠正):

  1. 超级用户 - 此用户允许最初的数据库配置.创建应用程序数据库,创建其他用户,设置其权限.默认postgres超级用户适合我,所以这一个完成.
  2. 管理员 - 此用户只能访问在配置期间创建的数据库.管理员可以CRUD所有表中的所有数据,也可以CRUD表等"仅用于此数据库的超级用户"类型的情况.在更新应用程序时,管理员是自动化工具用于处理数据库迁移的用户.
  3. 应用程序用户 - 此用户最终是支持Web应用程序功能的用户.请注意,这与网页上的用户无关 - 这是服务器用来运行查询,插入和删除数据的用户.我明确地希望这个用户能够修改任何东西的权限,也不希望创建/销毁表或索引或任何结构.

我试过的

首先,看看(通常很棒的)PostgreSQL文档,Grant上页面几乎让我眼花缭乱.花了几个小时阅读有关PostgreSQL角色和特权的消息后,我常常感到困惑.我认为通过更多的工作,我将能够确定我想要的管理员用户,但我非常坚持"应用程序用户".我已经知道了这一点(命名和密码都只是占位符):

$ psql -U postgres
postgres=# CREATE USER "app-admin" WITH PASSWORD 'password';
CREATE ROLE
postgres=# CREATE USER "app-user" WITH PASSWORD 'password';
CREATE ROLE
postgres=# CREATE DATABASE "test-database" WITH OWNER "app-admin";
CREATE DATABASE
postgres=# \c "test-database"
You are now connected to database "test-database" as user "postgres".
test-database=# DROP SCHEMA "public";
DROP SCHEMA
test-database=# CREATE SCHEMA "app" AUTHORIZATION …
Run Code Online (Sandbox Code Playgroud)

database postgresql privileges web-applications least-privilege

10
推荐指数
1
解决办法
2254
查看次数

GRANT SELECT根本不起作用

我有一个需要允许SELECT访问数据库的用户。我遵循了我发现的所有指示,分散在整个SO中,我什么也无法工作。

我已经尝试了以下所有链接的所有建议解决方案:

如何在PostgreSQL中创建一个只读用户?

错误:尝试将SELECT作为只读用户时,对Postgres上的关系表名的权限被拒绝

拒绝关联关系

...以及更多有关PSQL文档,博客和用户组的参考。什么都没用。

这是我最近用作postgres用户授予权限的命令:

postgres@dev:~$ psql
psql (9.1.9)
Type "help" for help.

postgres=# grant usage on SCHEMA public to proton_read;
GRANT
postgres=# grant select on all tables in schema public to proton_read;
GRANT
postgres=# alter default privileges in schema public grant select on tables to proton_read;
ALTER DEFAULT PRIVILEGES
Run Code Online (Sandbox Code Playgroud)

以下是用作只读用户的命令:

proton_read@dev:~$ psql proton
psql (9.1.9)
Type "help" for help.

proton=> select * from leads_lead limit 1;
ERROR:  permission denied for relation leads_lead
Run Code Online (Sandbox Code Playgroud)

这是踢球手,我曾经做过一次这项工作。我有一个示例数据库转储,用于向业务同事教授基本的SQL。我们覆盖简单的命令,如SELECT, …

sql postgresql

3
推荐指数
1
解决办法
1847
查看次数

使用Heroku关系django_migrations的权限被拒绝

在Heroku上尝试使用django迁移数据库更改时,我得到:

psycopg2.ProgrammingError: permission denied for relation django_migrations
Run Code Online (Sandbox Code Playgroud)

其他人已经能够通过授予适当的权限来解决此问题(例如,关系权限被拒绝).不幸的是,我无法在Heroku爱好层上授予权限或创建新用户.

我能够回滚一些迁移,但最终我得到了:

django.db.utils.ProgrammingError: table "labs_branch_tests" does not exist
Run Code Online (Sandbox Code Playgroud)

并且无法迁移回较新的迁移.


关于django_migrations关系的权限的完全回溯

  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 204, in handle
    fake_initial=fake_initial,
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/migrations/executor.py", line 115, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/migrations/executor.py", …
Run Code Online (Sandbox Code Playgroud)

django postgresql heroku

3
推荐指数
1
解决办法
4764
查看次数